MicroPython: réutiliser un afficheur VFD du lecteur CD CDP-CX350 (partie 2)
Bonjour amis Maker,
Le précédent article sur les tubes VFD (Vaccum Fluorescent Display) c'était le contrôleur VFD M9202 (aussi appelé MSM9202) de mon ancien Sony compact disk player CDP-CX35.
Poursuite du hacking
Après la prise en main de l'afficheur VFD, je veux maintenant prendre le contrôle du restant de la facade... cela concerne les LEDs, les encodeurs rotatifs et les boutons.Sony compact disk player CDP-CX350 |
Interface Clavier
Le connecteur principal était déjà partiellement décodée pour l'afficheur VFD.
CDP-CX350 - détail de la carte principale |
En poursuivant les investigations, j'ai découvert que les LEDs étaient contrôlées par un GPIO expander 16 bits (M66310). Pour leur part les boutons sont raccordés en grappe.
Voici donc le complément d'information concernant le connecteur principal (CON1) et le connecteur vers la carte fille (CON2).
On peut y voir que les broches DataIn, ShiftClk, Reset de l'afficheur VFD sont ici utilisées pour contrôler le GPIO Expander M66310 (plus le signal LatchClk).
Contrôler les LEDs
Pour prendre le contrôle des LEDs, il faut donc envoyer les 16 bits de données vers le M66310 puis activer le signal LatchClk pour mettre à jour les sorties sur le GPIO Expander.
Les données sont envoyés en utilisant les mêmes signaux DataIn, ShiftLck que l'afficheur VFD. Le contrôleur VFD a son ChipSelect désactivé durant la communication avec le M66310.
Comme déjà précisé, une fois les 16 bits de données envoyés vers le M66310, une impulsion est envoyé sur LatchClk pour envoyer les bits sur les sorties.
En suivant les traces, il est alors possible de relier LEDs et GPIOs du MF66310.
Une fois la bibliothèque m66310.py rédigée, le contrôle du GPIO expander est relativement simple.
from machine import Pin from m66310 import M66310 import time _reset = Pin(Pin.board.GP18, Pin.OUT, value=True ) # Reset désactivé _cs = Pin( Pin.board.GP14, Pin.OUT, value=True ) # VFD désactivé _sdata = Pin( Pin.board.GP13, Pin.OUT ) _sck = Pin( Pin.board.GP16, Pin.OUT, value=True ) # M66310 GPIO Expander, Latch on raising edge _latch = Pin( Pin.board.GP20, Pin.OUT, value=True ) # Modifier tous les bits en un fois (sous forme de nombre) leds = M66310( _sdata, _sck, _latch, _reset ) leds.data = data = 0b0000000000011100 # 16 bits. leds.update() time.sleep_ms( 500 ) leds.clear() leds.update() # Modification bit à bit for bit_idx in range( 2, 16 ): print( bit_idx ) leds[bit_idx]=True leds.update() time.sleep_ms(100) leds[bit_idx]=False leds.update() leds.clear() leds.update()
Détecter les boutons pressés
Dès le début de ce projet, je suis assez étonné de trouver deux entrées 5V et deux masses totalement distinctes sur le connecteur principal.
Il m'aura fallu attendre le décodage de la partie bouton pour me rendre compte que les boutons sont raccordés en grappe chacun avec une résistance d'une valeur différente.
En voici un exemple d'une série de boutons branché sur la broche "key1".
Raccordement des boutons en grappe |
Il faut donc ajouter une résistance pour compléter un pont diviseur et ainsi obtenir une tension (qui dépend du bouton pressé).
Cela explique aussi la raison pour laquelle il existe deux masses et deux sources 5V. Un circuit est destiné à la lecture analogique et un autre circuit est destiné au circuits logiques et contrôleurs.
Le circuit analogique ne peut pas être perturbé par des parasites, variation de tension ou courant qu'il est plus facile de rencontrer sur le circuit logique (surtout à cause du contrôleur VFD).
La quantité de boutons sur le panneau fait qu'ils sont regroupés sur différentes grappes indépendantes. C'est ainsi que la carte présente les sorties Key0, Key1, Key2, Key3, Key4. Les encodeurs étant également des boutons un peu spéciaux, ceux-cis sont également repris sur les grappes.
J'ai documenté toutes les grappes dans le dépôt micropython-M9202-VFD.
Ensuite
- Je dois toujours réaliser un étage d'alimentation pour rendre un projet VFD autonome (j'avance sur ce point).
Cela me facilitera aussi la vie lors du test d'autres VDF. - La réalisation d'une carte personnalité permettra d'interagir facilement avec les éléments de ce panneau.
Ressources
- Github micropython-M9202-VFD
- Premier article sur les VFD : comment fonctionne un afficheur VFD.
Écrire un commentaire