Assembliamo 74HC595 sulla Breadboard
Bene, ricapitolando, abbiamo un 74HC595, 8 led, 8 resistenze da 220Ω e sappiamo come posizionarli sulla breadboard. Cominciamo.
Step 1
Come prima cosa, posizioniamo un led con l’anodo alla nostra destra e posizioniamo la resistenza tra cadoto ed il binario a ground. Ovviamente esistono altri modi di posizionare il led e la resistenza, avremmo potuto per esempio mettere la resistenza a monte dell’anodo ma in questa particolare configurazione geometrica la resistenza ci consente di andare a ground senza usare un cavetto.
Step 2
Posizioniamo gli altri 7 led seguendo lo stesso schema. In pratica tutti led saranno posizionati con l’anodo a destra uno a fianco dell’altro. Le resistenze andranno posizionate lasciando un buco libero sulla breadboard tra una e l’altra portando così ordinatamente ogni catodo sul binario ground.
Step 3
A questo punto posizioniamo il nostro 74HC595 a cavallo delle breadboard. Fate attenzione all’orientamento. Per distinguere il senso corretto, IC ha un piccolo smusso da un lato: posizionatelo in modo che questo sia alla vostra sinistra.
Step 4
Bene, tutti i componenti sono stati piazzati, ora bisogna cominciare a piazzare i cavetti.
Iniziamo collegando i cavetti di output dallo Shift Register ai vari diodi.
Controllate sempre il datasheet dell’IC e l’orientamento sulla vostra breadoard prima di collegare ogni cavetto. Sbagliare anche solo un passaggio può portare a bruciare qualcosa. Iniziamo col il pin Q0 perchè il l’unico output sul lato destro del chip; colleghiamolo all’anodo del led più a sinistra. Qui trovate il link al datasheet ufficiale della Texas Instruments
Step 5
Completiamo i collegamenti dei dei pin da Q1 fino a Q7, collegandoli ai led a partire dal secondo anodo da sinistra via via verso destra.
Il pin Q7′ è un ulteriore output usato per collegare a cascata altri Shift Register ed in questo progetto non sarà collegato a nulla.
Step 6
Ora colleghiamo il Gnd e Vcc dell IC al rail di alimentazione.
Inoltre collegheremo il pin MR ad 5V e OE a 0V in quanto non piloteremo le rispettive funzionalità.
Il pin MR, Master Reclear, consente di pulire lo stato del registro con un unico impulso. Volendo, potremmo collegare questo pin ad una delle uscite di Arduino per cancellare il registro senza doverlo sovrascrivere, ma in questo progetto non ce n’è bisogno.
Il pin OE, Output enable, attivo basso, ci consente di disattivare temporaneamente le uscite, anche in questo caso non sfrutteremo le potenzialità del IC e ci limiteremo di tenere sempre gli output attivi.
Step 7
Ok, dunque siamo pronti ad introdurre Arduino nel nostro circuito. Per prima cosa colleghiamo i 3 cavetti ai pin DS, ST_CP e SH_CP a 3 pin digitali: 8, 9 e 10 andranno benissimo. Inoltre, colleghiamo il pin 5V di arduino al rail 5V superiore e un pin GND al rail GND inferiore. Non dimenticate di collegare il GND del rail inferiore al GND del rail superiore.
Step 8
La parte hardware è completata, ora non ci resta che programmare Arduino. Esistono ovviamente librerie già pronte che con poche righe di codice si prendono cura di tutto, ma qui vorrei mostrarvi il funzionamento dello shift register: quindi niente librerie e pilotiamolo esplicitamente.
//Connesso al Pin DS del 74HC595 int dataPin = 8; //Connesso al Pin ST_CP del 74HC595 int latchPin = 9; //Connesso al Pin SH_CP del 74HC595 int clockPin = 10; void setup() { //configuriamo i 3 pin di output pinMode(dataPin, OUTPUT); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { digitalWrite(clockPin, 0); //mi assicuro che clock si LOW digitalWrite(latchPin, 0); //abbasso il latch per iniziare a programmare il 74HC595 digitalWrite(dataPin, 1); // alzo il pin data digitalWrite(clockPin, 1); //alzo il clock -> abbiamo "spinto" il valore 1 nel primo registro del 74HC595. digitalWrite(dataPin, 0); //rimetto a zero il data pin e clock pin per non portare valori HIGH oltre questo punto. digitalWrite(clockPin, 0); digitalWrite(latchPin, 1); //latch HIGH per confermare gli output. delay(200); // a questo punto abbiamo acceso il primo led ed attendiamo 200ms //adesso faremo scorrere quell'unico led acceso inserendo uno alla volta 8 led spenti. for (int j = 0; j < 8; j++) { digitalWrite(latchPin, 0); //abbasso il latch per iniziare a programmare il 74HC595 digitalWrite(clockPin, 0); //abbasso il clock digitalWrite(dataPin, 0); // pin data low digitalWrite(clockPin, 1); //alzo il clock ed spingiamo nel primo registro il valore "0" facendo così scorrere anche tutti gli altri registri digitalWrite(clockPin, 0); //rimetto a zero il clock pin. digitalWrite(latchPin, 1); //latch HIGH per confermare gli output. delay(200); // a questo punto abbiamo spinto l'unico led acceso a destra. } //il nostro unico led acceso è uscito di scena.. o meglio, è passato su Q7'... in futuro vedremo due shift register in daisy-chain. }
Il codice è autoesplicativo, fate attenzione ad impostare le variabili ad inizio dello sketch con i pin effettivamente collegati
//Connesso al Pin DS del 74HC595 int dataPin = 8; //Connesso al Pin ST_CP del 74HC595 int latchPin = 9; //Connesso al Pin SH_CP del 74HC595 int clockPin = 10;
In questo esempio, stiamo semplicemente spingendo un bit alla volta nello shift register, osservandone lo stato ad ogni inserimento per capirne il funzionamento. Vedremo oltre come cambiare lo stato di tutti i led in un unico passaggio. Se volete approfondire l’uso dello shift register comandandolo un bit per volta potete seguire questo tutorial: (Tutorial Push Button v1) 8 led e 2 Pulsanti