piątek, 22 lipca 2016

Rejest przesuwny w szeregu.


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