Tutorial Arduino 74HC595 v1 Controllare 8 led con uno Shift Register

Tutorial 74HC595 – 8 led con uno Shift Register

Assembliamo 74HC595 sulla Breadboard

Bene, ricapitolando, abbiamo un 74HC595, 8 led, 8 resistenze da 220Ω e sappiamo come posizionarli sulla breadboard. Cominciamo.

Step 1

BreadBoard 74HC595 Step 1
Schema realizzato con Fritzing

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

BreadBoard 74HC595 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

BreadBoard 74HC595 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

BreadBoard 74HC595 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.

Pin layout

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

BreadBoard 74HC595 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

BreadBoard 74HC595 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

BreadBoard 74HC595 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