raphnet.net banner
This page is also available in English
Adaptateur manette (et souris) SNES/NES à USB
Contenu: L'idée | Nouvelles | Résumé de la solution | Shéma | Programmation du microcontrôleur | Code source | Circuit imprimé pour la version 'montage en surface' | Assemblage de la version 'montage en surface' | Images et saisies d'écran | Photos provenant des utilisateurs | Avertissement
L'idée [cacher]
Lorsqu'on joue à des jeux NES et SNES avec un émulateur, l'idéal est bien sur d'utiliser les manettes (et souris) d'origine.

Adaptateur SNES

Adaptateur SNES

Pendant plusieurs annés, plusieurs personnes dont moi l'ont fait en contruisant un adaptateur pour port parallèle. Malheureusement, les ports parallèles sont de plus en plus rare car de nos jours, ce genre de Périphérique utiliserait USB. C'est donc pour cette raison que j'ai décidé de contruire un convertiseur manette NES/SNES à USB. Cependant, à cause de la nature d'USB, l'adaptateur est un peu plus complexe.

Note: Il existe maintenant une version supportant jusqu'à quatres manettes de NES et/ou SNES.

goto top Retour en haut


Nouvelles [cacher]
  • 3 Décembre 2006:
    Nouveau logiciel version 1.4:
    • Correction d'un problème en mode NES qui empêchait Windows de détecter le circuit. Voila ce qui arrive quand on teste seulement sous Linux. Leçon apprise...
    • Ajout du support pour les manette de style Atari. Plus de détails sur une autre page.
  • 29 Octobre 2006:
    • Version 1.3 du logiciel: Correction d'un problème survenant lorsqu'il n'y avait pas de manette branchée au circuit, meilleur support des manettes NES et support du circuit imprimé révision C.
    • Révision C du circuit imprimé maintenant disponible. Il y a maintenant un endroit pour souder les diodes et le circuit est un peu plus petit.
  • 2 Octobre 2006: Version 1.2 du logiciel. La souris SNES est maintenant supportée et detectée automatiquement. Il est possible de choisir entre les 3 niveaux de sensibilité de la souris en gardant l'un ou l'autre ou les deux boutons enfoncés lorsqu'on branche le cable USB.
  • 12 Juillet 2006: Création d'une section destinée à reçevoir des photos des montages des autres utilisateurs. Aucune photo pour l'instant...
  • 11 Juillet 2006: Ajout de quelques saisies d'écran et nouvelle version du logiciel (1.1), lequel fonctionne mieux sous Windows et MacOS X.

goto top Retour en haut


Résumé de la solution [cacher]
J'ai construit mon adaptateur en utilisant le microcontrôleur ATmega8 d'Atmel. Ce microcontrôleur ne supporte pas USB nativement alors j'ai utilisé le pilote USB logiciel-seulement codé par Objective Development. Ce pilote permet a un microcontrôleur AVR tel que l'ATmega8 de communiquer en USB avec un minimum de composantes externes. Grace à cela, l'adaptateur peut être construit facilement, sans se ruiner.

Selon vos habiletés, vous pouvez construire l'adaptateur sur un 'breadboard' (En français c'est quoi?) en utilisant des composantes standards ou la version 'montage en surface' en utilisant le dessin de circuit-imprimé fourni. Je peux aussi vous vendre des circuits-imprimés seuls pré-asemblés et des microcontroleurs (boitier DIP seulement) pré-programmés. Au besoin, visitez mon magasin en ligne (anglais seulement pour l'instant).

Pas besoin de pilotes!
Le standard USB définit certaines classes de périphériques. Dans ce project, j'utilise la classe HID (Humain input device) qui permet de communiquer à l'ordinateur de façon générique que le périphérique connecté est un controleur de jeu possédant 2 axes et 4 ou 8 boutons. Ceci permet au circuit de fonctionner sous plusieurs systèmes d'exploitation automatiquement, en autant que le système en question supporte USB et la classe HID. (J'ai essayé et ça fonctionne sous Win98, Win2K, WinXP et Linux)

goto top Retour en haut


Shéma [cacher]
Voici le shéma:

Une version pdf est aussi disponible (plus beau à voir et s'imprime mieux):
sch-revD.pdf

Liste de pièces:
  • U2: Un microcontroleur ATmega8. ATMEGA8-16PC, ATMEGA8-16PI, ATMEGA8-16PJ ou ATMEGA8-16PU. Ne pas utiliser un ATMEGA8L-*, car l'horloge de 12Mhz dépasserait la limite.
  • R1: Résistance de 1.5k. Ordinaire au carbone 1/4 watt.
  • R2, R3: Résistance de 68 ohms. Ordinaire au carbone 1/4 watt.
  • D1: Ne pas installer, ne sert plus.
  • R4: Ne pas installer, ne sert plus.
  • D2, D3: 3.6 volts zener diodes.
  • Y1: Crystal 12 Mhz.
  • C2, C3: Condensateurs de 27 pf. Si votre crystal recommande une autre valeur, utilisez la.
  • C1: Condensateur de 10 uf. Installer près du ATmega8.
  • JP1, JP2: Cavaliers. Vous pouvez aussi utiliser des interrupteurs DIP, des interrupteurs ordinaires ou des ponts de soudure.
  • J2: Connecteur 2x3 (6 broches), espacement 2.54mm. Pour la programmation du ATmega8.

Pour la connection USB, simplement dénuder un cable USB et souder les fils directement sur le circuit. USB utilise des couleurs de fils standardisés:
Couleur Description
  Rouge +5 volts
  Noir 0 volts (GND)
  Vert D+
  Blanc D-


Versions précédentes:
schematic-revA.png
schematic-revA.pdf
sch-revB.png
sch-revB.pdf

goto top Retour en haut


Programmation du microcontrôleur [cacher]
Les microcontroleurs sont des composantes qui doivent être programmés pour qu'elles fassent quelque chose d'utile. Voici donc le fichier .hex qu'il faut programmer dans le microcontroleur:
FichierCommentaires
nes_snes_db9_usb-1.7.hex
  • Amélioration de l'auto-détection des manettes Genesis à 6 boutons
  • Le bouton 'MODE' des manettes Genesis à 6 boutons est maintenant utilisable.
  • Support du multi-tap Sega (testé avec le modèle MK-1654 seulement!)(informations techniques)
  • Support des manettes TGFX
nes_snes_db9_usb-1.6.hex
  • L'ordre des boutons pour les manettes Atari et SMS a été révisé car les boutons 2 et 3 était utilisés. Ceci ne fonctionnait pas bien avec certains émulateurs supportant le bouton 1 seulement.
  • Il est maintenant possible de forcer l'adaptateur à utiliser le mode Genesis 6 boutons en gardant le bouton 'start' enfoncé lors du branchement de l'adaptateur au port USB. Au cas où l'auto-détection ne fonctionne pas...
nes_snes_db9_usb-1.5.hex
  • Les manettes Genesis 3 et 6 boutons sont maintenant supportés
  • Tout les manettes ayant un connecteur DB9 (Genesis 3/6 boutons, SMS, Atari 1/2 boutons et compatibles) sont reconnues automatiquement.
  • Le câblage du connecteur DB9 a changé pour être plus facile à effectuer sur le circuit imprimé multiuse.
  • Les manettes NES sont maintenant détectées en mode SNES. Fiable avec les manettes de marque Nintendo. Si des clones ne sont pas détectés, utilisez le mode NES.
  • Le projet est maintenant sous License GPL 2
snes_nes_atari_usb-1.4.hex
  • Les manettes de style Atari sont maintenant supportés (Atari, Commodore, etc.). Les variations à deux boutons le sont aussi. (Par exemple, Sega Master System).
  • Ajout de 'padding' au 'report descriptor' en mode NES. Ceci permet au mode NES de fonctionner correctement sous Windows. (Ce n'était pas nécéssaire avec Linux...)
snes_nes_usb-1.3.hex
  • Correction d'une erreur de code qui causait des événements de boutons aléatoires lorsqu'il n'y avait pas de manette connectée au circuit.
  • Le mode NES a maintenant son propre numéro de produit USB
  • La pin PD1 est maintenant laissée en entrée (sans pull-up) car elle est soudée avec PD0 sur la révision C du circuit imprimé. (Je préfère faire cela au lieu de jeter un lot de 50 circuits à la poubelle ou faire des corrections en coupant une trace et en soudant un fil...)
snes_nes_usb-1.2.hex La souris SNES est maintenant supportée.
snes_nes_usb-1.1.hex Ajustement du 'report descriptor' pour un meilleur fonctionnement sous Windows et MacOS X.
snes_nes_usb-1.0.hex Version initiale. Support des manette NES et SNES.

Plusieurs micro-contrôleurs possèdent ce qu'on appelle 'Fuse bytes'. Dans le cas du ATmega8, il y en a deux: Le 'high byte' et le 'low byte'. Ces deux octets servent à configurer certains paramètres du microcontroleur. Quel type d'horloge? Crystal? Résonateur? Oscillateur RC interne? Permettre la programmation par ISP? Il est très important de configurer les fuse bytes avec les bonnes valeurs. L'utilisation de mauvaises valeurs peut rendre le microcontroleur inutilisable.

Pour ce projet, voici les bonnes valeurs:
high byte = 0xc9, low byte = 0x9f

Pour de l'information sur la programmation d'un AVR, visitez ma page sur la programmation d'AVR

goto top Retour en haut


Code source [cacher]
Pour ceux qui aimeraient modifier le comportement de l'adaptateur ou supporter d'autres types de manettes, voici le code source. Depuis la version 1.5, le code est publié sous la license GPLv2. Les version antérieures était sous la license d'Objective Development, qui est en fait GPL avec quelques extensions pour couvrir le matériel (le circuit). Voir le fichier License.txt pour plus d'information.
FichierCommentaires
nes_snes_db9_usb-1.7.tar.gz
  • Amélioration de l'auto-détection des manettes Genesis à 6 boutons
  • Le bouton 'MODE' des manettes Genesis à 6 boutons est maintenant utilisable.
  • Support du multi-tap Sega (testé avec le modèle MK-1654 seulement!)(informations techniques)
  • Support des manettes TGFX
nes_snes_db9_usb-1.6.tar.gz
  • L'ordre des boutons pour les manettes Atari et SMS a été révisé car les boutons 2 et 3 était utilisés. Ceci ne fonctionnait pas bien avec certains émulateurs supportant le bouton 1 seulement.
  • Il est maintenant possible de forcer l'adaptateur à utiliser le mode Genesis 6 boutons en gardant le bouton 'start' enfoncé lors du branchement de l'adaptateur au port USB. Au cas où l'auto-détection ne fonctionne pas...
nes_snes_db9_usb-1.5.tar.gz
  • Les manettes Genesis 3 et 6 boutons sont maintenant supportées
  • Tout les manettes ayant un connecteur DB9 (Genesis 3/6 boutons, SMS, Atari 1/2 boutons et compatibles) sont reconnues automatiquement.
  • Le câblage du connecteur DB9 a changé pour être plus facile à effectuer sur le circuit imprimé multiuse.
  • Les manettes NES sont maintenant détectées en mode SNES. Fiable avec les manettes de marque Nintendo. Si des clones ne sont pas détectés, utilisez le mode NES.
  • Le projet est maintenant sous License GPL 2
nes_snes_usb-1.4.tar.gz
  • Les manettes de style Atari sont maintenant supportés (Atari, Commodore, etc). Les variations à deux boutons le sont aussi. (eg: Sega Master System).
  • Ajout de 'padding' au 'report descriptor' en mode NES. Ceci permet au mode NES de fonctionner correctement sous Windows. (Ce n'était pas nécéssaire avec Linux...)
nes_snes_usb-1.3.tar.gz
  • Correction d'une erreur de code qui causait des événements de boutons aléatoires lorsqu'il n'y avait pas de manette connectée au circuit.
  • Le mode NES a maintenant son propre numéro de produit USB
  • La pin PD1 est maintenant laissée en entrée (sans pull-up) car elle est soudée avec PD0 sur la révision C du circuit imprimé. (Je préfère faire cela au lieu de jeter un lot de 50 circuits à la poubelle ou faire des corrections en coupant une trace et en soudant un fil...)
nes_snes_usb-1.2.tar.gz La souris SNES est maintenant supportée.
nes_snes_usb-1.1.tar.gz Ajustement du 'report descriptor' pour un meilleur fonctionnement sous Windows et MacOS X.
nes_snes_usb-1.0.tar.gz Version initiale. Support des manette NES et SNES.

Contactez moi à l'addresse raph@raphnet.net si vous faites des modifications intéressantes.

Modifications apportés au pilote USB d'Objective Development:
Le cavalier de sélection de mode SNES/NES affecte le contenu du 'report descriptor'. Pour que ça soit possible, j'ai modifié le pilote USB d'Objective Development. Voici un 'diff' généré à partir du pilote USB contenu dans HIDKeys.2006-03-14:
usbdrv-diff

Combinaison Vendor ID/Product ID USB:
Veuillez ne pas réutiliser ma combinaison VID/PID pour des projets dérivés ou autres. Obtenez-en un vous-même. J'ai acheté les miens chez mecanique, et ça coute beaucoup moins cher que de devenir membre du forum des implémenteurs USB (2000$ US)...

goto top Retour en haut


Circuit imprimé pour la version 'montage en surface' [cacher]
revC pcb La version montage en surface comporte plusieurs avantages:
  • Très petite. (environ 1"1/4 x 3/4" ou 32mm x 20mm).
  • Rentre dans un tuyau de PVC de 3/4". Parfait pour mettre en-ligne avec un connecteur USB.
  • Peut être installé directement à l'intérieur d'une manette ou joystick.
  • Moins de fils à souder que sur un 'breadboard'. En quelque sorte, c'est plus facile à assembler.
  • Apparance plus professionelle.
  • Vous pouvez utiliser le circuit à d'autres fins. (Après tout, vous avez un microcontroleur reprogrammable avec USB et quelques signaux d'entrée/sortie...)
D'un autre coté, souder des composantes en montage en surface peut être plus difficile si vous n'avez pas un équipement approprié ou si vous êtes débutant.

Voici une vue composée de la révision C du circuit-imprimé:
vue composee rev.C
Voici comme référence la vue composé de la révision B: snes_nes_usb_pcb_revB.png
Voici les fichiers gerber à utiliser pour contruire vos propres circuits imprimés:
Révision C: snesusb_revC.zip
Révision B: snes_nes_usb_PCB-revB.zip

goto top Retour en haut


Assemblage de la version 'montage en surface' (rev. C) [cacher]
Étape 1: Utilisez la vue composée, la liste des composantes et le shéma pour trouver l'endroit ou mettre chaque composantes. Après avoir tout soudé, inspectez le tout soigneusement pour éviter les ponts de soudures et les soudures froides. IMPORTANT: Faire un pont de soudure entre PD1 et PD0 (voir shéma).

cablage SNES Étape 2: Utilisez le shéma de gauche approprié pour savoir ou souder les fils USB, ISP et ceux de la manette. Le cable ISP peut être construit avec un connecteur 2x3 et un morceau de cable plat. Le 'pinout' du shéma suit le standard d'atmel pour l'ISP des AVR via 6 fils.

Étape 3: Si vous voulez utiliser une manette de NES, fermez JP1 en faisant un pont de soudure ou en soudant un petit bout de fil. Si vous utilisez une manette à connecteur DB9 (ex: Atari), fermez JP1 et JP2. Regardez les images à droite pour des exemples.

Étape 4: Branchez le cable ISP et le cable USB. Utilisez un programmeur pour programmer le fichier hex dans l'ATmega8. Ensuite, configurez les 'fuses bytes' (High byte=0xc9, low byte=0x9f) correctement.

Étape 5: Essayez l'adaptateur avec un jeu. Si tout fonctionne bien, enlevez le cable ISP si vous ne prévoyez pas mettre à jour le code. Maintenant pour protéger le circuit, utilisez une petite boite ou mettez le à l'intérieur d'une gaine thermo-rétractable. Je vous recommande aussi de mettre un peu de colle chaude par dessus les soudures des fils, pour empêcher les fils de se briser en cet endroit.

Étape 6: Amusez-vous!

goto top Retour en haut


Assemblage de la version 'montage en surface' (rev. A et rev. B) [afficher]

Images et saisies d'écran [cacher]
Mon premier prototype, construit sur un 'breadboard' avec des grosses composantes standard:


Photos de la version montage en surface:


Saisie d'écran de la manette fonctionnant sous Linux (jstest):


Saisie d'écran de la manette fonctionnant sous Windows XP (Control panel):


Saisie d'écran de la manette fonctionnant sous MacOS X (USB Prober):


Souris SNES sur USB:

goto top Retour en haut


Photos provenant des utilisateurs [cacher]
Faites moi parvenir des photo de vos montages, j'aimerais bien en mettre plus ici.

Tobias Schulte, d'Allemagne, m'a fait parvenir ces photos:


Tjerk Kuperus a construit ce circuit et mon circuit manette d'arcade pour snes sur une seule plaque:


Andreas Kronawetter, d'Autriche, a construit le circuit dans une manette de NES:


JP des Pays bas s'est construit une manette SNES USB:

goto top Retour en haut


Avertissement [cacher]
Je ne saurais être tenu responsable pour les dommages que la mise en oeuvre des instructions présentées sur cette page pourraient causer à votre équipement ou à vous-même. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement. Notez toutefois que les procédures ci-haut ont fonctionnées sans aucun problème pour moi.

goto top Retour en haut


Copyright © 2002-2009, Raphaël Assénat
Les marques de commerce utilisées dans ce site appartiennent à leurs propriétaires respectifs.
Site codé avecSite codé avec vimDernière mise à jour: 02 Juillet 2009