Урок 4. Дешифратор в корпусе: 74HC138 и бегущий огонь
В картинкахПосле этого урока в библиотеке 74HC138 — дешифратор 3 → 8, — а на холсте 16 ламп и бегущий огонь: счётчик выбирает номер, две 74HC138 гасят нужную лампу.
4.1. Идея: номер → один провод
Три провода A0 A1 A2 — это число 0–7. Дешифратор выбирает из восьми выходов один с этим номером. Так процессор выбирает микросхему памяти или устройство по адресу: старшие биты адреса — на дешифратор, его выходы — на входы «выбор» микросхем.
4.2. Идея: активный 0
Выбранный выход 74HC138 — 0, остальные — 1. В даташите над Y0…Y7 черта. Так удобнее: у памяти и устройств вход «выбор» тоже срабатывает от нуля, провод идёт напрямую. А у входов разрешения — по-разному: E1, E2 — от нуля, E3 — от единицы. Это сделано нарочно.
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 |
| 74HC04 | 1A 1Y 2A 2Y 3A 3Y 4Y 4A 5Y 5A 6A | A0 nA0 A1 nA1 A2 nA2 nE1 E1 nE2 E2 GND |
| 74HC08 | 1A 1B 1Y 2A 2B 2Y 3Y 3A 3B 4Y 4A 4B | nA1 nA0 t0 nA1 A0 t1 t2 A1 nA0 t3 A1 A0 |
| 74HC08 | 1A 1B 1Y 2A 2B 2Y 3Y 3A 3B 4Y 4A 4B | nE1 nE2 g g E3 G G0 G nA2 G1 G A2 |
| 74HC00 | 1A 1B 1Y 2A 2B 2Y 3Y 3A 3B 4Y 4A 4B | G0 t0 Y0 G0 t1 Y1 Y2 G0 t2 Y3 G0 t3 |
| 74HC00 | 1A 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 |
| 74HC04 | 1A 1Y 2A 3A 4A 5A 6A | CLR nCLR GND GND GND GND GND |
Шаг 3. Счётчик 0–15
Две 74HC74 — тот же делитель, что в уроке 2: Q3 Q2 Q1 Q0 считают 0–15.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | nCLR Q0N CLK VCC Q0 Q0N Q1N Q1 VCC Q0N Q1N nCLR |
| 74HC74 | 1RD 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 без единого лишнего вентиля.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC138 | A0 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 |
| 74HC138 | A0 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. Проверка
Clock—2Hz. Нажми Сброс: горят все лампы, кромеL0.- Тёмная лампа бежит:
L1,L2…L15, потом сноваL0— по одной на каждый фронтCLK. - На
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)Не получается? Что-то не работает →