Vue normale

Aujourd’hui — 7 janvier 2025Raspberry-pi

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

N'hésitez pas à partager vos commentaires et suggestions.

Dominique

Biais d’attribution : comment il influence nos jugements et nos relations

Par :Régis
7 janvier 2025 à 07:30

Dans notre vie quotidienne, nous faisons souvent des jugements sur les comportements des autres et sur les nôtres. L’un des biais cognitifs les plus répandus qui influence ces jugements est le biais d’attribution. Ce biais nous pousse à attribuer les échecs des autres à leurs caractéristiques personnelles tout en expliquant nos propres échecs par des facteurs […]

L’article Biais d’attribution : comment il influence nos jugements et nos relations est apparu en premier sur Windtopik.

À partir d’avant-hierRaspberry-pi

MicroPython: réutiliser un afficheur VFD Proximus TV avec un Pico sous MicroPython

Bonjour Amis Maker Belge,

Cet article intéresse certainement tous les Makers mais les Belges se sentiront privilégié ;-)
Après le contrôleur VFD M660004 dans le précédent article, cette fois, c'est le contrôleur VFD PT6302 qui est à l'honneur.


Introduction

Mon tout premier afficheur VFD (Vaccum FLuorescent Display) fût récupéré sur un décodeur Belgacom TV (aujourd'hui Proximus TV) de 4ieme génération.

En 2022, je démontais le décodeur pour le transformer en alimentation d'établi. A cette occasion, je mettais l'afficheur de côté en espérant pourvoir le hacker.

Fort de ma toute récente expérience avec le VFD de Sony, j'ai embrayé sur celui de Belgacom/Proximus TV que l'on peu admirer dans toute sa gloire ci-dessous!

Source: le dépôt micropython-PT6302-VFD

Fonctionnement d'un VFD

Si vous ne savez pas encore comment cela fonctionne, je vous invite à lire la section "Fonctionnement des Vaccum Fluorescent Display" dans mon précédent article.

Préparer la carte Belgacom

A l'évidence, la carte est équipée des éléments nécessaires pour générer la tension négative pour les grilles ainsi que l'alimentation du filament.
Diandre! Je ne suis jamais arrivé à la faire fonctionner!

J'ai donc sorti mon fer à souder et j'ai éliminé tous les composants entre les boutons poussoirs et le bord opposé de la carte!  J'ai bien entendu préservé le contrôleur et les composants directement attachés.

Eliminer/déssouder les composants non essentiels!
Source: le dépôt micropython-PT6302-VFD

De la sorte, je me mets à l'abri de comportements électroniques indésirables lorsque je prendrais le contrôle du contrôleur VFD.

A partir de la fiche technique du contrôleur PT6302 (disponible dans le dépôt), j'ai repéré les signaux utiles et les broches correspondants.

Cliquer pour agrandir
Source: le dépôt micropython-PT6302-VFD
  • VDD: Tension logique (5V).
  • VEE: Tension négative utilisé pour fixer le potentiel du filament de chauffe (-25 à -35 volts)
  • VSS: masse commune.
  • RSTB: Reset du contrôleur
  • CSB: Chip Select. Placez le au niveau bas pour communiquer avec le composant.
  • CLKB: signal d'horloge. L'acquisition du bit de données se fait sur le flan montant du signal d'horloge.
  • DIN: Data Input=entrée de donnée. Les données sont envoyée bit à bit (LSBF = bit le moins significatif en premier).

Brancher sur un Pico

Avant d'envisager le branchement sur un Pico, il faut:

  1. Recréer le circuit de polarisation du filament de tungstène. C'est qu'en enlevant tous les composants... j'ai aussi enlevé ces éléments.
  2. Récupérer les signaux  VDD, VEE, VSS, RSTB, CLKB, DIN du contrôleur (sans oublier ceux du filament de chauffe).

Polarisation du filament

Par expérimentation, une tension de 2.9V est suffisant (le courant de chauffe atteint 150mA). Deux résistance de 500 Ohms sont utilisés (appris avec le VFD de Sony)

Par expérience, encore, une tension VEE (ou VP) de -25V est suffisante pour un fonctionnement correct.
Une tension de -35V est également convenable mais fait un peu trop chauffer la résistance de 2.2K (1/4W). Avec VEE de -25V, la tension bias est alors de -19V, un différence de 6V qui s'est révélée suffisante à l'usage.

Récupération des signaux

Vient ensuite la localisation de tous les signaux VDD, VEE, VSS, RSTB, CLKB, DIN sur le contrôleur (où différents endroits de la carte).




Brancher sur Raspberry-Pi Pico

Ayant décidé de garder une tension logique de 5V pour le contrôleur VFD, il faut donc utiliser un LevelShifter (un 74AHCT125) pour adapter les tensions.

Source: le dépôt micropython-PT6302-VFD

Bibliothèque MicroPython

Il fallait s'en douter... ce projet devait inévitablement déraper vers MicroPython.

Le dépôt GitHub micropython-PT6302-VFD contient la bibliothèque composée de deux fichiers:

  • vfd_pt63.py : contrôle des fonctions essentielles du contrôleur VFD.
  • vfd_proximus.py : fonctions avancées facilitant la prise en main de l'afficheur utilisé sur Proximus TV / Belgacom TV.

Scripts d'exemple

le dépôt reprend de nombreux exemples mais c'est principalement ceux relatifs à ProximusTV qui sont les plus intéressants.

Ce premier exemple indique comment afficher du texte et allumer/éteindre les symboles de l'écran.

from vfd_proximus import *
from machine import Pin
import time

d = VFD_Proximus( sck_pin=Pin.board.GP16, sdata_pin=Pin.board.GP13, cs_pin=Pin.board.GP14, reset_pin=Pin.board.GP18 )
d.print("VFD Proximus") 

# affiche toutes les options une par une
#   TITLE, CHANNEL, TRACK, STEREO, RECORD, CLOCK, ANTENNA, AM, FM
for option in ALL_OPTIONS:
	d.options += option
	time.sleep_ms( 500 )

for option in ALL_OPTIONS:
	d.options -= option
	time.sleep_ms( 500 )

d.clrscr()
d.print("Done !")

Alors, l'afficheur de Belgacom TV / Proximus TV dispose de trois sections d'affichage sur le dessus de l'écran. C'est trois sections sont accessibles par l'intermédiaire des propriétés left , center , right .

Source: le dépôt micropython-PT6302-VFD

Il existe pas mal de moyen d'y afficher des informations, y compris des entiers et nombre décimaux comme l'indique l'exemple ci-dessous.

from vfd_proximus import *
from machine import Pin
import time

d = VFD_Proximus( sck_pin=Pin.board.GP16, sdata_pin=Pin.board.GP13, cs_pin=Pin.board.GP14, reset_pin=Pin.board.GP18 )
d.print("Show float")

VALUES =  [1.25,15.2,32,133.78,73.1,5.2]

for value in VALUES:
	d.center.float( value )
	d.update()
	time.sleep(1)
d.center.clear()
d.update()

for value in VALUES:
	d.left.float( value )
	d.update()
	time.sleep(1)
d.left.clear()
d.update()

d.clrscr()
d.print('Done!')

Ce second exemple se concentre sur le disque dans la section de droite. Le script fait d'abord clignoter le disque... puis fait tourner un secteur sur le disque.

from vfd_proximus import *
from machine import Pin
import time

d = VFD_Proximus( sck_pin=Pin.board.GP16, sdata_pin=Pin.board.GP13, cs_pin=Pin.board.GP14, reset_pin=Pin.board.GP18 )
d.print("Show DISC")

# Allumer éteindre le disque
for i in range( 10 ):
  d.right.disc( i%2 )
  d.right.update()
  time.sleep_ms( 500 )
d.right.disc( False )

# Rotation du disque
d.right.disc_start()
d.update()
while True:
  d.right.disc_step()
  d.update()
  time.sleep_ms( 50 )
d.right.disc( False )


Enfin, un exemple simple mais celui que je préfère.... afficher l'heure.
Les heures et minutes sont affichées sur la section centrale... tandis que les secondes sont affichées sur la section de droite.

from vfd_proximus import *
from machine import Pin, RTC
import time

rtc = RTC()

d = VFD_Proximus( sck_pin=Pin.board.GP16, sdata_pin=Pin.board.GP13, cs_pin=Pin.board.GP14, reset_pin=Pin.board.GP18 )
d.print("VFD Time") 
d.center.separator = COLON
d.right.separator = COLON

while True:
	year, month, day, weekday, hours, minutes, seconds, subseconds = rtc.datetime()
	d.center.set( digit_group2=hours, digit_group1=minutes )
	d.right.set( seconds )
	d.update()
	time.sleep_ms( 200 )

Ressources

Si le sujet vous intéresse, voyez le dépôt GitHub contient d'autres informations.

MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible. 

SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Red Wings – Aces of the Skys : Revivez les batailles aériennes de 14-18

Par :Régis
3 janvier 2025 à 07:30

Dans le monde des jeux vidéo, il est rare de trouver des titres qui combinent une expérience de jeu accessible avec une touche d’histoire. Red Wings: Aces of the Sky est l’un de ces jeux. Développé par All in! Games, ce jeu d’action arcade vous plonge dans les cieux tumultueux de la Première Guerre mondiale, où vous […]

L’article Red Wings – Aces of the Skys : Revivez les batailles aériennes de 14-18 est apparu en premier sur Windtopik.

❌
❌