здвиговий регістр 74HC595

матеріали взято з ресурсу http://cxem.net

Здвиговий регістр - це набір послідовно з'єднаних тригерів (зазвичай їх 8 штук). На відміну від стандартних регістрів, здвигові підтримують функцію здвигу вправо і вліво. (тобто переписування даних з кожного попереднього тригера на наступний за рахунком).

Функціонал і призначення у здвигових регістрів досить великий. Одне з них відмінний спосіб множити виходи у Arduino: займаємо 3, отримуємо 8.

Напевно найпопулярніша мікросхема, що представляє собою такий регістр - це 74HC595.

  • Працює на інтерфейсі SPI: ноги DS, ST_CP, SH_CP - це шини керування. Відповідно: шина даних (MOSI), засувка (SS) і тактова лінія (SCK). Підключаємо на будь-які 3 контакти Arduino (бібліотека SPI в коді не буде задіяно).

  • Контакти Q0, Q1, ..., Q7 - це виходи регістра (розряди). Для того, щоб стежити за станом кожного з них, під'єднаємо на кожен контакт по світлодіоду (з послідовно з'єднаним резистором. Номінал від 150 до 330 Ом)

  • VCC і GND - це живлення. Підключаємо до + 5v і GND.

  • вихід Q7 не чіпаємо (призначений для послідовного з'єднання таких регістрів)

  • MR - це скидання. Підключаємо до + 5v (скидання не активне).

  • OE приєднуємо до землі (підключаємо до контакту GND).

Обладнання:

  • 74HC595;

  • світлодіоди;

  • резистори 220 Ом;

  • bredboard;

  • Arduino uno;

  • конектори

Схема з'єднання:

Скетч Arduino:

// Пін підключений до SH_CP входу 74HC595

int clockPin = 13;

// Пін підключений до ST_CP входу 74HC595

int latchPin = 10;

// Пін підключений до DS входу 74HC595

int dataPin = 12;

void setup () {

// встановлюємо режим OUTPUT

pinMode (latchPin, OUTPUT);

pinMode (clockPin, OUTPUT);

pinMode (dataPin, OUTPUT);

}

void loop () {

// запалюємо по одному світлодіоди по порядку

for (int numberPin = 0; numberPin <8; numberPin ++) {

setShiftPin (numberPin);

delay (500);

}

// запалюємо всі світлодіоди

digitalWrite (latchPin, LOW);

shiftOut (dataPin, clockPin, MSBFIRST, 255);

digitalWrite (latchPin, HIGH);

delay (1000);

// запалюємо світлодіоди через один

digitalWrite (latchPin, LOW);

shiftOut (dataPin, clockPin, MSBFIRST, B10101010);

digitalWrite (latchPin, HIGH);

delay (1000);

// вимикаємо все світлодіоди

digitalWrite (latchPin, LOW);

shiftOut (dataPin, clockPin, MSBFIRST, 0);

digitalWrite (latchPin, HIGH);

delay (1000);

}

void setShiftPin (int numPin) {

int arrayPins [] = {1, 2, 4, 8, 16, 32, 64, 128};

digitalWrite (latchPin, LOW);

shiftOut (dataPin, clockPin, MSBFIRST, arrayPins [numPin]);

digitalWrite (latchPin, HIGH);

}