← До всіх проєктів
Основи Початковий

Зсувний регістр 74HC595: 8 світлодіодів від трьох виводів

Бракує виводів? Мікросхема за кілька гривень перетворює три GPIO на вісім виходів, а два чипи в ланцюжку — на шістнадцять. Розбираємося, як працюють shiftOut(), SHCP і STCP, навіщо MR і OE і чому вісім світлодіодів по 20 мА спалять регістр.

Складність
Початковий
Час
45 min
Категорія
Основи
Оновлено

Про проєкт

74HC595 — «послідовно-паралельний» регістр: мікроконтролер передає байт по одному біту, а чип виставляє всі вісім бітів одночасно на виводи Q0–Q7. Так керують світлодіодними шкалами, семисегментними індикаторами і реле, коли вільних GPIO мало — особливо на Arduino Uno чи ESP32-C3.

Що потрібно

  • ESP32 DevKit (або Arduino)
  • Мікросхема 74HC595 (DIP-16)
  • Світлодіодна шкала на 10 сегментів або 8 світлодіодів
  • 8 резисторів 330–470 Ом
  • Макетна плата

Виводи

Ключ (виїмка) на корпусі — зліва. Нижній ряд, виводи 1–8: Q1–Q7, GND. Верхній ряд справа наліво, 9–16: Q7', MR, SHCP, STCP, OE, DS, Q0, VCC.

74HC595 Призначення ESP32
VCC (16) живлення 2–6 В 3V3
GND (8) земля GND
DS (14) дані GPIO23
SHCP (11) тактування зсуву GPIO18
STCP (12) «засувка» (latch) GPIO5
MR (10) скидання, активний LOW 3V3
OE (13) дозвіл виходів, активний LOW GND
Q0–Q7 виходи через резистори на світлодіоди

Як це працює

Усередині два 8-бітні регістри:

  1. Зсувний. На кожен фронт SHCP (LOW→HIGH) біти зсуваються на одну позицію, а в перший записується рівень DS.
  2. Вихідний (засувка). На фронт STCP увесь зсувний регістр копіюється на виходи Q0–Q7 одночасно.

Тому поки ви «проштовхуєте» 8 бітів, світлодіоди не блимають проміжними станами — все змінюється в момент імпульсу на STCP. Функція shiftOut(data, clock, MSBFIRST, value) робить 8 циклів «виставити DS → імпульс SHCP».

MR і OE не можна залишати в повітрі: «плаваючий» MR випадково скидає регістр, а OE вимикає виходи. Симулятор попередить про обидва. Замість GND на OE можна подати ШІМ — тоді яскравість усіх світлодіодів регулюється одним виводом (пам'ятайте, що OE інвертований).

Струм — головна пастка

Вихід 74HC595 — не GPIO потужного драйвера: до 35 мА на вивід і лише 70 мА на весь чип через VCC і GND. Вісім світлодіодів по 20 мА — це 160 мА, і регістр перегрівається. Беріть резистори 330–470 Ом (3–8 мА на світлодіод цілком достатньо для індикації), а для потужного навантаження — ULN2803 або TPIC6B595.

Код

// 8 світлодіодів від трьох виводів: зсувний регістр 74HC595
const int DATA_PIN = 23;    // DS (14)
const int CLOCK_PIN = 18;   // SHCP (11)
const int LATCH_PIN = 5;    // STCP (12)

void writeLeds(byte pattern) {
  digitalWrite(LATCH_PIN, LOW);
  shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, pattern);
  digitalWrite(LATCH_PIN, HIGH);   // виходи змінюються тут, усі разом
}

void setup() {
  pinMode(DATA_PIN, OUTPUT);
  pinMode(CLOCK_PIN, OUTPUT);
  pinMode(LATCH_PIN, OUTPUT);
}

void loop() {
  // вогник біжить туди й назад
  for (int i = 0; i < 8; i++) { writeLeds(1 << i); delay(80); }
  for (int i = 6; i > 0; i--) { writeLeds(1 << i); delay(80); }
}

Ланцюжок регістрів

Вихід Q7' (вивід 9) — це біт, що «випадає» зі зсувного регістра. З'єднайте його з DS другого 74HC595, а SHCP і STCP обох чипів — разом. Тепер два виклики shiftOut() підряд передають 16 бітів: перший байт «проходить» у другий чип, другий залишається в першому. Так само можна зібрати ланцюжок із 3, 4 і більше регістрів — виводів мікроконтролера однаково три.

Ідеї

  • Двійковий лічильник: writeLeds(counter++) — наочний спосіб показати, як число виглядає в бітах.
  • Шкала рівня: writeLeds((1 << n) - 1) запалює n сегментів — наприклад, для рівня з потенціометра.
  • Швидше за shiftOut(): на ESP32 можна під'єднати DS до MOSI, а SHCP — до SCK і передавати байт через SPI.transfer().