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

Description 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:
RefDescription
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

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':



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:
DB15Nom NeoGeoNom USB_Game12Commentaire(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.