In questo tutorial esploreremo le possibilità offerte dall’uso di uno Shift Register 74HC595 senza avvalerci di alcuna libreria per pilotare l’accensione di 8 led usando solo 3 pin di Arduino.
Introduzione a 74HC595
Uno ShiftRegister o registro a scorrimento, anche detto convertitore da seriale a parallelo, ci consente di impostare il valore logico dei suoi 8 pin di uscita (Q0-Q7), inviando i valori un bit alla volta sul pin di entrata (DS).
Lo SR leggerà il valore dello stato del pin DS ogni volta che invieremo un impulso al pin di clock (SH_CP). Per impulso si intende che il valore logico del pin passa da LOW a HIGH. Non importa per quanto tempo il pin resta in un determinato stato o con quale frequenza si trasmettano i dati, infatti ci si riferisce a questi componenti come sincroni; non si imposta una frequenza di trasmissione ma ogni volta che la sorgente ha un bit pronto da trasmettere, alza il clock, il destinatario legge il valore in quel momento, e poi si riabbassa il clock prima di passare al bit successivo.
Un ultimo pin ci consente inoltre di comandare lo SR affinché mantanga le uscite impostate, il pin latch (chiavistello) etichetatto ST_CP. Se tale pin è HIGH, le uscite resteranno invariate ed è così che dobbiamo lasciare il pin per tutto il tempo in cui non lo stiamo programmando.
Poichè l’IC 74HC595 dispone di 8-bit, usualmente vi si invia un byte ad ogni programmazione; le librerie standard implementano metodi come shiftOut che scrivono un intero byte con una singola istruzione; questo modo di fare astratto rende poco chiaro cosa effettivamente accada. Nel primo sketch, invieremo un solo bit ad ogni programmazione, proprio a dimostrarne il vero funzionamento.
Come per tutti i circuiti integrati, l’74HC595 è disponibile in diversi package. Nel nostro progetto useremo la versione 16-pin PDIP che è adatta ad essere montata sulle breadboard.
Lista della Spesa
Per questo progetto avrete bisogno di:
- 1 IC 74HC59
- 1 Arduino UNO
- 8 led
- 8 resistenze da 220Ω
- 1 potenziometro da 10kΩ
- cavetti di vari colori
[amazon_link asins=’B00QH6FFXS,B008GRTSV6,B06X3VT6TD,B01JJ94UVW,B0777KX66X,B072NSLB98′ template=’ProductCarousel2′ store=’azerbinati-21′ marketplace=’IT’ link_id=’4c2fb225-37e6-11e8-bef0-8339c29fbe44′]
Led
Prima di iniziare l’assemblaggio, un piccolo ripasso sui LED. Il led è un diodo e quindi la corrente può attraversarlo in un solo verso, è quindi fondamentale capire come orientare il componente. Il polo positivo si chiama anodo ed è il piedino più lungo, l’altro è il catodo e va messo a GND. I led non sono tutti uguali, in particolare led di colore diverso hanno specifiche di voltaggio diverse e vanno indicativamente da 1.7V a 3.5V a seconda del colore. Tipicamente i led usati per questi progetti hanno una corrente massima tollerata di 20mA. Poichè l’output dell’Arduino, ma anche dell’74HC595, è di 5V, occorre frapporre una resistenza in serie con ogni led così da limitare la corrente e non bruciare il led.
Avevo già indicato nei componenti l’uso di resistenza da 220Ω ma poichè i vostri led potrebbero essere diversi, ecco come effettuare il calcolo: cercate nelle specifiche dei vostri led la tensione Vf (in genere compresa tra 1.7 e 3.5V) e la corrente If (in genere 20mA o 30mA). La tensione di partenza Vcc è 5V dati dall’alimentazione di Arduino. Led e resistanza saranno in serie, quindi il calo di tensione sul led (Vf) sommato al calo di tensione sulla resistenza (Vr) sarà di 5V: Vr+Vf=Vcc ossia Vr=Vcc-Vf.
Usando la legge di Ohm si ottiene R=Vr/If ossia R=(Vcc-Vf)/If. Con i dati relativi ai miei led, ossia 2V di Vf, e 15mA di assorbimento (20mA è il massimo, ma meglio stare sotto che sopra) si ottiene R=(5-2)/0,015 = 200Ω. La resistenza standard più vicina è da 220Ω.