Сдвиговый регистр 74HC595 на Arduino: расширение выходов
74HC595 — 8-битный сдвиговый регистр с защёлкой, позволяющий добавить 8 выходов Arduino всего за 3 пина. Каскадируя несколько микросхем, получаем десятки или сотни выходов без потери скорости. Идеально для управления светодиодами, реле, матрицами или индикаторами, когда пинов не хватает. Работает от 2–6В, совместим с 3.3В (ESP8266). Функция shiftOut упрощает программирование.
Возможности
Один 74HC595 — +8 выходов. Каскад — неограниченно. Три состояния выходов (HIGH/LOW/Z). Частота до 100 МГц. Защита от сброса и отключения. Управление реле, LED-матрицами, сегментными индикаторами. Низкое потребление.
Выводы 74HC595
- 16 VCC → +5В
- 8 GND → GND
- 10 MR → +5В (сброс, LOW = reset)
- 13 OE → GND (выход enable, LOW = активен)
- 14 DS (SER) → dataPin Arduino
- 11 SHCP → clockPin
- 12 STCP → latchPin
- 9 Q7′ → DS следующего (каскад)
- Q0–Q7 → нагрузка (через резистор)
Подключение к Arduino
- dataPin → любой (например D11)
- clockPin → любой (D13)
- latchPin → любой (D10)
Скетч Arduino
#include <Arduino.h>
const int latchPin = 10; // STCP
const int clockPin = 13; // SHCP
const int dataPin = 11; // DS
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
for (int i = 0; i < 256; i++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, i); // или LSBFIRST
digitalWrite(latchPin, HIGH);
delay(200);
}
}
В цикле от 0 до 255 последовательно отправляет байт на сдвиговый регистр с помощью shiftOut().
После отправки каждого байта обновляет выходы регистра (latchPin HIGH).
Задержка 200 мс позволяет наблюдать изменение состояния светодиодов или других подключённых устройств.
То есть код последовательно перебирает все возможные комбинации 8 бит на выходах регистра.
Каскад (2 регистра)
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, byte2); // дальний регистр
shiftOut(dataPin, clockPin, MSBFIRST, byte1); // ближний
digitalWrite(latchPin, HIGH);
shiftOut(dataPin, clockPin, MSBFIRST, byte2); — отправляем первый байт (byte2) на дальний регистр (тот, что дальше от Arduino).
shiftOut(dataPin, clockPin, MSBFIRST, byte1); — отправляем второй байт (byte1) на ближний регистр (тот, что непосредственно подключен к Arduino).
digitalWrite(latchPin, HIGH); — обновляем все выходы сразу, оба регистра синхронно показывают новые значения.
Таким образом можно управлять 16-ю светодиодами или другими устройствами, подключёнными к двум регистраторам, как одним единым блоком.
Как работает shiftOut
Защёлка LOW → передача 8 бит (clock импульсы) → защёлка HIGH → данные на Q0–Q7.
Заключение
74HC595 — дешёвый и эффективный способ расширить выходы Arduino. Один регистр — 8 пинов за 3, каскад — сотни. Управляйте матрицами, реле или индикаторами без потери скорости.
FAQ — 74HC595 на Arduino
Сколько регистров можно каскадировать?
Десятки без проблем. Q7' первого → DS второго, общие clock/latch.
MSBFIRST или LSBFIRST?
MSBFIRST — старший бит первым (Q7), LSBFIRST — младший (Q0).
Почему мерцают светодиоды?
Latch слишком долго LOW. Минимизируйте shiftOut между LOW/HIGH.
Работает ли с 3.3В (ESP8266)?
Да, 74HC595 от 2–6В, логика 3.3В совместима.
Можно управлять реле?
Да, через транзистор или драйвер — ток до 70 мА на выход.
Аналог для входов?
74HC165 — 8-битный сдвиговый регистр для входов.
Быстрее shiftOut?
Используйте SPI.transfer() — в 10 раз быстрее.