Parte due: multiplexing e shift registers

Nell’articolo precedente abbiamo parlato delle nixie, stavolta approfondiremo il discorso relativo al multiplexing, all’uso degli shift register e le problematiche di pilotare i dispositivi a 150v.

Abbiamo detto che ogni tubo è dotato di 10 catodi, uno per ogni cifra e un anodo. In totale, per ogni nixie, dovremo gestire 11 connessioni. Volendo visualizzare ore, minuti e secondi, avremo bisogno di sei tubi, e quindi 66 segnali.

 Una cosa che non ho specificato ancora, è che l’orologio sarà basato su Arduino, una scheda di prototipazione elettronica che permette di usare un microcontrollore in un ambiente molto semplice. Questa scelta è dettata da una parte dal fatto che la scheda è molto diffusa, e dall’altra perché ho già una buona confidenza con il sistema.

Arduino (ora Genuino) Mega - foto via qui.
Arduino (ora Genuino) Mega – foto via qui.

Arduino Uno, il modello più diffuso, è dotato di sole 20 connessioni. Il modello con più contatti di Input/Output, il Mega, ne ha 70. L’Arduino Mega è però più costoso, e comunque significherebbe avere solo 4 contatti di IO liberi, impedendo praticamente di collegare altri dispositivi.

Una buona soluzione tecnica in questi casi è il multiplexing, o multiplazione. Per multiplexare dobbiamo collegare tra loro i catodi cifra a cifra. Collegheremo su un unico canale quindi tutti gli zero, su un altro canale tutti gli uno e via dicendo. Gli anodi resteranno indipendenti l’uno dall’altro. Così facendo avremo ottenuto una matrice di dieci cifre e sei anodi. 

Collegamenti per il multiplexing delle nixie - foto via  qui.
Collegamenti per il multiplexing delle nixie – foto via qui.

 

E ora? E ora possiamo far avvenire la magia! Attiveremo un anodo e un catodo per volta, molto rapidamente. Supponiamo di voler scrivere l’orario 12:59:59. Questi saranno i passi che seguiremo:

  • Attiviamo contemporaneamente il catodo 1 e l’anodo delle decine delle ore, e li disattiviamo;
  • Attiviamo il catodo 2 e l’anodo delle unità delle ore;
  • Attiviamo il catodo 5 e l’anodo delle decine dei minuti;
  • Attiviamo il catodo 9 e l’anodo delle unità dei minuti;
  • Attiviamo il catodo 5 e l’anodo delle decine dei secondi;
  • Attiviamo il catodo 9 e l’anodo delle unità dei secondi.

ezgif.com-video-to-gif-1

Così facendo avremo acceso ogni tubo con la sua cifra una volta sola. Se eseguissimo queste operazioni lentamente, diciamo una volta al secondo, vedremo la sequenza di cifre accendersi una per volta, dopo lo spegnimento dell’altra. Immaginiamo invece di eseguire questo ciclo molto più rapidamente, mille volte al secondo. Entra in gioco il fenomeno della persistenza della visione : a questa velocità il nostro occhio non sarà più in grado di cogliere il rapido accendersi e spegnersi delle cifre, e apparirà come se le cifre fossero accese tutte contemporaneamente, ognuna sul rispettivo tubo. Questo processo, come abbiamo detto, è chiamato multiplexing.

Con il multiplexing avremo quindi bisogno di sedici connessioni, che sono ancora troppe per l’espandibilità che voglio garantire al mio orologio. Per ridurre ulteriormente le connessioni useremo due registri a scorrimento da 8 bit ciascuno, nello specifico useremo due 74HC595.

Registro 74HC595 – foto via qui.

Possiamo immaginare un registro a scorrimento STP(Serial To Parallel) come una scatola con un ingresso e tante uscite(8 nel nostro caso).
Il nostro registro avrà bisogno di tre connessioni: LATCH, CLOCK e DATA. Ognuna ha una funzione ben specifica: LATCH ci servirà ad avvisare il registro che abbiamo iniziato un trasferimento dati verso di lui; CLOCK ci servirà a scandire il tempo della nostra comunicazione, in modo che il registro sappia distinguere un bit da un altro; DATA infine ci servirà per inviare al registro i dati da inserire.

Registro a scorrimento a 8 bit - prodigazione artistica dell'autore.
Registro a scorrimento a 8 bit – prodigazione artistica dell’autore.

I registri a scorrimento hanno un’ulteriore caratteristca utile: oltre all’ingresso seriale dispongono anche di una uscita seriale da cui esce il “treno” di bit dopo essere passato per il registro. L’uscita del registro può essere collegata all’ingresso di un altro registro, disponendoli quindi a cascata. Collegando insieme il LATCH ed il CLOCK, che sono gli stessi per i due registri, avremo ottenuto l’equivalente di un registro a scorrimento con spazio di 16 bit(8+8). Con tre connessioni potremo quindi controllarne 16. In questo modo riduciamo ulteriormente il numero di connessioni necessarie ai tubi.
Scrivendo rapidamente i bit nei registri potremo realizzare il multiplexing delle nostre nixie.

Dobbiamo anche specificare che tutte le logiche(Arduino, i registri ecc) utilizzati per questo progetto funziona con una tensione di 5v. Non possiamo usare questa tensione per alimentare i tubi, che con una tensione così bassa non si accenderebbero neanche. Abbiamo quindi bisogno di un sistema per maneggiare tensioni cosi alte senza che entrino in contatto con la logica, che altrimenti si distruggerebbe in pochi istanti.

Equivalente sovietico del 74141 - foto via qui.
Equivalente sovietico del 74141 – foto via qui.

Storicamente la soluzione adottata è quella di utilizzare un circuito integrato chiamato 74141, che riceve in input 4 segnali (un numero binario a 4 bit) e lo converte nell’equivalente decimale. Il circuito integrato comprende anche un driver ad alta tensione che ci permette di gestire senza problemi anche le tensioni delle nixie.

Ma a noi piacciono le sfide e non la “pappa pronta”, quindi creeremo il nostro driver a componenti discreti(mattoncino per mattoncino, a differenza dei circuiti integrati). Un ottimo riferimento su quest’argomento è disponibile qui.

In breve avremo bisogno di un transistor BJT(Transistor a giunzione bipolare). Su cosa sia e come funzioni un transitor BJT dedicherò un articolo a parte. Per ora limitiamoci a immaginarlo come una sorta di “interruttore” con tre terminali: la BASE, il COLLETTORE e l’EMETTITORE. In termini tecnici useremo il transistor esclusivamente nella regione di saturazione. La conduzione/interdizione avviene tra il collettore e l’emettitore, mentre la base comanda questo fenomeno.
In realtà il transistore potrebbe lavorare anche in modo (quasi) lineare, con la corrente tra emettitore e collettore proporzionale a quella tra base ed emettitore. Ma per ora non preoccupiamocene, dato che non ci serve e necessita di calcoli più complessi e studi più approfonditi.
Inoltre esistono due tipi di transitor BJT: i NPN e i PNP. Essenzialmente sono l’uno il complementare dell’altro. Tratteremo bene anche questa differenza nel futuro articolo, momentaneamente limitiamoci a sapere che i NPN lavorano con tensioni positive, mentre i PNP lavorano con tensioni negative. Partiamo dai transitor NPN.

Simboli circuitali dei transitor NPN e PNP. B sta per base, C per collettore ed E per emettitore
Simboli circuitali dei transitor NPN e PNP. B sta per base, C per collettore ed E per emettitore

Per noi, come dicevamo, il transitor funzionerà come un semplice interruttore, o aperto o chiuso, o spento o acceso. Da cosa è attivato l’interruttore, e quindi la conduzione tra collettore ed emettitore? Per attivare la conduzione è necessario fare in modo che la base sia a una differenza di potenziale tra base ed emettitore(Vbe) di +0.7v per i NPN e di -0.7v per i PNP.

Ricordiamoci che avremo due tipi di segnali da trattare: dai +150v all’anodo del tubo, e dal catodo del tubo a massa(0v). Questi due segnali avranno bisogno di un trattamento assai diverso, nel prossimo articolo vedremo in dettaglio perché e come li tratteremo.

Spero di essere riuscito a mantenere un livello adeguato di contenuto senza diventare troppo tecnico e noioso, e anche per oggi è tutto.

 

CC BY-NC-SA 4.0 This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Un commento su “Parte due: multiplexing e shift registers”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *