まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Manette Super Nintendo USB -2-

dsc07557.jpg
Finalement je suis resté assez peu satisfait de ma bidouille, car le circuit électronique de la manette 2-TECH est assez mal reconnu par certains émulateurs, voyant certains boutons ne pas fonctionner, alors que le test basique de ceux-ci était tout à fait concluant.

jstest /dev/input/js0

Et étant donné ma récente initiation au monde des micro-contrôleurs, la solution que j'avais entrevu à l'époque, proposée par raphnet, mérite aujourd'hui d'être appliquée !

ATmega88 :

La boutique où je me suis fournit en composants divers n'avait malheureusement pas de µC ATmega8 en stock, j'ai alors opté pour le modèle plus récent ATmega88.

Le fichier .hex fournit par Raphnet étant compilé pour l'ATmega8, il est impossible de le mettre dans la puce ATmega88 et pour cause, bien que relativement similaire, ce µC comporte quelques différences auxquelles il faut s'adapter.

Le source étant disponible sous GNU[1], il ne restait plus qu'à étudier quoi faire…

  • Première chose, éditer le Makefile, pour remplacer atmega8 par atmega88

De là, tenter une compilation miracle, par la commande :

make

Qui renvoie ceci :

avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=atmega88 -DF_CPU=12000000L -c usbdrv/usbdrv.c -o usbdrv/usbdrv.o
avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=atmega88 -DF_CPU=12000000L -x assembler-with-cpp -c usbdrv/usbdrvasm.S -o usbdrv/usbdrvasm.o
avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=atmega88 -DF_CPU=12000000L -c usbdrv/oddebug.c -o usbdrv/oddebug.o
avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=atmega88 -DF_CPU=12000000L -c main.c -o main.o main.c: In function ‘hardwareInit’:
main.c:137: erreur: ‘TCCR0’ undeclared (first use in this function)
main.c:137: erreur: (Each undeclared identifier is reported only once
main.c:137: erreur: for each function it appears in.)
main.c:139: erreur: ‘TCCR2’ undeclared (first use in this function)
main.c:140: erreur: ‘OCR2’ undeclared (first use in this function)
main.c: In function ‘main’:
main.c:343: erreur: ‘TIFR’ undeclared (first use in this function)
main.c:363: erreur: ‘OCF2’ undeclared (first use in this function)
make: *** [main.o] Erreur 1

Ces erreurs sont en fait ciblées sur des registres qui ont été dédoublés dans l'ATmega88.
Dans le fichier main.c, j'ai donc remplacé les choses suivantes :

- TCCR0 devient TCCR0B.
- TCCR2 devient TCCR2A et TCCR2B, ce qui dédouble sa ligne comme ceci :

TCCR2A = (1<<WGM21);
TCCR2B = (1<<CS22)|(1<<CS21)|(1<<CS20);

- OCR2 devient OCR2A.
- TIFR devient TIFR2.
et donc TOV0 devient TOV2.
et aussi OCF2 devient OCF2B.

Maintenant la compilation se passe bien !
Sources et hex modifiés disponibles en annexes[2]

Programmation du µC :

Le Programme :

sudo avrdude -p atmega88 -P /dev/parport0 -c stk200 -Uflash:w:/chemin vers le fichier/nes_snes_db9_usb-1.8_ATMEGA88.hex

Les Fusibles :

sudo avrdude -p atmega88 -P /dev/parport0 -c stk200 -U lfuse:w:0xdf:m -U hfuse:w:0xdd:m

Si besoin, pour effacer le µC

sudo avrdude -p atmega88 -P /dev/parport0 -c stk200 -e


Le Programme :

avrdude -p m88 -P /dev/ttyUSB0 -c avrispmkII -Uflash:w:/chemin vers le fichier/nes_snes_db9_usb-1.8_ATMEGA88.hex -B 1.0

Les Fusibles :

avrdude -p m88 -P /dev/ttyUSB0 -c avrispmkII -U lfuse:w:0xdf:m -U hfuse:w:0xdd:m

Si besoin, pour effacer le µC

avrdude -p m88 -P /dev/ttyUSB0 -c avrispmkII -e


  • Avec le programmateur USBASP :

Le Programme :

sudo avrdude -p atmega88 -P /dev/ttyUSB0 -c usbasp -Uflash:w:/chemin vers le fichier/nes_snes_db9_usb-1.8_ATMEGA88.hex -B 1.0

Les Fusibles :

sudo avrdude -p atmega88 -P /dev/ttyUSB0 -c usbasp -U lfuse:w:0xdf:m -U hfuse:w:0xdd:m -B 1.0

Si besoin, pour effacer le µC

sudo avrdude -p atmega88 -P /dev/ttyUSB0 -c usbasp -e


dsc07543.jpg
Les tests sur la maquette étant concluants, restait plus qu'à bidouiller un montage pour insérer le petit montage dans la manette.

Le montage :

dsc07548.jpg Ici, pas question de réaliser une plaquette d'essais et encore moins de tirer une plaque d'epoxy pour construire le montage, ça ne rentrerait jamais dans le boitier de la manette, alors il faut tout souder sur place !

Tout de même, par soucis liés à des d'interventions futures pour de la maintenance ou une évolution du programme, j'ai préféré souder les composants sur un support tulipe dont j'ai coupé une partie des pattes.
J'ai aussi remplacé le Quartz et les deux condensateurs par un résonateur… Hop, deux composants en moins.
Ainsi l'ensemble sera suffisamment fin pour se loger dans de boitier.
dsc07545.jpg
dsc07552.jpg

Avant de monter tout ça dans le boitier, j'ai redonné un coup de jeune aux contacteurs des boutons en effritant et tamponnant le graphite d'une mine de crayon sur ceux-ci.

Remplacés les fils violet qui ont servit durant la phase de test, par des fils vert très fins, qui conviennent mieux dans notre cas.

Une fois le montage raccordé au circuit de la manette et au câble USB, je l'ai collé au fond du boitier avec de l'adhésif double-face.
Ensuite je l'ai recouvert d'adhésif papier pour l'isoler du reste…
dsc07553.jpg dsc07554.jpg

Reste donc à mettre le câble USB en place, à refermer et visser le boitier !
dsc07555.jpg dsc07557.jpg

Et voila !

Notes

[1] General Public License as published by the Free Software Foundation

[2] voir ci-dessous

Commentaires

1. Le dimanche, 21 août 2011, 19:07 par Niko

Merci, grâce à ton site, je vais pouvoir sortir du placard ma mb miniITX pour faire de l'émulation !!! yeahh

2. Le lundi, 22 août 2011, 09:04 par Toons

Cool tu t'améliore ;)

Prochaine étape je te file mes prog a faire :p

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet