Les contrôleurs SNES sont intéressant pour 2 raisons, ils sont économiques et facile à trouver et deuxièmement ils sont simple à interfacer.
Le connecteur SNES a 7 broches mais n'en utilise que 5.
- Vdd, positif de l'alimention, fonctionne aussi bien à 5volt qu'à 3,3volt
- clock, sert à lire le contrôleur, bit par bit.
- latch, lit l'état des boutons et met le résultat dans le registre à décalage
- data, sortie des bits de lecture.
- pas de connection
- pas de connection
- gnd, 0 volt de l'alimentation.
schématiquement l'électronique du contrôleur ressemble à ceci:
Le contrôleur a 12 boutons et pour faire la lecture de ces boutons on procède comme suit.
- Envoie d'une impulsion sur la ligne LATCH
- Lecture du premier bit (bouton B) sur la ligne DATA
- Répéter 15 fois
- Envoie d'une impulsion sur la ligne CLOCK
- Lecture du bit sur la ligne DATA
snes-paddle.c
C'est très simple comme code. Il n'y a qu'une fonction dans l'interface application:
paddleId identifie le contrôleur dont on veut faire la lecture PADDLE1 ou PADDLE2. read_paddle() utilise les fonctions latch() qui envoie l'impulsion sur la ligne LATCH et la fonction bit_shift() qui envoie l'impulsion sur la ligne CLOCK pour décaler vers la sortie DATA le bit suivant.
unsigned read_paddle(int paddleId)
Les 2 contrôleurs sont lus en même temps puisque les lignes CLOCK et LATCH sont communes aux 2 contrôleurs. La ligne DATA du PADDLE1 est lue sur l'entrée digitale RA0 et la ligne PADDLE2 est lue sur l'entrée digitale RA1. Les variables p1 et p2 contiennent le résultat de la lecture respectivement pour chacun des contrôleurs. La valeur de l'argument paddleId détermine laquelle de p1 ou p2 la fonction retourne. Le masque 0xfff est appliqué pour ne retourner que les 12 premiers bits. La valeur des bits est inversée de sorte qu'un bouton enfoncé a son bit à 1. Les constantes pour sélectionner les différents bits dans l'entier sont définis dans le fichier snes-paddle.h. En fait j'ai emprunté ces définitions au projet hackvision.
Pour plus d'information sur les contrôleurs NES et SNES vous pouvez lire le document NES-controller-Hydra-Ch6All-v1.0.pdf en anglais qui se trouve dans le répertoire docs du dépôt github.
Aucun commentaire:
Publier un commentaire
Remarque : Seuls les membres de ce blogue sont autorisés à publier des commentaires.