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