Circuit pour manette de jeu USB 12 entrées (8 boutons + 4 directions)
ContenuDescription du projet

Pour certains projets, un circuit permettant de relier 12 boutons (dont 4 sont directionels) à
un ordinateur via USB est très pratique. Voici quelques exemples:
- Manette style arcade ou petit cabinet d'arcade fait à la main
- Adaptateurs de manettes simples (1 fil par bouton) à USB. Ex: Neo-Geo, Atari...
- Avec les bons logiciels du côté PC, les entrées boutons peuvent servir à bien
d'autres choses. Ex: interrupteurs, limit-switch, alarmes... Plus propre que de modifier une manette
existante.
Je propose donc ce petit projet qui à l'aide d'un microcontrôleur, permet d'utiliser 12 boutons (4 directions + 8
boutons génériques) sur son PC via le port USB.

Selon vos habiletés, vous pouvez construire le circuit sur un 'breadboard' (En français c'est quoi?)
en utilisant des composants standards ou la version 'montage en surface' en utilisant
les dessins du circuit
multiuse PCB2. Je vends aussi
des circuits-imprimés pré-assemblés et des micro-controleurs (boitier DIP seulement)
pré-programmés. Pour plus d'infomations, visitez mon
magasin en ligne.
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 2 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)
Ce projet utilise 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.
Schémas
Voici le schéma principal:
|
Et un example de câblage de manette:
|
Aussi, un tableau de
câblage pour NeoGeo est disponible plus bas.
Liste de pièces:
Ref | Description |
U2 | Un microcontrôleur 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. |
D2, D3 | 3.6 volts zener diodes. |
Y1 | Crystal 12 Mhz. |
C2, C3 | Condensateurs de 27 pf. Si votre cristal recommande une autre valeur, utilisez la. |
C1 | Condensateur de 1 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. |
J1 | Connecteur USB (optionel si vous soudez les fils directement) |
Pour la connection USB, vous pouvez simplement dénuder un cable USB et souder les fils directement
sur le circuit. USB utilise des couleurs de fils standardisés (sauf parfois certains câbles de basse qualité alors
méfiez vous!):
| Couleur | Description |
---|
| Rouge | +5 volts |
| Noir | 0 volts (GND) |
| Vert | D+ |
| Blanc | D- |
Programmation du microcontrôleur
Les microcontrôleurs sont des pièces qui doivent être programmées. Voici le fichier à programmer:
usb_game12-1.0.hex
Plusieurs microcontrôleurs possèdent ce qu'on appel
'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.
La valeurs par défaut des
fuses ne conviennent pas. 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
Code source
Le code source est disponible sous license GPLv2 et est compilé avec avr-gcc.
Pour éviter des conflits, si vous faites des changements au
report descriptor,
ne distribuez pas le résultat sans avoir remplacé le
USB Vendor+product ID par
le votre.
usb_game12-1.0.tar.gz
Circuit imprimé pour la version 'montage en surface'
La version 'montage en surface' utilise mon circuit
Multiuse PCB2. Voici à quoi il ressemble:
Multiuse PCB2:
|
Schéma de câblage pour 'USB Game12' sur 'Multiuse PCB2':
|
Câblage NeoGeo
Les contrôles de NeoGeo utilisent une prise de type DB15 standard, comme pour les anciens joysticks pour
PC (Ces derniers ne sont pas compatibles avec ce circuit).
Voici une table expliquant comment utiliser un joystick NeoGeo sur ce circuit:
DB15 | Nom NeoGeo | Nom USB_Game12 | Commentaire(s) |
1 | Common | Common | |
3 | Select | Bouton 5 | |
4 | D Button | Bouton 3 | |
5 | B Button | Bouton 1 | |
6 | Right | Right | |
7 | Down | Down | |
8 | +5v | +5v | Pour certaines manettes seulement |
9 | D Button | Bouton 3 | Double de la pin 4 |
11 | Start | Bouton 4 | |
12 | C button | Bouton 2 | |
13 | A button | Bouton 0 | |
14 | Left | Left | |
15 | Up | Up | |
(DB15 pins 2 and 10 are not connected)
Avertissement
Je ne saurais être tenu responsable pour les dommages
que l'utilisation des informations ou la mise en œuvre des instructions présentées
sur cette page pourrait causer à votre équipement,
à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant
à l'exactitude des informations et à leur fonctionnement.