Урок 5. Сдвиговый регистр: 74HC595 и 8 ламп по трём проводам

В картинках

После этого урока в библиотеке 74HC595 — та самая микросхема, которой Arduino зажигает восемь светодиодов по трём проводам, — а на холсте восемь ламп, которые ты заполняешь бит за битом и показываешь разом.


5.1. Идея: биты по одному проводу

Сдвиговый регистр — восемь триггеров цепочкой: на каждом фронте SHCP каждый берёт значение соседа, а первый — бит с DS. Восемь фронтов — и в регистре целый байт, пришедший по одному проводу. Последний триггер выходит наружу ногой Q7S: её можно подать на DS следующей 74HC595 — и получить 16, 24, 100 выходов по тем же трём проводам.

74HC595сдвиговый регистр1Q116VCC2Q215Q03Q314DS4Q413OE5Q512STCP6Q611SHCP7Q710MR8GND9Q7S
74HC595: DS — данные, SHCP — сдвиг, STCP — защёлка (оба по фронту), MR — очистить сдвиговый регистр, OE — включить выходы (оба — активный 0), Q0 … Q7 — выходы, Q7S — выход для следующей 74HC595. Q0 — нога 15, остальные выходы подряд с ноги 1.

5.2. Идея: защёлка — показать разом

Пока байт вдвигается, его биты бегут через все восемь позиций. Если бы лампы стояли прямо на сдвиговом регистре, они бы мигали. Поэтому у 74HC595 есть второй ряд из восьми триггеров — защёлка: по фронту STCP она копирует весь байт разом, и лампы меняются один раз.

101100101Q70Q61Q51Q40Q30Q21Q10Q0сдвиговый регистр: бит входит справа и едет влевозащёлкаDSQ7Sфронт STCP —все 8 разом
Каждый фронт SHCP сдвигает регистр на одну клетку и кладёт в начало бит с DS. Восемь фронтов — и в регистре байт 1011 0010 (старший бит ушёл дальше всех, в Q7). Фронт 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
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
MR
DS
SHCP
VCC
s0
sn0
sn1
s1
VCC
SHCP
s0
MR
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
MR
s1
SHCP
VCC
s2
sn2
sn3
s3
VCC
SHCP
s2
MR
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
MR
s3
SHCP
VCC
s4
sn4
sn5
s5
VCC
SHCP
s4
MR
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
MR
s5
SHCP
VCC
s6
sn6
sn7
s7
VCC
SHCP
s6
MR
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
VCC
s0
STCP
VCC
r0
rn0
rn1
r1
VCC
STCP
s1
VCC
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
VCC
s2
STCP
VCC
r2
rn2
rn3
r3
VCC
STCP
s3
VCC
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
VCC
s4
STCP
VCC
r4
rn4
rn5
r5
VCC
STCP
s5
VCC
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
VCC
s6
STCP
VCC
r6
rn6
rn7
r7
VCC
STCP
s7
VCC
74HC041A
1Y
2A
3A
4A
5A
6A
OE
en
GND
GND
GND
GND
GND
Transmission gateA
Enable
B
r0
en
Q0
Transmission gateA
Enable
B
r1
en
Q1
Transmission gateA
Enable
B
r2
en
Q2
Transmission gateA
Enable
B
r3
en
Q3
Transmission gateA
Enable
B
r4
en
Q4
Transmission gateA
Enable
B
r5
en
Q5
Transmission gateA
Enable
B
r6
en
Q6
Transmission gateA
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: переворачиваем.

ДетальНогаМетка
74HC041A
1Y
2A
3A
4A
5A
6A
CLRB
nCLRB
GND
GND
GND
GND
GND
74HC595DS
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.

ДетальНогаМетка
74HC595DS
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. Проверка

  1. Нажми Очистить, потом Защёлка: все лампы гаснут.
  2. Задвинь байт 1011 0010 — старшим битом вперёд: для каждого бита поставь DATA (1, 0, 1, 1, 0, 0, 1, 0) и нажми Сдвиг. Лампы L0–L7 не меняются — данные пока в сдвиговом регистре. Лампа SO показывает бит, который выходит с конца.
  3. Нажми Защёлка: лампы разом показывают 1011 0010 (L7 слева).
  4. 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)

Не получается? Что-то не работает →