MicroPython: Réutiliser une 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:
- 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.
- 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.
- micropython-PT6302-VFD (GitHub MCHobby, Anglais)
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.