Led Matrix Display Multiplexed²

"Acquistate ad una fiera (senza motivo) sei bellissimi display a matrice di 5x7 LED al costo di qualche euro, poi lasciateli stagionare alcuni anni in attesa della giusta ispirazione per il loro utilizzo pratico..." Questo progetto nasce esattamente con queste premesse. Approfittando delle ultime festività natalizie mi sono deciso a realizzare qualcosa con i dispositivi ormai "frollati" a dovere, dopo aver visto nella vetrina di un negozio di oggettistica per la casa un curioso maxi-orologio-calendario che utilizza una tecnologia simile.. Questo tipo di display si presta ottimamente alla visualizzazione di numeri, lettere e simboli con la possibilità di effetti di scorrimento, lampeggio, dissolvenza...
Tralasciando le sigle con le quali i produttori commercializzano questi componenti, la piedinatura utilizzata è spesso la stessa, riportata qui sopra. Come per i display a sette segmenti, esistono le tipologie a catodo comune e ad anodo comune (il mio caso); i punti luminosi creati dai led sono organizzati per righe e colonne; l'accensione avviene applicando le giuste polarità ai pin esterni. Spesso viene utilizzata la tecnica del multiplexing, ossia in tempi successivi vengono accesi i vari led una colonna -o una riga- alla volta, risparmiando un gran numero di collegamenti elettrici potendo "riutilizzare" i segnali relativi alle righe/colonne. La persistenza delle immagini sulla retina dell'occhio ci farà percepire l'informazione completa. Quindi, per comporre una scritta, è sufficiente variare, colonna per colonna, i segnali applicati alle righe, tutte connesse fra loro, mentre una alla volta vengono accese le colonne; il tutto almeno una trentina di volte al secondo per assicurare una visione che non "sfarfalli". In pratica occorre considerare che, se la velocità di aggiornamento dei segnali non presenta particolari problemi tecnici, all'aumentare del numero di colonne "multiplexate" ciascuna di esse rimane accesa per una frazione di tempo via via più piccola, col risultato che la luminosità complessiva percepita diventa insufficiente. Oltre un certo limite occorre adottare soluzioni che permettono di accendere più colonne contemporaneamente; il mio approccio al problema, anzichè ricorrere a integrati appositamente studiati o a complessi circuiti digitali (latch-i e latch-iuoli) consiste nel raddoppiare il bus di dati e attivare due colonne contemporaneamente. L'immagine seguente illustra il principio di funzionamento.


Il progetto è suddiviso in due sezioni distinte (display e MicroControllerUnit) che ho affrontato separatamente secondo la filosofia del "divide et impera"
Schema display


La parte superiore dello schema costituisce il sistema di accensione delle colonne ed è formato da una catena di integrati 74HC164 (Serial In, Parallel Out). I segnali necessari al funzionamento (clock, data, clear) e l'alimentazione a 5 volt sono riportati su un connettore collegato alla scheda MCU. I due bus dati fanno capo ai connettori P2 e P3; sia questi che le uscite dello shift register sono bufferati con semplici stadi a transistor; il complesso dei segnali così ottenuti è applicato ai display (D1-D6). L'immagine seguente riporta lo sbroglio delle piste. Sbroglio è la parola più indicata considerato il numero di componenti... Curiosamente, l'utilizzo di resistenze e transistor per i buffer delle linee anzichè ricorrere ad array integrati tipo gli ULN200x consente di contenere le dimensioni della piastra, a scapito del moltiplicarsi di piazzole e saldature.
LATO RAME DISPOSIZIONE COMPONENTI
Durante la lavorazione mi sono pentito di aver scelto, come sono solito fare per quasi tutti i miei prototipi, il montaggio su millefori. Se per piccoli circuiti il tempo di lavorazione occorrente è paragonabile a quello di incisione, foratura e montaggio di un circuito stampato, in questo caso si sono rese necessarie diverse ore e notevole concentrazione. Per dirla come i giocatori di biliardo, "calma e gesso" (optional: birretta). Di sicuro, un eventuale secondo esemplare sarà su stampato. Ecco la scheda display montata e collaudata.
LATO RAME DISPOSIZIONE COMPONENTI
Unità di controllo MCU
La seconda parte del progetto riguarda il circuito di controllo del display ed è realizzata con un microcontroller PIC tipo 16F877a. Contiene inoltre la sezione di alimentazione dell'insieme, fornita da un alimentatore a muro da 12 volt non stabilizzati, 200 mA.


Nella parte alta dello schema, i connettori P4,P5 e P6 portano i segnali alla scheda display. A sinistra lo stadio di alimentazione realizzato con un LM317 regolato a 5 volt. Poichè ho previsto una alimentazione di backup a batteria, Q47 e Q48 sono dedicati alla carica in tampone, con corrente costante di circa 7 mA, di una batteria di elementi ricaricabili Ni-Mh da 7.2 volt nominali, 150-200 mAh. Q46 si occupa di avvisare il micro della mancanza di alimentazione esterna: sulla linea collegata al collettore sarà presente un livello basso con alimentazione esterna, alto durante il funzionamento a batteria. Q45 attiva o disattiva l'alimentazione del display comandato da una linea del micro. Il microcontroller scelto ha una generosa disponibilità di porte input/output. Quelle ancora libere sono state dedicate a due pulsanti, una linea con resistenza di pull-up per un sensore di temperatura Dallas DS18B20. I segnali necessari alla programmazione in-circuit sono riportati sul connettore P9, a P12 potrà essere collegato un convertitore TTL-RS232 o magari un modulo bluetooth per connettere la scheda a un PC. Il jumper P10 isola la linea B6 e va lasciato aperto durante la programmazione, chiuso nel funzionamento normale. Per le rimanenti linee inutilizzate ho previsto la sola piazzola sulla scheda, in caso di ulteriori espansioni. Ecco il lato rame ed il layout lato componenti:
LATO RAME DISPOSIZIONE COMPONENTI
I connettori P4 e P5 sono saldati sul lato rame, così come P1 e P2 sulla scheda display. In questo modo le due unità vengono accoppiate rame contro rame risparmiando un po' di cablaggi. Per il secondo bus il collegamento fra P3 e P6 avviene con un cavo flat e connettori SIP. I micropulsanti saldati sulla scheda sono da utilizzare solo durante le fasi di collaudo, nel montaggio definitivo saranno utilizzati pulsanti esterni, connessi alle piazzole appositamente previste. Per rendere meccanicamente solido l'assieme, sia sulla scheda display che sulla MCU ho saldato due pezzetti di millefori che a montaggio ultimato sono fissati fra loro con vite e dado M3. Questa, unita alle torrette in corrispondenza degli angoli esterni, assicura la necessaria robustezza ed evita sollecitazioni ai connettori.
LATO RAME DISPOSIZIONE COMPONENTI


E' ora di firmware!

Izz taim tu plei: via saldatore ed utensili, mano a tasiera e mouse. La gestione vera e propria della visualizzazione è affidata ad una routine che utilizza una matrice di variabili caricata con i valori necessari a comporre l'informazione grafica desiderata. La stessa routine gestisce il clock dello shift register in maniera tale da sincronizzare il tutto. Ho predisposto questo foglio di calcolo per generare i valori da caricare nella matrice con il quale è possibile modificare il font e i simboli da visualizzare. In ogni istante sono accese due colonne, quindi ogni refresh del display si compie in 15 cicli di clock. Ogni colonna rimane accesa per circa mezzo millisecondo, ne deriva che la frequenza di aggiornamento dell'intero display è intorno ai 130 Hertz. Una seconda routine si vale del timer interno a 16 bit TIMER1 e implementa orologio e calendario. La rimanente parte del firmware può essere dedicata alle funzioni vere e proprie del dispositivo. Nella attuale stesura del codice ho attinto a piene mani dal precedente progetto YAC con una ulteriore funzione dedicata alla visualizzazione di una scritta scorrevole e impostabile a piacimento. I pulsanti operano in questo modo:

  • SW1: cicla fra le seguenti visualizzazioni:
    1. ora-minuti, giorno-mese, temperatura (scorrevole)
    2. ora-minuti (fissa)
    3. minuti-secondi (fissa)
    4. giorno-mese (fissa)
    5. scritta scorrevole personalizzabile
  • SW2: una pressione breve nelle visualizzazioni 2,3,4,5 riporta alla visualizzazione 1; la pressione lunga consente l'impostazione di ora e data. Nella visualizzazione 5, la pressione lunga avvia la routine di impostazione del messaggio visualizzabile (max 86 caratteri). Le lettere si modificano con il tasto SW1, confermandole con il tasto SW2. Il carattere "°c" è assunto come codice di fine messaggio e termina la procedura.

Come accennato nella descrizione dello schema elettrico, lo stato di alimentazione del circuito è monitorato dal PIC e, in caso di mancanza di alimentazione, si attiva la modalità "basso consumo". Non si tratta di una vera e propria funzione di sleep ma piuttosto di "dormiveglia": il clock del micro e le routines di aggiornamento relative all'orologio funzionano normalmente, ma viene spento il display e lo shift register. In questo modo l'assorbimento totale passa da circa 120 mA a una decina, consentendo una buona autonomia in caso di black out. Al momento ho badato soprattutto ad ottimizzare la visualizzazione e lo scorrimento dei caratteri; trascurando altri aspetti. Non ho implementato l'uso di un collegamento seriale, previsto in un primo tempo per modificare il messaggio scorrevole, in quanto tutto sommato l'impostazione tramite tasti non è poi così scomoda; anche la gestione complessiva della RAM disponibile non è certo efficiente. Non ho inserito effetti di lampeggio / dissolvenza, che pure si possono implementare vista la diponibilità di risorse del micro... frivolezze. Tuttavia il progetto così com'è funziona molto bene e può considerarsi finito a tutti gli effetti. Le risorse ancora disponibili del PIC sono quasi due terzi con un buon numero di linee di I/O, quindi le possibilità di aggiungere funzioni non mancano di certo. Qualche idea? Un moduletto mp3 o FM ed ecco una radiosveglia che ti accoglie con uno "SVEGLIA PIGRONE!" o che ti ricorda il tuo compleanno. Meglio ancora: il compleanno della dolce(!) metà o la scadenza del bollo.. Il tutto, forse, ad una prossima rev 2.0. Ecco il link del Firmware e due animazioni per dare l'dea del risultato.

Messaggio scorrevole

Orologio-calendario-termometro

Rimane ancora una cosa prima di poter mettere la parola fine: il mobile. Al momento sono indeciso fra due soluzioni, una che consiste nel cannibalizzare una cassetta in legno tipo quelle utilizzate per il vino pregiato (carteggiata all'infinito e lucidata a cera farebbe un figurone) e l'altra che prevede una teca in plexiglass, tutto a vista: aspetto volutamente grezzo, per il disinnesco tagliare il filo blu. O era il rosso? Urge ispirazione.......

Troppi anni dopo...
L'ispirazione per la costruzione di un mobile ha richiesto anni. Per un po' ho cercato di recuperare qualcosa di pronto, poi ho deciso per una realizzazione su misura. Il materiale non è certo nobile, un multistrato recuperato al brico; in compenso il plexiglass rosso ha un suo perchè.


praz2004 chiocciola libero punto it