Udělej si (2) – posuvný registr

Kurz pro začátečníky – Jak zvětšit počet výstupů arduina pomocí posuvných registrů, angl. Shift Register

Co budete potřebovat:

1x Arduino (Uno, Duemilanova, Due, Leonardo)
1x integrovaný obvod 74HC595N
8x Led dioda (na barvě nezáleží)
8x rezistor 220 až 330 Ohm
1x nepájivé pole
dráty jako propojovací vodiče

Součástky a  materiál koupíte např. zde: Stavebnice.com/eshop

Jak zapojit:


Posuvný registr 74hc595



Na obrázku jsou zobrazena dvě nepájivá pole z důvodu přehlednosti. Zapojení lze samozřejmě zrealizovat na jednom.

LED diody mají obvykle jednu nožičku delší – ta se připojuje na plus. Nebo v tomto zapojení k odporu.

Ukázka programu 2.1 – světélka se hýbou:

//Pin zapojen do ST_CP of 74HC595
int latchPin = 8;
//Pin zapojen do SH_CP of 74HC595
int clockPin = 12;
//Pin zapojen do DS of 74HC595
int dataPin = 11;

void setup() {
 //nastaveni pinu jako vystupnich pro ovladani posuvneho registru
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
}

void loop() {
 // pocita od 0 do 255 a zobrazi cislo na LEDky
 // 255 v dekadicky se zobrazi binarne 0b11111111
 for (int numberToDisplay = 0; numberToDisplay < 0b11111111; numberToDisplay++) {
 // nastav latchPin na LOW
 digitalWrite(latchPin, LOW);
 // a zacni posilat data po osmi bitech (protoze pouzivame 8 vystupu):
 shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  

 //kdyz zmenime latchPin z LOW do HIGH, tak se nam zobrazi data na vystupech:
 digitalWrite(latchPin, HIGH);
 // pauza pro cteni dalsich dat:
 delay(150);
 //digitalWrite(latchPin, LOW);
 //shiftOut(dataPin, clockPin, MSBFIRST, 0b01011011);
 //digitalWrite(latchPin, HIGH);
 //delay(550);
 }
}

Ukázka programu 2.2 – jak posílat data jednotlivě:

//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

void setup() {
 //set pins to output so you can control the shift register
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
}

void loop() {
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
 digitalWrite(latchPin, HIGH);
 delay(150);
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST, 0b00011000);
 digitalWrite(latchPin, HIGH);
 delay(150);
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST, 0b00111100);
 digitalWrite(latchPin, HIGH);
 delay(150);
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST, 0b01111110);
 digitalWrite(latchPin, HIGH);
 delay(150);
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST, 0b11111111);
 digitalWrite(latchPin, HIGH);
 delay(150);
 }

Příště si povíme, jak rozšířit počet výstupů násobným připojením dalších posuvných registrů.


Napsat komentář