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.
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
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
Ce projet est aussi disponible sur GitHub! Pour suggérer de nouvelles fonctionnalités, signaler un problème ou contribuer au projet,
vous pouvez m'écrire ou utiliser le dépôt GitHub: https://github.com/raphnet/usb_game12
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':
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.