Bonjour à tous,
Après avoir montré comment installer un Arduino sous Linux je vais m'en servir un peu. Le but étant de simuler les manettes de différentes consoles. J'ai acheté récemment une manette NES pour sacrifice donc hop au boulot on va commencer par regarder le protocole d'un peu plus près et plus tard le codage sous Arduino (quand j'aurai du temps...)
Je m'attendais à retomber sur ça
http://www.mit.edu/~tarvizo/nes-controller.html avec une modification de la période pour tomber sur du 50Hz mais au final c'est un peu différent. Je n'ai pas l'explication: un protocole légèrement différent pour la zone PAL (France?) ou une info erronée reprise à droite à gauche sur les sites...
Pour les différents fils pas de surprise:
-marron: masse
-blanc: 5V (en vert sur mes captures)
-rouge: latch (en jaune sur mes captures)
-orange: clock (en bleu sur mes captures)
-jaune: data (en rouge sur mes captures)
et une première capture pour vérifier le 50Hz:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813205041-keube-nes1.jpg)
un petit zoom pour voir ce qui se passe toutes les 20ms:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813205220-keube-nes6.jpg)
Ceci n'est pas mentionné sur les quelques sites que j'ai consulté mais à chaque période de 20ms on observe 2 échanges entre la NES et sa manette!
Quelques explications sur le rôle des différents fils:
latch: La NES envoie un petit pulse sur ce fil toutes les 20ms (x2!), la manette stocke les états des boutons et va ensuite les envoyer.
clock: chaque envoi est effectué en synchronisation avec la clock. On remarquera que le signal est inversé par rapport au lien de "référence"
data: c'est ici que sont envoyé les infos
Regardons ces signaux de plus près:
Le latch:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813205928-keube-nes3.jpg)
Le pic dure 3.4µs, à nouveau celà diffère des 12µs attendues.
La clock:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813210049-keube-nes5.jpg)
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813210101-keube-nes4.jpg)
A nouveau rien avec avec la période de 12µs et un ratio de 50% attendus puisqu'on est à 0.5µs haut et 25.9µs à l'état bas... On verra également sur une autre image que la clock ne démarre pas en même temps que le latch mais environ 7µs après que le latch soit activé
Data:
Data est à 0 en dehors des transmissions mais durant le transfert une valeur de 5v correspond à l'état bouton relâché.
Les valeurs de A,B,Select,Start,Haut,Bas,Gauche,Droite sont envoyées successivement.
A activé:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813210719-keube-nesA.jpg)
B activé:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813210737-keube-nesB.jpg)
Select activé:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813210759-keube-nesSelect.jpg)
Start activé:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813210825-keube-nesStart.jpg)
Haut activé:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813210846-keube-nesHaut.jpg)
Bas activé:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813210902-keube-nesBas.jpg)
Gauche activé:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813210918-keube-nesGauche.jpg)
Droite activé:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813210942-keube-nesDroite.jpg)
A l'exception de la première donnée envoyée (A), l'état de chaque donnée est maintenu pendant 25,2µs peu après le pic sur le signal clock.
Pour A l'état est mis à jour dès la réception de latch et est maintenu 8.1 µs:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20110813211235-keube-nesA-2.jpg)
Je rappelle que ces 8 data sont envoyées
2 fois par cycle de 20ms, avec des timings différents de ce que j'ai pu lire sur le net.
Prochaine étape le codage!
EDIT: Ajout de la correspondances fils manette/capture d'écran