Урок 3. Счётчик в корпусе: 74HC390 и секундомер
В картинкахПосле этого урока в библиотеке 74HC86 (четыре XOR) и 74HC390 — два десятичных счётчика в одном корпусе, — а на холсте секундомер: тумблер «старт/стоп», кнопка «Сброс» и две цифры, 00–99.
3.1. Идея: ÷2 и ÷5 — вместе ÷10
Десятичный счётчик в 74HC390 разрезан на две части:
- ступень ÷2 — один триггер (
Q0), тактCP0; - ступень ÷5 — три триггера (
Q1 Q2 Q3), тактCP1, считают 0, 1, 2, 3, 4, 0.
Соедини Q0 с CP1 — получится 0–9 в двоичном коде (Q3 Q2 Q1 Q0). Части разрезаны нарочно: из той же микросхемы можно сделать ÷2, ÷5 или ÷10, смотря как соединить.
3.2. Идея: такт по спаду
Триггеры 74HC390 срабатывают, когда такт падает из 1 в 0 (в даташите над CP0 и CP1 — черта). Это удобно для цепочки: старший разряд Q3 падает ровно тогда, когда счётчик переходит 9 → 0, — этим спадом и тактируется следующий счётчик, десятки. Внутри мы делаем спад из фронта: такт переворачивает 74HC04, а дальше — фронт для 74HC74.
И вообще внутри 74HC390 — только микросхемы из уроков 1–2: две 74HC74 на счётчик, одна 74HC04 на шесть переворотов, 74HC02, 74HC08 и новая 74HC86 (четыре XOR) — для ступени ÷5. Собираем из корпусов, как на настоящей плате.
3.3. Идея: сброс от единицы
У 74HC74 сброс был от нуля, у 74HC390 MR — от единицы. Так бывает: каждая микросхема — по своему даташиту. Поэтому кнопку сброса здесь подключаем напрямую, без инвертора.
3.4. Сборка
Тот же проект, что в уроке 2: в библиотеке вентили, 74HC00–74HC32 и 74HC74.
Шаг 1. Чип 74HC86 — 4 × исключающее ИЛИ (XOR)
Ноги корпуса по даташиту: 1 1A, 2 1B, 3 1Y, 4 2A, 5 2B, 6 2Y, 8 3Y, 9 3A, 10 3B, 11 4Y, 12 4A, 13 4B; 7 — GND, 14 — VCC. Как 74HC00, только внутри четыре XOR: выход 1, когда входы разные. Понадобится внутри 74HC390.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | 1A |
| Порт входа | выход | 1B |
| Порт входа | выход | 2A |
| Порт входа | выход | 2B |
| Порт входа | выход | 3A |
| Порт входа | выход | 3B |
| Порт входа | выход | 4A |
| Порт входа | выход | 4B |
| Порт выхода | вход | 1Y |
| Порт выхода | вход | 2Y |
| Порт выхода | вход | 3Y |
| Порт выхода | вход | 4Y |
| XOR | I0 I1 O0 | 1A 1B 1Y |
| XOR | I0 I1 O0 | 2A 2B 2Y |
| XOR | I0 I1 O0 | 3A 3B 3Y |
| XOR | I0 I1 O0 | 4A 4B 4Y |
Ctrl+G → имя 74HC86. Ноги: входы 1A, 1B, 2A, 2B, 3A, 3B, 4A, 4B; выходы 1Y, 2Y, 3Y, 4Y.
Шаг 2. Чип 74HC390 — 2 × десятичный счётчик (÷2 и ÷5)
Ноги корпуса по даташиту: 1 1CP0, 2 1MR, 3 1Q0, 4 1CP1, 5 1Q1, 6 1Q2, 7 1Q3, 9 2Q3, 10 2Q2, 11 2Q1, 12 2CP1, 13 2Q0, 14 2MR, 15 2CP0; 8 — GND, 16 — VCC. CP0, CP1 — такт по спаду (в даташите над ними черта), MR — сброс, активная 1. Внутри каждого счётчика: ступень ÷2 (Q0) и ступень ÷5 (Q1 Q2 Q3, счёт 0–4). Всё внутри — микросхемы из уроков 1–2: триггеры — 74HC74 (по две на счётчик); шесть переворотов — одна 74HC04 (спад такта = фронт перевёрнутого такта, сброс 1 → 0 для 74HC74); НЕ-ИЛИ — 74HC02, И — 74HC08, исключающее ИЛИ — 74HC86 (по вентилю на счётчик, свободные — на GND).
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | 1CP0 |
| Порт входа | выход | 1MR |
| Порт входа | выход | 1CP1 |
| Порт входа | выход | 2CP1 |
| Порт входа | выход | 2MR |
| Порт входа | выход | 2CP0 |
| Порт выхода | вход | 1Q0 |
| Порт выхода | вход | 1Q1 |
| Порт выхода | вход | 1Q2 |
| Порт выхода | вход | 1Q3 |
| Порт выхода | вход | 2Q3 |
| Порт выхода | вход | 2Q2 |
| Порт выхода | вход | 2Q1 |
| Порт выхода | вход | 2Q0 |
| 74HC04 | 1A 1Y 2A 2Y 3A 3Y 4Y 4A 5Y 5A 6Y 6A | 1CP0 1c0 1CP1 1c1 1MR 1nMR 2c0 2CP0 2c1 2CP1 2nMR 2MR |
| 74HC02 | 1Y 1A 1B 2Y 2A 2B 3A 3B 4A 4B | 1d1 1Q1 1Q3 2d1 2Q1 2Q3 GND GND GND GND |
| 74HC08 | 1A 1B 1Y 2A 2B 2Y 3A 3B 4A 4B | 1Q1 1Q2 1d3 2Q1 2Q2 2d3 GND GND GND GND |
| 74HC86 | 1A 1B 1Y 2A 2B 2Y 3A 3B 4A 4B | 1Q1 1Q2 1d2 2Q1 2Q2 2d2 GND GND GND GND |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | 1nMR 1Q0N 1c0 VCC 1Q0 1Q0N 1Q1N 1Q1 VCC 1c1 1d1 1nMR |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | 1nMR 1d2 1c1 VCC 1Q2 1Q2N 1Q3N 1Q3 VCC 1c1 1d3 1nMR |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | 2nMR 2Q0N 2c0 VCC 2Q0 2Q0N 2Q1N 2Q1 VCC 2c1 2d1 2nMR |
| 74HC74 | 1RD 1D 1CP 1SD 1Q 1QN 2QN 2Q 2SD 2CP 2D 2RD | 2nMR 2d2 2c1 VCC 2Q2 2Q2N 2Q3N 2Q3 VCC 2c1 2d3 2nMR |
Ctrl+G → имя 74HC390. Ноги: входы 1CP0, 1MR, 1CP1, 2CP1, 2MR, 2CP0; выходы 1Q0, 1Q1, 1Q2, 1Q3, 2Q3, 2Q2, 2Q1, 2Q0.
Шаг 3. Генератор, тумблер и кнопка
Clock — 1Hz: секундомер считает секунды. Тумблер RUN — старт/стоп, кнопка «Сброс» — RST.
| Деталь | Нога | Метка |
|---|---|---|
| Clock | выход | CLK |
| Input (тумблер) | выход | RUN |
| Button «Сброс» | выход | RST |
Шаг 4. Старт / стоп — 74HC08
TICK = CLK И RUN: пока RUN = 0, такт до счётчика не доходит.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC08 | 1A 1B 1Y 2A 2B 3A 3B 4A 4B | CLK RUN TICK GND GND GND GND GND GND |
Шаг 5. Единицы и десятки — одна 74HC390
Первый счётчик — единицы: такт на 1CP0 (÷2), его 1Q0 — на 1CP1 (÷5): вместе 0–9. Второй — десятки: такт — 1Q3 единиц, он падает из 1 в 0 ровно когда единицы переходят 9 → 0. MR обоих — кнопка сброса, напрямую: сброс у 74HC390 — от единицы.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC390 | 1CP0 1MR 1Q0 1CP1 1Q1 1Q2 1Q3 2Q3 2Q2 2Q1 2CP1 2Q0 2MR 2CP0 | TICK RST U0 U0 U1 U2 U3 T3 T2 T1 T0 T0 RST U3 |
Шаг 6. Табло
Два Display (bus) ⚙: ширина 4, DEC, шины T (десятки) и U (единицы). Лампа TICK мигает с каждым тактом.
| Деталь | Нога | Метка |
|---|---|---|
| Display | ⚙ | ширина 4, DEC, шина T |
| Display | ⚙ | ширина 4, DEC, шина U |
| LED | вход | TICK |
3.5. Проверка
Clock—1Hz. Нажми Сброс: табло 00.RUN= 1: секундомер считает 01, 02 … 09, 10, 11 … — по одной в секунду. Хочешь быстрее —Clock10Hz.- На 99 → 00: десятки и единицы обнуляются вместе.
RUN= 0 — счёт стоит, лампаTICKгаснет.RUN= 1 — продолжает с того же места.- Сброс посреди счёта — сразу 00.
| Что видно | Что это |
|---|---|
| единицы | первый счётчик 74HC390: ÷2 и ÷5 = 0–9 |
| десятки | второй счётчик: тактом — спад Q3 единиц |
| TICK мигает | такт проходит через 74HC08: RUN = 1 |
Вставка урока 3 (Cmd+I)
Поверх урока 2.
# Урок 3 — 74HC390: два десятичных счётчика в корпусе; секундомер 00–99.# Вставка: Cmd+I поверх урока 2 (нужны вентили, 74HC02, 74HC04, 74HC08, 74HC74). # 74HC86 — 4 × исключающее ИЛИ (XOR). Ноги: 1 1A, 2 1B, 3 1Y, 4 2A, 5 2B, 6 2Y, 8 3Y, 9 3A, 10 3B, 11 4Y, 12 4A, 13 4Bchip 74HC86 { portIn(1A) portIn(1B) portIn(2A) portIn(2B) portIn(3A) portIn(3B) portIn(4A) portIn(4B) portOut(1Y) portOut(2Y) portOut(3Y) portOut(4Y) XOR(1A, 1B, 1Y) XOR(2A, 2B, 2Y) XOR(3A, 3B, 3Y) XOR(4A, 4B, 4Y)} # 74HC390 — 2 × десятичный счётчик: ÷2 (CP0, спад) и ÷5 (CP1, спад), MR — сброс (активная 1). Ноги: 1 1CP0, 2 1MR, 3 1Q0, 4 1CP1, 5 1Q1, 6 1Q2, 7 1Q3, 9 2Q3, 10 2Q2, 11 2Q1, 12 2CP1, 13 2Q0, 14 2MR, 15 2CP0chip 74HC390 { portIn(1CP0) portIn(1MR) portIn(1CP1) portIn(2CP1) portIn(2MR) portIn(2CP0) portOut(1Q0) portOut(1Q1) portOut(1Q2) portOut(1Q3) portOut(2Q3) portOut(2Q2) portOut(2Q1) portOut(2Q0) 74HC04(1A=1CP0, 1Y=1c0, 2A=1CP1, 2Y=1c1, 3A=1MR, 3Y=1nMR, 4Y=2c0, 4A=2CP0, 5Y=2c1, 5A=2CP1, 6Y=2nMR, 6A=2MR) 74HC02(1Y=1d1, 1A=1Q1, 1B=1Q3, 2Y=2d1, 2A=2Q1, 2B=2Q3, 3A=GND, 3B=GND, 4A=GND, 4B=GND) 74HC08(1A=1Q1, 1B=1Q2, 1Y=1d3, 2A=2Q1, 2B=2Q2, 2Y=2d3, 3A=GND, 3B=GND, 4A=GND, 4B=GND) 74HC86(1A=1Q1, 1B=1Q2, 1Y=1d2, 2A=2Q1, 2B=2Q2, 2Y=2d2, 3A=GND, 3B=GND, 4A=GND, 4B=GND) 74HC74(1RD=1nMR, 1D=1Q0N, 1CP=1c0, 1SD=VCC, 1Q=1Q0, 1QN=1Q0N, 2QN=1Q1N, 2Q=1Q1, 2SD=VCC, 2CP=1c1, 2D=1d1, 2RD=1nMR) 74HC74(1RD=1nMR, 1D=1d2, 1CP=1c1, 1SD=VCC, 1Q=1Q2, 1QN=1Q2N, 2QN=1Q3N, 2Q=1Q3, 2SD=VCC, 2CP=1c1, 2D=1d3, 2RD=1nMR) 74HC74(1RD=2nMR, 1D=2Q0N, 1CP=2c0, 1SD=VCC, 1Q=2Q0, 1QN=2Q0N, 2QN=2Q1N, 2Q=2Q1, 2SD=VCC, 2CP=2c1, 2D=2d1, 2RD=2nMR) 74HC74(1RD=2nMR, 1D=2d2, 1CP=2c1, 1SD=VCC, 1Q=2Q2, 1QN=2Q2N, 2QN=2Q3N, 2Q=2Q3, 2SD=VCC, 2CP=2c1, 2D=2d3, 2RD=2nMR)} # ---------- секундомер ----------clock(CLK)input(RUN)button{label="Сброс"}(RST)# старт / стоп: такт проходит, только пока RUN = 174HC08(1A=CLK, 1B=RUN, 1Y=TICK, 2A=GND, 2B=GND, 3A=GND, 3B=GND, 4A=GND, 4B=GND)# единицы: ÷2 от такта, ÷5 от Q0 — счёт 0–9; десятки — от Q3 единиц: спад 9 → 074HC390(1CP0=TICK, 1MR=RST, 1Q0=U0, 1CP1=U0, 1Q1=U1, 1Q2=U2, 1Q3=U3, 2Q3=T3, 2Q2=T2, 2Q1=T1, 2CP1=T0, 2Q0=T0, 2MR=RST, 2CP0=U3)# табло: десятки и единицыdisplay{bits=4, base="DEC", busSource="T"}()display{bits=4, base="DEC", busSource="U"}()led(TICK)Не получается? Что-то не работает →