MicroPython: réutiliser un afficheur VFD du lecteur CD CDP-CX350 (M avec un Pico sous MicroPython
Bonjours amis Maker,
Je n'arrête décidément plus mes expérimentations avec les tubes VFD (Vaccum Fluorescent Display).
Cette fois, je me suis penché que contrôleur VFD M9202 (aussi appelé MSM9202) qui a sa propre petite histoire.
Introduction
Il y a bien des années, je me suis payé un Sony compact disk player CDP-CX350, un carrousel capable de contenir 300 Compact Discs. J'adorai ce lecteur.
Sony compact disk player CDP-CX350 |
Je parle au passé car ce magnifique appareil n'a pas survécu à ses multiples déménagements. C'est que 300 CD, cela fait son poids et jeunesse aidant j'ai habité divers endroits.
Et c'est avec désolation que j'ai découvert que mon génial lecteur CD avait mécaniquement dépassé tout espoir de réparation.toute lecture... nous étions en 2005!
Le maker était en sommeil
Bien qu'en 2005 je n'y connaissais pas grand chose en programmation microcontrôleur, j'ai procédé à la récupération de la face avant me disant qu'un jour, peut-être, je pourrai le recycler.
Sony compact disk player CDP-CX350 (face avant) |
Sony compact disk player CDP-CX350 (face avant) |
De nos jours
Nous sommes en 2025, j'ai ressorti la face avant du lecteur (photos ci-dessus) en vue d'un recyclage complet de l'afficheur VFD mais aussi les boutons, les LEDs, les encodeurs rotatifs, etc!
La carte principale à l'afficheur VFD est visible ci-dessous
CDP-CX350 Carte principale |
De haut en bas, la carte reprend les éléments suivants:
- Connecteur d'interface : en haut a gauche, destiné à recevoir un ruban. Ce connecteur 23 contacts permet de communiquer avec tous les éléments de la carte principale et carte fille.
- Connecteur carte fille : ce connecteur bleu (toujours en haut) permet de connecter les éléments de la carte fille (encodeurs rotatifs, bouton play/pause/...)
- Récepteur infrarouge : en haut à droite, permet de réceptionner les signaux de la télécommande.
- L'afficheur VFD : superbe comme tous les autres et contenant de nombreux symboles. Ce VFD est piloté par un contrôleur VFD M9202 (OKI).
- LEDs oranges : contrôlée avec un GPIO expander 16 bits M66310FP. Ce GPIO expander est aussi un LED Driver. Les deux contrôleurs M66310FP & M9202 partagent le même bus de communication.
- Boutons : les nombreux boutons présent sur cette carte (comme la carte fille) sont regroupés par lot sur 5 lignes "keys" distinctes. Chacun de ces boutons ayant une résistance pull-down spécifique (dans son groupe), il faut utiliser une entrée analogique pour déterminer quel bouton est pressé dans un groupe donné.
- Emetteur infrarouge : les 5 LEDs "bleues" sont en fait des émetteurs infrarouges accompagnés de leur circuit de puissance (les transistors) et connecteur d'interface (en bas à gauche)
Le contrôleur VFD M9202
CDP-CX350 - détail de la carte principale |
A partir de la fiche technique du M9202, j'ai pu identifier les différentes connexions nécessaires au contrôle de l'afficheur.
C'est en lisant la fiche technique du M9202 (MSM9202) que j'ai remarqué que le protocole est identique à celui utilisé pour le ChipSet PT6302 de Princeton Technology.
CDP-CX350 - Contrôle du VFD |
Si vous ne savez pas comment fonctionne un VFD, je conseille vivement la lecture du tout premier article sur les VFD.
Le connecteur reprend les signaux:
- Clk : signal d'horloge du M9202 utilisé pour la transmission de données.
- DataIn : signal de données du M9202 (communiqués bit-à-bit en commençant par le bit le moins significatif)
- ChipSelect : activation du M9202. Nécessaire lorsque le microcontrôleur doit envoyer des données.
- VFL : tension négative permettant de contrôler les grilles ( -25V est suffisant).
- Heater1 & 2 : filament de chauffe (5 Ω), alimenté en 2.9V (consommation 170mA).
Les signaux identifiés, voici comment brancher le Pico pour contrôler le VFD.
- Un 74AHCT125 est utilisé pour convertir les signaux logiques.
- Le circuit Cut-off bias voltage est réalisé à l'aide de 2 diodes Zener et résistance de 2.2K
il m'a fallu un certain temps pour me rendre compte que j'avais oublié de le monter... raison pour laquelle l'afficheur n'affichait absolument rien.
Le montage réalisé et la bibliothèque installée, il est possible de tester l'un des nombreux scripts d'exemples disponibles dans le dépôt.
Il est maintenant possible de tester les Digits et d'identifier leurs positions.
La disposition des caractères est un peu bizarre mais n'empêche en rien la représentation de texte.
Comme pour les autres VFD, le contrôle individuel des segments permet aussi de contrôler les divers symboles (voir le Digit #16 ci-dessous).
Contrôle des segments 0 à 34 d'un digit. |
L'exemple test_btn_segment.py montre justement comment prendre le contrôle des segments sur le Digit #16.
Pour la première fois, j'utilise aussi l'ADRAM du contrôleur VFD.
ADRAM, 2 bits complémentaires par digits |
l'ADRAM est un espace mémoire de deux bits supplémentaires par Digits (donc 35 segments + 2 bits ADRAM). Ces bits additionnels peuvent être utilisés pour activer/désactiver des symboles (ou points) supplémentaires.
Les bits ADRAM sont souvent utilisés pour activer un point décimal, double-point ou un curseur sur l'afficheur.
Dans le cas présent l'ADRAM est utilisé pour activer un symbole supplémentaire sur l'écran. Ainsi, en fixant l'ADRAM du Digit #8 à 0b01, le libellé "GROUP" est illuminé au dessus du Digit #8.
M9202 : code et exemples
Le dépôt github micropython-M9202-VFD dispose des informations nécessaires à la prise de contrôle de l'afficheur VFD avec le contrôleur OKI M9202.
La bibliothèque utilisée est vfd_pt63.py disponible dans le dépôt micropython-PT6302-VFD.Dépôt GitHub micropython-M9202-VFD |
Le dépôt contient plusieurs exemples utilisés pour tester l'afficheur VFD.
- test_display_all.py : active le mode de test du VFD illuminant toutes les segments.
- test_display_chars.py : les caractères A à Z sur les 16 positions du VFD.
- test_display_str.py : affiche la chaîne de caractères "ABCDEFGHIJKLMNOP" sur l'afficheur à partir de la position 1. Très pratique pour deintifier la position de chaque Digit.
- test_custom_char.py : création et affichage d'un caractère personnalisé.
- test_segments.py : active progressivement les segments 0 à 34 du digit sélectionné.
- test_btn_segment.py : utilise un bouton Up et Down (sur GPIO 0 et 1) pour contrôler le segment allumé entre 0 et 34.
- test_adram.py : modifie les bits ADRAM des digits de 1 à 16. Permet d'identifier les éléments/symboles activés par les combinaisons binaires testées.
- test_adram_raw.py : manipulation brut de l'ADRAM par envoi direct des messages. Uniquement à des fins de démonstration.
- test_btn_adram.py : Utilise un bouton Up et Down (sur GPIO 0 et 1) pour contrôler le Digit (de 1 à 16) dont l'ADRAM est modifié.
- test_raw.py : test brut de l'afficheur VFD en envoyant des messages brutes. Uniquement à des fins de démonstration.
Boutons, encodeurs et LEDs
Le décodage de ces éléments est en cours. Le dépôt contient déjà des informations mais il reste encore un travail non négligeable à réaliser.
Cela fera l'objet d'un autre article.
Ressources
- Github micropython-M9202-VFD
- Premier article sur les VFD : comment fonctionne un afficheur VFD.
N'hésitez pas à partager vos commentaires et suggestions.
Dominique