Bonjour tout le monde!
J'avais besoin d'un projet tangible pour me motiver à continuer la rédaction des tutos sur le MSP430.
Comme j'ai tout un tas de documentation sur le protocole des manettes NES & SNES, un panel de borne à recâbler, un contrôleur arcade à créer pour ma SNES et de l'exploration de MSP430 à faire, je me suis dit que j'allais combiner le tout.
Table des matières •
Comment fonctionnent les joypads NES et SNES? •
Le CMOS 4021 •
Ses 5 fils de connexions •
Son fonctionnement •
Usage dans le cas de la SNES •
Le projet •
Panel Board •
Main BoardComment fonctionnent les joypads NES et SNES?J'aime beaucoup le système que Nintendo a utilisé pour la communication entre les joypad NES, SNES et la console.
Ce système simple, efficace, peu cher à implémenter et facile à faire évoluer repose entièrement sur un composant, le CMOS 4021.
Le CMOS 4021Pour comprendre le fonctionnement de ce composant, on va d'abord regarder quelle sont les connections entre le joypad et la console.
Ses 5 fils de connexions5 fils sont nécessaires pour piloter un 4021, les voici:
• Vdd - alimentation électrique.
• Masse - alimentation électrique.
• DATA - la sortie série.
• P/S ou LATCH - le signal qui va déclencher la "traduction" et la transmission.
• CLOCK - nécessaire pour que le 4021 sache quand envoyer le bit suivant.
Son fonctionnementLe signal d'horloge est continuellement envoyé au composant.
Si le signal est haut sur CLOCK et P/S, alors la transmission commence. Le huitième "bloc" transmet l'état de l'entrée P8 jusqu'à ce que le signal d'horloge retombe.
Le bloc est alors inactif, il laisse passer les valeurs du bloc suivant.
Au signal d'horloge suivant, le septième bloc transmet l'état de P7 et ainsi de suite jusqu'à P1.
Usage dans le cas de la SNESLe 4021 permet donc de "sérialiser" 8 entrées parallèles, ça ne suffit pas pour la manette SNES :
• 4 directions
• 4 boutons (ABXY)
• 2 gâchettes
• Start
• Select
=> 12 entrées.
Heureusement, le 4021 possède une entrée série, on peut donc "chainer" deux 4021, ce qui permet de passer de 8 à 16 signaux.
Il faudra simplement connecter la sortie Q8 du second 4021 à l'entre Serial In du premier et faire durer le signal P/S 16 cycles d'horloge au lieu de 8.
Et voici ce qu'on obtient à la sortie de ce montage :
Les 4 derniers bits sont utilisés pour décrire le périphérique connecté à la SNES. Dans notre cas, si on a besoin de plus de boutons, ils sont disponibles.ConclusionsCe système me semble particulièrement élégant et très bien pensé, tout est dans la simplicité.
Comme je le disais, les ingénieurs de chez Nintendo ont bien travaillés, ils ont utilisés un composant très courant et peu cher de manière intelligente.
(La solution des ingénieurs Sega me parait beaucoup moins élégante.)
Bien entendu, il doit certainement exister des puces plus récentes nécessitant moins de connections (1-Wire et autres joyeusetés) que je pourrais utiliser pour réduire les fils entre le panel et le JAMMA. Mais ça va à l'encontre d'un de mes buts : pouvoir faire un contrôleur arcade pour ma SNES.
Le projet Donc, on sait comment fonctionne la manette SNES, on peut donc fabriquer son circuit pour une manette.
Mais il n'y a pas de MSP430 et ça ne sert à rien dans une borne…
L'idée, c'est de faire un second PCB qui servira d'interface entre le JAMMA et le panel, dont le cerveau sera un MSP430.
Panel BoardA l'heure actuelle, je n'ai pas encore le matos (breadboard, puces, leds, …), mais ça ne m'a pas empêché de commencer à plancher sur les PCB qui seront nécessaires.
Pour le PCB qui se fixera sous le panel, c'était facile, j'ai pioché sur le net ce schéma reprenant le circuit d'une manette :
Quelque jours de combat entre Eagle et moi (ENOOOORME merci à Iro pour avoir supporté mes MP
) ont donné ce résultat:
Plus un ptit coup de toshop pour le logo de ce que je voudrais appeler mon site web. Le logo gamoo sera aussi ajouté par la suite ^^Voici le typon, il est fourni sans aucune garantie! Si vous l'utilisez, c'est à vos risques et périls. Les dimensions du PCB sont de 50*37,5mm, l'image est en 600dpi.
J'attends les fonds pour faire un proto sur breadboard. Et si le test est convaincant, faudra que je trouve un bonne âme équipée de ce qu'il faut pour produire des PCB
Le fonctionnement intrinsèque du circuit a été expliqué plus haut, je vais donc me contenter d'expliquer 2-3 détails au sujet de ce PCB.
Avant toutes choses, j'ai souhaité éviter d'utiliser des composants montés en surface. Mon but était de permettre à tout le monde réaliser cette carte, il fallait donc que les composants soient faciles à souder.
Comme on peut le remarquer, malgré tous mes efforts, je n'ai pas réussit à router toutes les pistes sur une seule face, il faudra donc utiliser des petits bout de fil ici représentés en rouge.
PULLUP1 et PULLUP2 sont des réseaux de 8 résistances avec une broche commune (pour un total de 9 broches), j'ai préféré utiliser un réseau, c'est bien plus compact sur le PCB que 16 résistances distinctes. La raison de la présence de ces résistances est qu'on travaille avec du CMOS et que tous les input ne seront pas forcément utilisés. Il fallait donc équiper toutes ces entrées de résistances pull up, qui vont maintenir l'entrée à un niveau logique haut (1). Dans ce cas, le bouton poussoir est connecté à la masse, quand on l'actionnera, il fera passer l'entrée à un niveau bas (0).
La LED bicolore sert à la fois de témoin d'alimentation et de témoin d'activité de transmission de données. Elle est totalement facultative, mais c'est toujours utile d'avoir une preuve visuelle. Merci à Iro qui m'a conseillé de mettre un témoin d'alim, j'ai un peu élargi le concept par la suite
Le connecteur 5 broche (qui semble énorme) est un Molex avec détrompeur. Il me semblait essentiel de "sécuriser" cette connexion, c'est pour cette raison que j'ai choisi ce connecteur.
Le connecteur type "pin header" des 17 broches (16 input + masse) m'a semblé la solution la plus facile à implémenter. Etant donné qu'il n'y a pas de risque à le connecter à l'envers, je n'ai pas jugé nécessaire de prévoir de détrompeur physique. Un simple point de couleur sur le connecteur femelle pour repérer la broche 1
ou la masse suffira. (la masse se trouve, depuis la version 0.4, sur la broche centrale)
Main BoardPetit souci, dans une borne le panel fonctionne en 5V, hors les MSP430 acceptent maximum 3,3V.
Pas d'inquiétude! On va se faire un petit circuit d'alim pour abaisser un voltage déjà dispo dans la borne (5V ou 12V) à 3,3V.
Pour ça, il me semble qu'un LM3940 ou similaire, avec ses condos, ça serait parfait.
Oui, mais les sorties du MSP430 vers le JAMMA seront aussi 3,3V, du coup… c'est là qu'interviennent les sn74lvc4245a.
Le sn74lvc4245a est un bus de 8 bits prenant 3,3V d'un côté et 5V de l'autre, nickel!
Du point de vue du MSP430, on a besoin d'un grand nombre d'I/O, potentiellement 16 pour les sorties et 3 pour le panel.
Donc, le format DIP, avec ses 20 broches, sera un peu short niveau des I/O…
Il va falloir employer le format TSSOP qui met à disposition 28 broches, mais moins facile à souder, puisque c'est du CMS.
EDIT : mise à jour du typon, version 0.4 maintenant au format paysage plutôt que portrait.