Урок 5. Сдвиговый регистр: 74HC595 и 8 ламп по трём проводам
В картинкахПосле этого урока в библиотеке 74HC595 — та самая микросхема, которой Arduino зажигает восемь светодиодов по трём проводам, — а на холсте восемь ламп, которые ты заполняешь бит за битом и показываешь разом.
5.1. Идея: биты по одному проводу
Сдвиговый регистр — восемь триггеров цепочкой: на каждом фронте SHCP каждый берёт значение соседа, а первый — бит с DS. Восемь фронтов — и в регистре целый байт, пришедший по одному проводу. Последний триггер выходит наружу ногой Q7S: её можно подать на DS следующей 74HC595 — и получить 16, 24, 100 выходов по тем же трём проводам.
5.2. Идея: защёлка — показать разом
Пока байт вдвигается, его биты бегут через все восемь позиций. Если бы лампы стояли прямо на сдвиговом регистре, они бы мигали. Поэтому у 74HC595 есть второй ряд из восьми триггеров — защёлка: по фронту STCP она копирует весь байт разом, и лампы меняются один раз.
5.3. Идея: третье состояние
Выход обычного вентиля — всегда 0 или 1. У 74HC595 выход можно отключить (OE = 1): провод становится ничьим. Это нужно, когда к одним проводам подключено несколько микросхем — говорит только одна. Отключённый провод сам ни 0, ни 1, поэтому на плату ставят резистор к земле. Внутри ключ — Transmission gate: при OE = 0 он соединяет защёлку с ногой, при OE = 1 — размыкает.
5.4. Сборка
Тот же проект, что в уроке 4: в библиотеке 74HC04 и 74HC74.
Шаг 1. Чип 74HC595 — сдвиговый регистр с защёлкой
Ноги корпуса по даташиту: 1 Q1, 2 Q2, 3 Q3, 4 Q4, 5 Q5, 6 Q6, 7 Q7, 9 Q7S, 10 MR, 11 SHCP, 12 STCP, 13 OE, 14 DS, 15 Q0; 8 — GND, 16 — VCC. DS — данные, SHCP — сдвиг (фронт), STCP — защёлка (фронт), MR — очистка сдвигового регистра (активный 0), OE — включить выходы (активный 0), Q7S — последовательный выход (для цепочки 74HC595). Внутри: 16 триггеров — восемь 74HC74 (8 на сдвиг, 8 на защёлку), 74HC04 и восемь ключей Transmission gate — третье состояние: при OE = 1 выходы отключаются от защёлки.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | MR |
| Порт входа | выход | SHCP |
| Порт входа | выход | STCP |
| Порт входа | выход | OE |
| Порт входа | выход | DS |
| Порт выхода | вход | Q1 |
| Порт выхода | вход | Q2 |
| Порт выхода | вход | Q3 |
| Порт выхода | вход | Q4 |
| Порт выхода | вход | Q5 |
| Порт выхода | вход | Q6 |
| Порт выхода | вход | Q7 |
| Порт выхода | вход | Q0 |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | MR DS SHCP VCC s0 sn0 sn1 s1 VCC SHCP s0 MR |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | MR s1 SHCP VCC s2 sn2 sn3 s3 VCC SHCP s2 MR |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | MR s3 SHCP VCC s4 sn4 sn5 s5 VCC SHCP s4 MR |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | MR s5 SHCP VCC s6 sn6 sn7 s7 VCC SHCP s6 MR |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | VCC s0 STCP VCC r0 rn0 rn1 r1 VCC STCP s1 VCC |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | VCC s2 STCP VCC r2 rn2 rn3 r3 VCC STCP s3 VCC |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | VCC s4 STCP VCC r4 rn4 rn5 r5 VCC STCP s5 VCC |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | VCC s6 STCP VCC r6 rn6 rn7 r7 VCC STCP s7 VCC |
| 74HC04 | 1A 1Y 2A 3A 4A 5A 6A | OE en GND GND GND GND GND |
| Transmission gate | A Enable B | r0 en Q0 |
| Transmission gate | A Enable B | r1 en Q1 |
| Transmission gate | A Enable B | r2 en Q2 |
| Transmission gate | A Enable B | r3 en Q3 |
| Transmission gate | A Enable B | r4 en Q4 |
| Transmission gate | A Enable B | r5 en Q5 |
| Transmission gate | A Enable B | r6 en Q6 |
| Transmission gate | A Enable B | r7 en Q7 |
Ctrl+G → имя 74HC595. Ноги: входы MR, SHCP, STCP, OE, DS; выходы Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q0.
Шаг 2. Три провода и кнопки
Тумблер DATA — бит, который задвигаем. Кнопка «Сдвиг» — SH, «Защёлка» — ST, «Очистить» — CLRB. Тумблер OFF — выключить выходы (OE).
| Деталь | Нога | Метка |
|---|---|---|
| Input (тумблер) | выход | DATA |
| Button «Сдвиг» | выход | SH |
| Button «Защёлка» | выход | ST |
| Button «Очистить» | выход | CLRB |
| Input (тумблер) | выход | OFF |
Шаг 3. Очистка через 74HC04
MR у 74HC595 — активный 0, кнопка даёт 1: переворачиваем.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC04 | 1A 1Y 2A 3A 4A 5A 6A | CLRB nCLRB GND GND GND GND GND |
| 74HC595 | DS SHCP STCP MR OE Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q7S | DATA SH ST nCLRB OFF L0 L1 L2 L3 L4 L5 L6 L7 SO |
Шаг 4. 74HC595
Выходы Q0–Q7 — на лампы L0–L7, Q7S — на лампу SO.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC595 | DS SHCP STCP MR OE Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q7S | DATA SH ST nCLRB OFF L0 L1 L2 L3 L4 L5 L6 L7 SO |
Шаг 5. Резисторы к земле
Когда выходы выключены (OE = 1), провод от 74HC595 ни к чему не подключён — третье состояние. Сам он ни 0, ни 1, поэтому на настоящей плате ставят резистор к земле: он тянет отключённый провод в 0. Resistor из палитры — между L<n> и GND.
| Деталь | Нога | Метка |
|---|---|---|
| Resistor | конец 1 конец 2 | L0 GND |
| Resistor | конец 1 конец 2 | L1 GND |
| Resistor | конец 1 конец 2 | L2 GND |
| Resistor | конец 1 конец 2 | L3 GND |
| Resistor | конец 1 конец 2 | L4 GND |
| Resistor | конец 1 конец 2 | L5 GND |
| Resistor | конец 1 конец 2 | L6 GND |
| Resistor | конец 1 конец 2 | L7 GND |
Шаг 6. Лампы
Восемь ламп в ряд, L7 слева — как байт: старший бит слева.
| Деталь | Нога | Метка |
|---|---|---|
| LED | вход | L0 |
| LED | вход | L1 |
| LED | вход | L2 |
| LED | вход | L3 |
| LED | вход | L4 |
| LED | вход | L5 |
| LED | вход | L6 |
| LED | вход | L7 |
| LED | вход | SO |
5.5. Проверка
- Нажми Очистить, потом Защёлка: все лампы гаснут.
- Задвинь байт
1011 0010— старшим битом вперёд: для каждого бита поставьDATA(1, 0, 1, 1, 0, 0, 1, 0) и нажми Сдвиг. ЛампыL0–L7не меняются — данные пока в сдвиговом регистре. ЛампаSOпоказывает бит, который выходит с конца. - Нажми Защёлка: лампы разом показывают
1011 0010(L7слева). OFF= 1 — все лампы гаснут: выходы отключены, резисторы тянут провода в 0.OFF= 0 — снова1011 0010.
Почему так удобно: байт вдвигается по одному проводу, а лампы меняются только по «Защёлке» — все разом, без мигания. Три провода — DATA, «Сдвиг», «Защёлка» — вместо восьми; так Arduino управляет восемью светодиодами, а цепочка 74HC595 через Q7S — хоть сотней.
Вставка урока 5 (Cmd+I)
Поверх урока 4.
# Урок 5 — 74HC595: сдвиговый регистр с защёлкой; 8 ламп по трём проводам, как у Arduino.# Вставка: Cmd+I поверх урока 4 (нужны 74HC04, 74HC74). # 74HC595 — 8-бит сдвиговый регистр (DS → по фронту SHCP) + 8-бит защёлка (по фронту STCP) + выходы с третьим состоянием (OE — активный 0); MR — очистка сдвигового (активный 0); Q7S — последовательный выход. Ноги: 1 Q1, 2 Q2, 3 Q3, 4 Q4, 5 Q5, 6 Q6, 7 Q7, 9 Q7S, 10 MR, 11 SHCP, 12 STCP, 13 OE, 14 DS, 15 Q0chip 74HC595 { portIn(MR) portIn(SHCP) portIn(STCP) portIn(OE) portIn(DS) portOut(Q1) portOut(Q2) portOut(Q3) portOut(Q4) portOut(Q5) portOut(Q6) portOut(Q7) portOut(Q0) portOut{name=Q7S}(s7) # сдвиговый регистр: 8 триггеров на четырёх 74HC74, общий такт SHCP; каждый берёт значение предыдущего, первый — DS 74HC74(1RD=MR, 1D=DS, 1CP=SHCP, 1SD=VCC, 1Q=s0, 1QN=sn0, 2QN=sn1, 2Q=s1, 2SD=VCC, 2CP=SHCP, 2D=s0, 2RD=MR) 74HC74(1RD=MR, 1D=s1, 1CP=SHCP, 1SD=VCC, 1Q=s2, 1QN=sn2, 2QN=sn3, 2Q=s3, 2SD=VCC, 2CP=SHCP, 2D=s2, 2RD=MR) 74HC74(1RD=MR, 1D=s3, 1CP=SHCP, 1SD=VCC, 1Q=s4, 1QN=sn4, 2QN=sn5, 2Q=s5, 2SD=VCC, 2CP=SHCP, 2D=s4, 2RD=MR) 74HC74(1RD=MR, 1D=s5, 1CP=SHCP, 1SD=VCC, 1Q=s6, 1QN=sn6, 2QN=sn7, 2Q=s7, 2SD=VCC, 2CP=SHCP, 2D=s6, 2RD=MR) # защёлка: ещё 8 триггеров, такт STCP — копирует сдвиговый регистр разом 74HC74(1RD=VCC, 1D=s0, 1CP=STCP, 1SD=VCC, 1Q=r0, 1QN=rn0, 2QN=rn1, 2Q=r1, 2SD=VCC, 2CP=STCP, 2D=s1, 2RD=VCC) 74HC74(1RD=VCC, 1D=s2, 1CP=STCP, 1SD=VCC, 1Q=r2, 1QN=rn2, 2QN=rn3, 2Q=r3, 2SD=VCC, 2CP=STCP, 2D=s3, 2RD=VCC) 74HC74(1RD=VCC, 1D=s4, 1CP=STCP, 1SD=VCC, 1Q=r4, 1QN=rn4, 2QN=rn5, 2Q=r5, 2SD=VCC, 2CP=STCP, 2D=s5, 2RD=VCC) 74HC74(1RD=VCC, 1D=s6, 1CP=STCP, 1SD=VCC, 1Q=r6, 1QN=rn6, 2QN=rn7, 2Q=r7, 2SD=VCC, 2CP=STCP, 2D=s7, 2RD=VCC) # выходы: третье состояние — ключ tgate, открыт, пока OE = 0 74HC04(1A=OE, 1Y=en, 2A=GND, 3A=GND, 4A=GND, 5A=GND, 6A=GND) tgate(r0, en, Q0) tgate(r1, en, Q1) tgate(r2, en, Q2) tgate(r3, en, Q3) tgate(r4, en, Q4) tgate(r5, en, Q5) tgate(r6, en, Q6) tgate(r7, en, Q7)} # ---------- 8 ламп по трём проводам ----------input(DATA)button{label="Сдвиг"}(SH)button{label="Защёлка"}(ST)button{label="Очистить"}(CLRB)input(OFF)# очистка у 74HC595 — активный 0: переворот через 74HC0474HC04(1A=CLRB, 1Y=nCLRB, 2A=GND, 3A=GND, 4A=GND, 5A=GND, 6A=GND)74HC595(DS=DATA, SHCP=SH, STCP=ST, MR=nCLRB, OE=OFF, Q0=L0, Q1=L1, Q2=L2, Q3=L3, Q4=L4, Q5=L5, Q6=L6, Q7=L7, Q7S=SO)# резисторы к земле: когда выходы отключены (OE = 1), провод уходит в 0 — лампы гаснутresistor(L0, GND)resistor(L1, GND)resistor(L2, GND)resistor(L3, GND)resistor(L4, GND)resistor(L5, GND)resistor(L6, GND)resistor(L7, GND)# 8 ламп и лампа «последовательный выход»led(L0)led(L1)led(L2)led(L3)led(L4)led(L5)led(L6)led(L7)led(SO)Не получается? Что-то не работает →