USB_Game16: Contrôleur de joystick

Description du projet

Pour réaliser certains projets, un circuit permettant de relier 16 boutons (dont 4 sont directionels) à un ordinateur via USB est très pratique.

Exemples d'applications:
  • Manette style arcade ou intégration dans une borne d'arcade avec PC.
  • 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: commutateurs, interrupteurs de fin de course, alarmes... Beaucoup plus propre que de modifier une manette existante.

Caractéristiques du projet:
  • Total de 16 entrées
    • 12 Entrées pour boutons
    • 4 Entrées pour directions (joystick ou boutons)
  • Interface USB conforme à la classe HID. Fonctionne sans installer de pilotes supplémentaires avec la plupart des systèmes. (Linux, WinXP, Win7, 32 et 64 bits)
  • Câblage facile avec le circuit "Multiuse PCB3"
    • Connecteur USB Type B standard.
    • Points de soudure perforés pour installation facile des fils.
    • Beaucoup d'espace entre les points de soudure.
    • Conducteur commun (GND) dédié pour chaque bouton. Facilite le câblage.

Ce projet est basé sur le microcontrôleur ATmega8a 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 de communiquer en USB avec un minimum de composantes externes.




Câblage

Diagramme de câblage

Diagramme de câblage

Le câblage n'est pas très compliqué. Pour chaque bouton, deux fils. D'abord le conducteur de l'entrée respective (Direction ou Bouton X) et ensuite le conducteur commun (GND dans ce design).

Le logicile s'attends à ce que le boutons soient de type normalement ouvert (NO). Il faut donc sélectionner ce type ou utiliser les broches correspondantes (souvent marquées "NO" et "COM").

Note: Normalement Ouvert = Conduit lorsqu'appuyé. Le mot 'ouvert' est pour 'circuit ouvert'.


Voici maintenant à quel GPIO corresponds chaque fonction.
Nom AVRFonction Nom AVRFonction
PORTD 4HautPORTC 5Bas
PORTC 4GauchePORTD 3Droite
PORTC 3Bouton 12 PORTC 2Bouton 11
PORTB 5Bouton 10 PORTC 1Bouton 9
PORTD 5Bouton 8 PORTB 4Bouton 7
PORTB 3Bouton 6 PORTB 2Bouton 5
PORTB 1Bouton 4 PORTB 0Bouton 3
PORTD 7Bouton 2 PORTD 6Bouton 1



Programmation du microcontrôleur

Les microcontrôleurs sont des pièces qui doivent être programmées. Voici le fichier à programmer:
usb_game16-1.0.hex
Le microcontrôleur doit être configuré pour utiliser un cristal haute fréquence. La valeur 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_game16-1.0.tar.gz


Exemple 1: Câblage NeoGeo

Les contrôles de NeoGeo utilisent une prise de type DB15 standard et sont d'une conception très simple qui utilise un fil par bouton en plus d'un conducteur commun. Il est donc facile de réaliser un adaptateur en utilisant ce circuit.

Voici une table expliquant comment utiliser un joystick NeoGeo sur ce circuit:
DB15Nom NeoGeoNom USB_Game12Commentaire(s)
1 Common Gnd (n'importe lequel)
3 Select Bouton 6
4 D Button Bouton 4
5 B Button Bouton 2
6 Right Right
7 Down Down
8 +5v VCC Pour certaines manettes seulement
9 D Button Bouton 4 Double de la pin 4
11 Start Bouton 5
12 C button Bouton 3
13 A button Bouton 1
14 Left Left
15 Up Up
(Les broches 2 et 10 du DB15 ne sont pas utilisées)


Exemple 2: Manette arcade

Voici un exemple de manette d'arcade à 4 boutons. Comme je n'avais que des boutons (pas de joystick), j'ai décidé d'expérimenter en installant quatres boutons en croix pour les directions. C'était difficile à utiliser au début et je me suis même dit que j'avais fait une erreur. Mais après quelques minutes de jeu, je me suis rendu compte que je m'étais habitué et que ce n'était pas si mal... exemple

Comme nous pouvons le voir ici, j'ai soudé les fils directement sur les microswitch. Cela n'est pas idéal pour la maintenance, mais bon.

exemple exemple

Je compte revoir le positionnement et le nombre de boutons. Aussi, je compte faire (ou faire faire) une finission beaucoup plus artistique. À suivre..


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.