Saturday, 21 December 2013

GAME CAB 1.1 - Game Controller USB - Simplification

Suppression du port pour le programmateur et optimisation de schéma pour la connectique des boutons et des joystick de ma borne d'arcade
Ce Schéma a été produit avec Fritzing

Typhon:

Sur ma plaque de prototypage ça fonctionne bien. Les tests sur la version précédente étaient bon. Je vais lancer la production des deux plaques dont j'aurais besoin au final.

Marériel:
Nbr. Type Informations
1 Ceramic Capacitor boitier 100 mil [THT, multilayer]; capacité 100nF; voltage 6.3V
1 Electrolytic Capacitor boitier 100 mil [THT, electrolytic]; capacité 10µF; voltage 6.3V
1 Crystal boitier THT; fréquence 16 MHz; type crystal; éspacement des broches 5.08mm
1 2.2k Ω Resistance boitier THT; tolérence ±5%; bands 4; résistance 2.2kΩ; éspacement des broches 400 mil
2 Ceramic Capacitor boitier 100 mil [THT, multilayer]; capacité 22pF; voltage 6.3V
2 Zener Diode boitier 300 mil [THT]; breakdown voltage 3.6V; type Zener; power dissipation 0.5W; numéro du composant 1N4732A
2 68 Ω Resistance boitier THT; tolérence ±5%; bands 4; résistance 68Ω; éspacement des broches 400 mil
1 ATMega8 boitier DIL
10 Screw terminal - 2 pins boitier THT; Taille du trou 1.0mm,0.508mm; broches 2; éspacement des broches 0.1in (2.54mm)
1 USB connector boitier THT; connector shape USB-B



Fuses:
Low: 0xd9
High: 0xbf

Ext. Crystal/Res High Freq. Start-up Time: 16k + 64ms
Brown-out detection enabled
Brown-out level VCC = 2.7V
Boot Flash size = 1024 words Start address $0c00
SPI enabled




Saturday, 2 November 2013

Adaptateur N64 to GC 1.1

Prototypage de l'adaptateur (le firmeware a été brûler avec n64_to_wii-1.4.hex):


Installation de l'émulateur Wii64 avec son forwarder, afin d'avoir une chaine sur l'écran d’accueil. Pour cela il faut:
- The Homebrew Channel
- YAWMM (Yet Another Wad Manager Mod)
- Wii64 1.1 et son forwarder

Je pars du principe que The Homebrew Channel et YAWMM sont déjà installé. Il existe plein de tutoriaux sur le net, de plus YAWMM ne pourra être lancé que si The Homebrew Channel est installé (il doit être lancé depuis The Homebrew Channel ).

Décompresser Wii64 1.1 et son forwarder. Ensuite, il faut copié le dossier apps/wii64 et son contenu sur la carte SD de la Wii. Le répertoire wii64, qui contient roms et saves, doivent être copier à la racine de la carte SD de la Wii. Le fichier Wii64 Forwarder - WN64 [IOS58+AHBPROT].wad doit, quant à lui, être copié dans le répertoire wad, à la racine de la carte SD.

Une fois la carte remise dans la Wii, démarrer la Wii, aller dans The Homebrew Channel et lancer YAWMM. Depuis là installer le wad add-in d'avoir une chaine pour Wii64.

Une fois terminé, on teste:


Parfait. 

Maintenant, je finalise le typhon:



Installation d'une distrib. Openelec sur un Rapsberry Pi

J'ai finalement reçu mon deuxième Rapsberry Pi. Je vais pouvoir créer un deuxième Media Center pour le salon (j'ai installé le premier dans mon bureau).

Comme pour mon premier Rapsberry, j'opte pour une distribution Openelec. Cette version a l'avantage de gérer le CEC (Consumer Electronics Control, une des spécifications du HDMI qui permet à des appareils compatibles HDMI-CEC de se "piloter" entre eux). 

Tous ce dont j'ai besoin c'est:
  • La carte Rapsberry Pi (dans son boitier).
  • Une alimentation micro-USB.
  • Un câble HDMI.
  • Une carte SD.
  • La distribution Openelec pour Rapsberry Pi (http://openelec.thestateofme.com/). Prendre le fichier *.img.zip le plus récent.
Une fois le fichier téléchargé, voici les différentes opérations à suivre sous Mac OS:

1) Formatage de la carte SD.

  • Ouvrir l'utilitaire de disque.
  • Selectionner la carte SD.
  • Cliquer sur l'onglet Effacer.
  • Cliquer sur le boutton Effacer.
 
2) Copie de la distribution sur la carte SD.

  • Avant tout, il faut décompresser le fichier *.img.zip, si ce n'est pas déjà fait. 
  • Ouvrir le Terminal
  • Au prompt, taper la commande : diskutil list
  • Ça doit donner quelque chose comme ça:
/dev/disk0
   #:                       TYPE NAME
                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            999.3 GB   disk0s2
   3:                  Apple_Boot Recovery HD            650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME
                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme
                        *3.9 GB     disk1
   1:                 DOS_FAT_32 XBMC                    3.9 GB     disk1s1 

/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *2.0 TB     disk3
   1:        Apple_partition_map                         32.3 KB    disk3s1
   2:                 Apple_HFSX Copies de sauvegarde... 2.0 TB     disk3s2



  • Là, il s'agit de ne pas se planter. 
          1) Dans la liste ci-dessus, la carte SD est disk1.  
          2) On va utiliser la commande Unix dd (Data Destroyer) en mode SUDO :
              SUDO dd if=/Users/[User ID]/Downloads/r12823.img of=/dev/disk1
          3) J'ai obtenu l'erreur suivante :  dd: /dev/disk1: Resource busy 
          4) Il faut lancer la commande suivante : diskutil umountDisk disk1 
          5) Puis il faut relancer la commande dd en mode SUDO.

3) Mise à jour du système.
J'en profite pour mettre à jour mon système existant. Pour cela il suffit de copier les fichiers KERNEL, KERNEL.md5, SYSTEM et SYSTEM.md5 dans le répertoire Update et au prochain redémarrage, le système se mettra à jour.

Wednesday, 30 October 2013

Brûler un firmeware sur une puce ATMEGA8

J'utilise un ISP (In-System Programming) bas de gamme (usbasp) mais qui fait parfaitement bien l’affaire.

Pour référence, je met la connectique:

Pour faire simple on va brancher le connecteur USB sur l'ordinateur pour qu'il alimente le µC et au travers du connecteur ISP.
On peut alors vérifier au moyen d'un multimètre si on a bien 5V entre les pin 7 et 8 de l'ISP et entre les pin 7 et 8 du µC (Atmega8) également.


Maintenant on va tester si le programmateur fonctionne, et donc s'il voit le µC qui lui est connecté par l'ISP.

Par exemple en lisant la mémoire flash de l'atmega8
sudo avrdude -p m8 -P /dev/parport0 -c usbasp -U flash:r:-:i -E noreset

Il devrait répondre ainsi :
avrdude: WARNING: -E option not supported by this programmer type
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9307
avrdude: reading flash memory:
Reading | ################################################## | 100% 3.16s
avrdude: writing output file "<stdout>"
:00000001FF
avrdude: safemode: Fuses OK
avrdude done.  Thank you. 


Super !! Ça fonctionne !

Un peu d'explication :
sudo, car on a besoin d'accéder à la ressource matérielle du port parallèle. 
-p m8, indique le modèle de µC.  
-P /dev/parport0, spécifie le port sur lequel est connecté le programmateur (port parallèle).  
-c usbasp, indique le nom du programmateur.  
-U flash:r:-:i 
-E noreset, pour s'adresser à la mémoire flash du µC en mode lecture.
 
Programatin de la Puce : 
Reste à programmer le µC pour y mettre le fichier .hex 
sudo avrdude -p m8 -c usbasp -U flash:w:/"PATH"/"FILE".hex 

Ce qui renvoie :
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9307
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/"PATH"/"FILE".hex"
avrdude: input file /"PATH"/"FILE".hex auto detected as Intel Hex
avrdude: writing flash (1898 bytes):
Writing | ################################################## | 100% 1.16s
avrdude: 1898 bytes of flash written
avrdude: verifying flash memory against /"PATH"/"FILE".hex:
avrdude: load data flash data from input file /"PATH"/"FILE".hex:
avrdude: input file /"PATH"/"FILE".hex auto detected as Intel Hex
avrdude: input file /"PATH"/"FILE".hex contains 1898 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.81s
avrdude: verifying ...
avrdude: 1898 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done.  Thank you. 
Super !! 

Mais... Il manque une étape cruciale, la programmation des bits fusibles. En effet, sans cela l'oscillateur @12Mhz du montage ne sera pas pris en compte par le µC qui continuera d'utiliser son oscillateur interne.

Les valeurs appropriée pour mon projet sont:
ATMEGA8 builds: high byte = 0xc9, low byte = 0x9f 
 
Donc j'envoie la ligne suivante: 
sudo avrdude -p m8 -P /dev/parport0 -c usbasp -Uhfuse:w:0xc9:m -Ulfuse:w:0x9f:m 

Ce qui donne :
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9307
avrdude: reading input file "0xc9"
avrdude: writing hfuse (1 bytes):
Writing | ################################################## | 100% 0.01s
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xc9:
avrdude: load data hfuse data from input file 0xc9:
avrdude: input file 0xc9 contains 1 bytes
avrdude: reading on-chip hfuse data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0x9f"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.01s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0x9f:
avrdude: load data lfuse data from input file 0x9f:
avrdude: input file 0x9f contains 1 bytes
avrdude: reading on-chip lfuse data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: safemode: Fuses OK
avrdude done.  Thank you.
 
Il ne reste plus qu'à tester....

Adaptateur N64 to GC 1.0

Qu'il soit possible de jouer aux jeux N64 sur la Wii est une chose merveilleuse (Merci Nintendo!), mais naturellement, l'expérience est bien plus authentique avec les vraies manettes d'origine.

Ce billet est un portage du circuit développer par Raphaël Assénat (raphnet technologies).
Raphaël utilise une carte générique de sa conception pour son adaptateur. J'ai volontairement limité ma carte au strict minimum de composant. Je n'utilise donc pas son Multiuse tiny1 PCB.

Voici donc le schéma du PCB:

Ce Schéma a été produit avec Fritzing

 La plaque de prototypage:

Liste des composants:

Label Part Type Properties
Atmega8 ATMega8 boitier DIL
C1 Electrolytic Capacitor boitier 100 mil [THT, electrolytic]; capacité 1µF; voltage 6.3V
C2 Ceramic Capacitor boitier 200 mil [THT, multilayer]; capacité 18pF; voltage 6.3V
C3 Ceramic Capacitor boitier 200 mil [THT, multilayer]; capacité 18pF; voltage 6.3V
GC Generic rounded female header - 6 pins boitier THT; Taille du trou 0.7mm,0.508mm; row single; forme ♀ (female rounded); broches 6; éspacement des broches 0.1in (2.54mm)
ISP Generic shrouded header - 10 pins boitier THT; Taille du trou 1.0mm,0.508mm; row double; forme ♂ (shrouded male); broches 10; éspacement des broches 0.1in (2.54mm)
N64 Generic rounded female header - 3 pins boitier THT; Taille du trou 0.7mm,0.508mm; row single; forme ♀ (female rounded); broches 3; éspacement des broches 0.1in (2.54mm)
R1 2.2k Ω Resistance boitier THT; tolérence ±5%; bands 4; résistance 2.2kΩ; éspacement des broches 400 mil
R2 0 Ω Resistance boitier THT; tolérence ±5%; bands 4; résistance 0Ω; éspacement des broches 400 mil
Y1 Crystal boitier THT; fréquence 16 Mhz; type crystal; éspacement des broches 5.08mm

La puce Atmega8 doit être programmée avec l'un de ces firmewares:

Controlleur VersionFichierMCUCommentaires
Nes/Snes1.3snes2wii-1.3.hexAtmega8 Changes in this version:
  • Added a feature to swap the NES A and B buttons. Hold A and B at power up to use it.
Nes/Snes1.1snes2wii-1.1.hexAtmega8 Changes in this version:
  • NES mode can be forced on by holding the Start button at power-up. Without this, in my opinion, NES games are almost unplayable with an SNES controller.
  • Implemented button combinations which can affect how unaccessible Gamecube buttons and sticks are reported. eg: Sending L+R pressed with a NES controller, and sending "CStick towards the right". Mostly useful to summon some emulator's menu while playing.
  • Implemented new Gamecube commands for better compatibility, eg: GCLinux.
Nes and Snes1.0snes2wii-1.0.hexAtmega8 This was the first version. Nes or Snes mode selected with jumper.
Nintendo 641.4n64_to_wii-1.4.hexAtmega8 New in this version:
  • Added 4 new button mappings, accessible by holding a C button for each mapping. These are reported to be useful for Super Smash bros Melee and Brawl.
  • Created a single page PDF documenting the supported mappings.
Nintendo 641.3n64_to_wii-1.3.hexAtmega8 New in this version:
  • It is now possible to disable the feature where the L and Z buttons are swapped by holding the 'L' button down when plugging the adapter in the console.
  • If the R button is held down when plugging the adapter into the console, the N64 C-left and C-right buttons are mapped to the Gamecube Y and X buttons. This makes it possible to play the virtual console game Sin and Punishment.
  • The joystick sensitivity can be increased by holding the Dpad right button when plugging the adapter into the console.
  • The joystick sensitivity can be decreased by holding the Dpad left button when plugging the adapter into the console.
Nintendo 641.2n64_to_wii-1.2.hexAtmega8 Version 1.1 for N64 had a reliability bug which caused some controllers to randomly reset and recalibrate during play. This is fixed in version 1.2. It is recommended that you upgrade even if version 1.1 is working for you.

Ce tableau est une copie du tableau du site de Raphaël Assénat (raphnet technologies).

Sunday, 27 October 2013

GAME CAB 1.0 - Game Controller USB - Schéma

Schéma pour la connectique des boutons et des joystick de ma borne d'arcade

Ce Schéma a été produit avec Fritzing

Typhon:

Sur ma plaque de prototypage ça fonctionne bien. Je vais lancer la production d'une plaque pour des tests approfondis (connexions de tous les boutons, tests sur une carte mère, etc...).

Note: je dois écrire un article qui décrira comment brûler la puce Atmel avec le code pour le joystick.