Vue normale

Aujourd’hui — 3 janvier 2025Arduino & Raspberry Notepad

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:

  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.

❌
❌