|

Rejestr przesuwny 74HC595 z Arduino

Shift Register 74HC595 to 8-bitowy chip zawierający 16 pinów, dzięki któremu można zarządzać 8 wyjściami cyfrowymi. Pozwala to rozszerzyć liczbę dostępnych pinów cyfrowych.

Jak działa rejestr przesuwający?

Moduł składa się z rejestru przesuwającego (Shift Register) i rejestru pamięci (storage register).
Każdy z nich posiada osobny zegar wewnętrzny. Kiedy clockPin zmienia stan z Low na High, shift register zczytuje stan z dataPin. Dane zostają przetransferowane do rejestru pamięci. Kiedy latchPin zmienia stan z Low na High, wtedy równoległe sygnały zostają wysłane do wyjść Q0-Q7.

Rejestr 74HC595 podaje prąd na wyjścia, dlatego nazywamy go sourcing current, ale istnieją również rejestry, tzw. sinking current, w przypadku których należy podłączyć odbiorniki na pinach w odwrotny sposób.

Podłączenie rejestru przesuwnego 74HC595 z Arduino
Podłączenie rejestru przesuwnego 74HC595 z Arduino

Projekt na tinkercad

74HC595 pinout

 SYMBOL PINDESCRIPTION
Q0 to Q715, 1 to 7 parallel data output
GND 8ground (0 V)
Q7’9serial data output
MR 10master reset (active LOW)
SHCP 11shift register clock input
STCP 12storage register clock input
OE13output enable (active LOW)
DS14serial data input
VCC16positive supply voltage
Astraja Rejestr-przesuwny-74HC595-pinout
Rejestr-przesuwny-74HC595-pinout

shiftOut()

Metoda shiftOut przesuwa byte danych, bit po bicie. Przesuwanie może rozpocząć się od MSB lub LSB.

shiftOut(dataPin, clockPin, bitOrder, value)

dataPin – pin przesyłający dane (int)

clockPin – pin zegara (int)

bitOrder – kierunek przesuwu (MSBFIRST lub LSBFIRST)

value – wartość (byte)

Wyświetlenie 1 bajta za pomocą diod LED i shiftOut

int dataPin = 4;
int latchPin = 5;
int clockPin = 6;
byte databyte = 0b10100101;

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);

  digitalWrite(latchPin, LOW);
  //shiftOut(dataPin, clockPin, LSBFIRST, databyte);
  for (int i = 0; i <= 7; i++) {
    digitalWrite(clockPin, LOW);
    digitalWrite(dataPin, bitRead(databyte, i));
    digitalWrite(clockPin, HIGH);
  }
  digitalWrite(latchPin, HIGH);
}

Shift Register bez shiftOut

int dataPin = 4;
int latchPin = 5;
int clockPin = 6;

byte databyte = 0b10000101;

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);

  digitalWrite(latchPin, LOW);
  //shiftOut(dataPin, clockPin, LSBFIRST, databyte);
  for (int i = 0; i <= 7; i++) {
    digitalWrite(clockPin, LOW);
    digitalWrite(dataPin, bitRead(databyte, i));
    digitalWrite(clockPin, HIGH);
  }
  digitalWrite(latchPin, HIGH);
}

void loop() {}

Połączenie dwóch rejestrów przesuwnych

Podłączenie 2 rejestrów przesuwnych 74HC595 z Arduino
Podłączenie 2 rejestrów przesuwnych 74HC595 z Arduino

Projekt na tinkercad

int latchPin = 5;
int clockPin = 6;
int dataPin = 4;
unsigned int leds1, leds2 = 0;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);

  leds1 = 0b10101010;
  leds2 = 0b00111100;
  updateShiftRegisterL(leds1);
  updateShiftRegisterL(leds2);
}

void updateShiftRegisterL(byte databyte) {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, databyte);
  digitalWrite(latchPin, HIGH);
}

void loop() {}

Przeczytaj: Tworzenie własnej biblioteki w Arduino – 74HC595

Przeczytaj: Wyświetlacz 7 segmentowy z Arduino i rejestrem przesuwnym 74HC595

Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *