Урок 4. Дешифратор в корпусе: 74HC138 и бегущий огонь

В картинках

После этого урока в библиотеке 74HC138 — дешифратор 3 → 8, — а на холсте 16 ламп и бегущий огонь: счётчик выбирает номер, две 74HC138 гасят нужную лампу.


4.1. Идея: номер → один провод

Три провода A0 A1 A2 — это число 0–7. Дешифратор выбирает из восьми выходов один с этим номером. Так процессор выбирает микросхему памяти или устройство по адресу: старшие биты адреса — на дешифратор, его выходы — на входы «выбор» микросхем.

A2 = 1A1 = 0A0 = 174HC138101 = 5Y0 = 1Y1 = 1Y2 = 1Y3 = 1Y4 = 1Y5 = 0← выбранY6 = 1Y7 = 1
Дешифратор: на входах номер 5 (101) — ноль только на Y5, на остальных семи выходах 1. Номер выбирает провод: так процессор выбирает, к какой микросхеме памяти обратиться.

4.2. Идея: активный 0

Выбранный выход 74HC138 — 0, остальные — 1. В даташите над Y0…Y7 черта. Так удобнее: у памяти и устройств вход «выбор» тоже срабатывает от нуля, провод идёт напрямую. А у входов разрешения — по-разному: E1, E2 — от нуля, E3 — от единицы. Это сделано нарочно.

74HC138дешифратор 3 → 81A016VCC2A115Y03A214Y14E113Y25E212Y36E311Y47Y710Y58GND9Y6
74HC138: номер на A2 A1 A0 — ноль на одном из Y0 … Y7 (активный 0). Работает, только когда E1 = 0, E2 = 0 и E3 = 1; иначе все выходы 1. Обрати внимание: Y7 — нога 7, а Y0 — нога 15.

4.3. Идея: 4 → 16 из двух 3 → 8

Старший бит номера подаём на E1 одной микросхемы и на E3 другой: при 0 работает первая, при 1 — вторая. Никаких лишних вентилей — для этого у 74HC138 три входа разрешения. Так собирают дешифраторы на 32 и 64 выхода.

4.4. Сборка

Тот же проект, что в уроке 3: в библиотеке вентили и микросхемы уроков 1–3.

Шаг 1. Чип 74HC138 — дешифратор 3 → 8

Ноги корпуса по даташиту: 1 A0, 2 A1, 3 A2, 4 E1, 5 E2, 6 E3, 7 Y7, 9 Y6, 10 Y5, 11 Y4, 12 Y3, 13 Y2, 14 Y1, 15 Y0; 8 — GND, 16 — VCC. A0 A1 A2 — номер (0–7), выход с этим номером становится 0, остальные — 1 (выходы — активный 0). Разрешение: E1, E2 — активный 0, E3 — активная 1; не разрешено — все выходы 1. Внутри — корпуса из уроков 1–2: 74HC04 (перевороты), две 74HC08 (сочетания и разрешение), две 74HC00 (выходы).

ДетальНогаМетка
Порт входавыходA0
Порт входавыходA1
Порт входавыходA2
Порт входавыходE1
Порт входавыходE2
Порт входавыходE3
Порт выходавходY7
Порт выходавходY6
Порт выходавходY5
Порт выходавходY4
Порт выходавходY3
Порт выходавходY2
Порт выходавходY1
Порт выходавходY0
74HC041A
1Y
2A
2Y
3A
3Y
4Y
4A
5Y
5A
6A
A0
nA0
A1
nA1
A2
nA2
nE1
E1
nE2
E2
GND
74HC081A
1B
1Y
2A
2B
2Y
3Y
3A
3B
4Y
4A
4B
nA1
nA0
t0
nA1
A0
t1
t2
A1
nA0
t3
A1
A0
74HC081A
1B
1Y
2A
2B
2Y
3Y
3A
3B
4Y
4A
4B
nE1
nE2
g
g
E3
G
G0
G
nA2
G1
G
A2
74HC001A
1B
1Y
2A
2B
2Y
3Y
3A
3B
4Y
4A
4B
G0
t0
Y0
G0
t1
Y1
Y2
G0
t2
Y3
G0
t3
74HC001A
1B
1Y
2A
2B
2Y
3Y
3A
3B
4Y
4A
4B
G1
t0
Y4
G1
t1
Y5
Y6
G1
t2
Y7
G1
t3

Ctrl+G → имя 74HC138. Ноги: входы A0, A1, A2, E1, E2, E3; выходы Y7, Y6, Y5, Y4, Y3, Y2, Y1, Y0.

Шаг 2. Генератор и сброс

Clock — 2Hz. Кнопка «Сброс» — CLR, через 74HC04: сброс у 74HC74 — от нуля.

ДетальНогаМетка
ClockвыходCLK
Button «Сброс»выходCLR
74HC041A
1Y
2A
3A
4A
5A
6A
CLR
nCLR
GND
GND
GND
GND
GND

Шаг 3. Счётчик 0–15

Две 74HC74 — тот же делитель, что в уроке 2: Q3 Q2 Q1 Q0 считают 0–15.

ДетальНогаМетка
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
nCLR
Q0N
CLK
VCC
Q0
Q0N
Q1N
Q1
VCC
Q0N
Q1N
nCLR
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
nCLR
Q2N
Q1N
VCC
Q2
Q2N
Q3N
Q3
VCC
Q2N
Q3N
nCLR

Шаг 4. Две 74HC138

Три младших бита — номер внутри восьмёрки, на A0 A1 A2 обеих. Старший бит Q3 выбирает, какая работает: у первой он на E1 (работает при 0), у второй — на E3 (работает при 1). Входы разрешения — для того и сделаны: из двух дешифраторов 3 → 8 получается 4 → 16 без единого лишнего вентиля.

ДетальНогаМетка
74HC138A0
A1
A2
E1
E2
E3
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
Q0
Q1
Q2
Q3
GND
VCC
L0
L1
L2
L3
L4
L5
L6
L7
74HC138A0
A1
A2
E1
E2
E3
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
Q0
Q1
Q2
GND
GND
Q3
L8
L9
L10
L11
L12
L13
L14
L15

Шаг 5. 16 ламп

Лампы L0–L15 — прямо на выходы. Поставь их рядом, по порядку.

ДетальНогаМетка
LEDвходL0
LEDвходL1
LEDвходL2
LEDвходL3
LEDвходL4
LEDвходL5
LEDвходL6
LEDвходL7
LEDвходL8
LEDвходL9
LEDвходL10
LEDвходL11
LEDвходL12
LEDвходL13
LEDвходL14
LEDвходL15

4.5. Проверка

  1. Clock — 2Hz. Нажми Сброс: горят все лампы, кроме L0.
  2. Тёмная лампа бежит: L1, L2 … L15, потом снова L0 — по одной на каждый фронт CLK.
  3. На L7 → L8 тень перескакивает на вторую 74HC138: Q3 стал 1.

Почему бежит тень, а не огонь: выход 74HC138 — активный 0, выбранный выход гаснет. На настоящей плате светодиод подключают к VCC через резистор — и он горит как раз от нуля. Там бежал бы огонёк.

Что видноЧто это
тёмная лампавыбранный выход 74HC138 = 0
L0–L7первая 74HC138 — пока Q3 = 0
L8–L15вторая 74HC138 — когда Q3 = 1

Вставка урока 4 (Cmd+I)

Поверх урока 3.

# Урок 4 — 74HC138: дешифратор 3 → 8; бегущий огонь на 16 ламп (две 74HC138, счётчик на двух 74HC74).# Вставка: Cmd+I поверх урока 3 (нужны 74HC00, 74HC04, 74HC08, 74HC74). # 74HC138 — дешифратор 3 → 8: выход Yn = 0 у выбранного n (активный 0); E1, E2 — разрешение активный 0, E3 — активная 1. Ноги: 1 A0, 2 A1, 3 A2, 4 E1, 5 E2, 6 E3, 7 Y7, 9 Y6, 10 Y5, 11 Y4, 12 Y3, 13 Y2, 14 Y1, 15 Y0chip 74HC138 {  portIn(A0)  portIn(A1)  portIn(A2)  portIn(E1)  portIn(E2)  portIn(E3)  portOut(Y7)  portOut(Y6)  portOut(Y5)  portOut(Y4)  portOut(Y3)  portOut(Y2)  portOut(Y1)  portOut(Y0)  # перевёрнутые адреса и разрешения — одна 74HC04 (6-й инвертор свободен)  74HC04(1A=A0, 1Y=nA0, 2A=A1, 2Y=nA1, 3A=A2, 3Y=nA2, 4Y=nE1, 4A=E1, 5Y=nE2, 5A=E2, 6A=GND)  # четыре сочетания A1 A0 — 74HC08  74HC08(1A=nA1, 1B=nA0, 1Y=t0, 2A=nA1, 2B=A0, 2Y=t1, 3Y=t2, 3A=A1, 3B=nA0, 4Y=t3, 4A=A1, 4B=A0)  # разрешение G = НЕ E1 И НЕ E2 И E3; половины: G0 — A2 = 0, G1 — A2 = 1 — вторая 74HC08  74HC08(1A=nE1, 1B=nE2, 1Y=g, 2A=g, 2B=E3, 2Y=G, 3Y=G0, 3A=G, 3B=nA2, 4Y=G1, 4A=G, 4B=A2)  # выходы: И-НЕ половины и сочетания — две 74HC00  74HC00(1A=G0, 1B=t0, 1Y=Y0, 2A=G0, 2B=t1, 2Y=Y1, 3Y=Y2, 3A=G0, 3B=t2, 4Y=Y3, 4A=G0, 4B=t3)  74HC00(1A=G1, 1B=t0, 1Y=Y4, 2A=G1, 2B=t1, 2Y=Y5, 3Y=Y6, 3A=G1, 3B=t2, 4Y=Y7, 4A=G1, 4B=t3)} # ---------- бегущий огонь ----------clock(CLK)button{label="Сброс"}(CLR)# сброс триггеров — активный 0: переворот через 74HC0474HC04(1A=CLR, 1Y=nCLR, 2A=GND, 3A=GND, 4A=GND, 5A=GND, 6A=GND)# счётчик 0–15 на двух 74HC74 (как делитель урока 2)74HC74(1RD=nCLR, 1D=Q0N, 1CP=CLK, 1SD=VCC, 1Q=Q0, 1QN=Q0N, 2QN=Q1N, 2Q=Q1, 2SD=VCC, 2CP=Q0N, 2D=Q1N, 2RD=nCLR)74HC74(1RD=nCLR, 1D=Q2N, 1CP=Q1N, 1SD=VCC, 1Q=Q2, 1QN=Q2N, 2QN=Q3N, 2Q=Q3, 2SD=VCC, 2CP=Q2N, 2D=Q3N, 2RD=nCLR)# две 74HC138: младшая работает при Q3 = 0 (E1 = Q3), старшая — при Q3 = 1 (E3 = Q3)74HC138(A0=Q0, A1=Q1, A2=Q2, E1=Q3, E2=GND, E3=VCC, Y0=L0, Y1=L1, Y2=L2, Y3=L3, Y4=L4, Y5=L5, Y6=L6, Y7=L7)74HC138(A0=Q0, A1=Q1, A2=Q2, E1=GND, E2=GND, E3=Q3, Y0=L8, Y1=L9, Y2=L10, Y3=L11, Y4=L12, Y5=L13, Y6=L14, Y7=L15)# 16 ламп: горят все, кроме выбранной — у 74HC138 выход активный 0led(L0)led(L1)led(L2)led(L3)led(L4)led(L5)led(L6)led(L7)led(L8)led(L9)led(L10)led(L11)led(L12)led(L13)led(L14)led(L15)

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