Auteur Sujet: Simuler une manette NES avec un Arduino  (Lu 3556 fois)

Hors ligne keube

  • Passionné
  • *
  • Messages: 160
    • Voir le profil
Simuler une manette NES avec un Arduino
« le: Samedi 13 Août 2011, 21:16:37 pm »
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:


un petit zoom pour voir ce qui se passe toutes les 20ms:

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:

Le pic dure 3.4µs, à nouveau celà diffère des 12µs attendues.

La clock:


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

B activé:

Select activé:

Start activé:

Haut activé:

Bas activé:

Gauche activé:

Droite activé:


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:


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










« Modifié: Dimanche 14 Août 2011, 09:03:00 am par keube »

Hors ligne keube

  • Passionné
  • *
  • Messages: 160
    • Voir le profil
Simuler une manette NES avec un Arduino
« Réponse #1 le: Samedi 13 Août 2011, 21:17:06 pm »
réservé pour le code  8)

Hors ligne KodeIn

  • Grand Pilier
  • *
  • Messages: 929
  • Adepte du Level 1… quand il passe le level tuto…
    • Voir le profil
Simuler une manette NES avec un Arduino
« Réponse #2 le: Samedi 13 Août 2011, 22:56:32 pm »
Pour tes analyse logiques, tu utilises un scanalogic?

Il semblerait effectivement que les consoles PAL aient des protocoles différents des consoles JAP.
Et n'étant pas en possession des consoles Japonaises, impossible de vérifier comment ils sont conçus.
Atari 2600 | Spectravideo SV-328 :'( | Amiga 500 | NES - SNES - N64 - NGC - Wii - GBA - GBAsp - DSi | PS1 - PS2 - PS3 - PSP 2000 | MD - DC | XBox - 360 | MacBook | OpenPandora GHZ edition \o/
WIP [pause] : Borne Euro générique de chez Jeux COURTET
Tutos LaunchPad MSP430 001 - 002 - 003 - 004 en attente

Hors ligne Little_Rabbit

  • Arcade Myth
  • *
  • Messages: 4660
  • The early 80's : the arcade golden age !!
    • Voir le profil
Simuler une manette NES avec un Arduino
« Réponse #3 le: Samedi 13 Août 2011, 23:00:09 pm »
Salut,

Pour la clarté de ton exposé, ce serait cool que tu indiques le signal associé à chaque canal de l'analyseur logique (CH1, CH2, CH3 et CH4).

Avec quel matériel as-tu réalisé ces captures ?

Merci.

A+
Recherche dédiées ou PCB originaux: Miss Pacman, Dig Dug, Galaga, Mappy, Asteroids, Battlezone, Missile Command, Tempest, Star Wars, Donkey Kong (+ Jr), Mario Bros, Moon Patrol, Defender, Joust, Frogger, Gyruss, Pooyan, Space Tactics, Zaxxon, etc. Flip : Xenon, Baby Pac Man, Gottlieb des années 80 (Spirit, Amazon Hunt, ...). Divers :  Ice Cold Beer
Trois fois rien quoi ! :D

Hors ligne High_Cobra

  • Webmaster
  • Dieu de l' Arcade
  • *****
  • Messages: 11933
  • Je suis juste un multi-nick d'AsPiC...
    • Voir le profil
Simuler une manette NES avec un Arduino
« Réponse #4 le: Samedi 13 Août 2011, 23:02:15 pm »
Si tu regardes les sources de l'UPCB, t'as toutes les explications/code qui vont bien pour un bon paquet de consoles (après, c'est écrit pour des PIC mais le principe est le même...)

Hors ligne keube

  • Passionné
  • *
  • Messages: 160
    • Voir le profil
Simuler une manette NES avec un Arduino
« Réponse #5 le: Dimanche 14 Août 2011, 09:01:13 am »
Oui j'utilise scanalogic c'est bien pratique pour des signaux de ce type.
Pour le code j'ai les sources de l'UPCB ça me fera gagner un peu de temps