Okazuje się, że wykorzystanie rejestru przesuwnego 74hc595 może być znacznie szersze oszczędzając jednocześnie piny procesora, których zwykle jest niewiele. W przypadku układu 74hc595 mamy możliwość podłączenia w kaskadę dowolnej ilości rejestrów. Pozwala to na sterowanie wieloma urządzeniami wykorzystując tylko 3 piny procesora. Zauważmy, że pin numer 9 układu 74hc595 oznaczony Q7* lub Q7'zgodnie z datasheet przekazuje dane do kolejnego rejestru w chwili gdy pierwszy jest przepełniony. Oznacza to, że przykładowo w dwa rejestry połączone szerogowo możemy zapisać dwa bajty danych. I to wykorzystując tylko 3 piny procesora. Przykładowy układ wygląda następująco:
![]() |
| Źródło: www.arduino.cc |
Postanowiłem wykorzystać podobny układ do sterowania dwoma wyświetlaczami LED. W tym celu zbudowałem układ według schematu.
Wyświetlacz D2 wyświetla jednostki a wyświetlacz D1 dziesiątki. Układ ma zliczać sekundy od 59 do 0. Wsad do Arduino jest bardzo prosty.
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
int matrix[10];
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
matrix[0]=0b00111111;
matrix[1]=0b00000110;
matrix[2]=0b01011011;
matrix[3]=0b01001111;
matrix[4]=0b01100110;
matrix[5]=0b01101101;
matrix[6]=0b01111101;
matrix[7]=0b00000111;
matrix[8]=0b01111111;
matrix[9]=0b01101111;
}
void loop() {
int liczba;
int i,h,l;
for(liczba=59;liczba>=0;liczba--){
l=(liczba%10);
h=(liczba/10)%10;
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,~matrix[l]);
shiftOut(dataPin,clockPin,MSBFIRST,~matrix[h]);
digitalWrite(latchPin,HIGH);
delay(1000);
}
}
Efekt działania układu ilustruje film


Brak komentarzy:
Prześlij komentarz