Урок 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, смотря как соединить.

74HC3902 × счётчик ÷1011CP016VCC21MR152CP031Q0142MR41CP1132Q051Q1122CP161Q2112Q171Q3102Q28GND92Q3
74HC390: два одинаковых счётчика. CP0 — такт ступени ÷2 (выход Q0), CP1 — такт ступени ÷5 (выходы Q1 Q2 Q3), MR — сброс в 0 (активная 1). Такты — по спаду 1 → 0, поэтому над CP черта.
TICKU0U3единицы0123456789012спад U3 (9 → 0) — такт десятков
Половинка 74HC390: ступень ÷2 считает спады TICK, её выход U0 — такт ступени ÷5. Вместе — 0 … 9 и снова 0. На переходе 9 → 0 у U3 спад — это такт для второй половинки, десятков.

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
XORI0
I1
O0
1A
1B
1Y
XORI0
I1
O0
2A
2B
2Y
XORI0
I1
O0
3A
3B
3Y
XORI0
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
74HC041A
1Y
2A
2Y
3A
3Y
4Y
4A
5Y
5A
6Y
6A
1CP0
1c0
1CP1
1c1
1MR
1nMR
2c0
2CP0
2c1
2CP1
2nMR
2MR
74HC021Y
1A
1B
2Y
2A
2B
3A
3B
4A
4B
1d1
1Q1
1Q3
2d1
2Q1
2Q3
GND
GND
GND
GND
74HC081A
1B
1Y
2A
2B
2Y
3A
3B
4A
4B
1Q1
1Q2
1d3
2Q1
2Q2
2d3
GND
GND
GND
GND
74HC861A
1B
1Y
2A
2B
2Y
3A
3B
4A
4B
1Q1
1Q2
1d2
2Q1
2Q2
2d2
GND
GND
GND
GND
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
1nMR
1Q0N
1c0
VCC
1Q0
1Q0N
1Q1N
1Q1
VCC
1c1
1d1
1nMR
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
1nMR
1d2
1c1
VCC
1Q2
1Q2N
1Q3N
1Q3
VCC
1c1
1d3
1nMR
74HC741RD
1D
1CP
1SD
1Q
1QN
2QN
2Q
2SD
2CP
2D
2RD
2nMR
2Q0N
2c0
VCC
2Q0
2Q0N
2Q1N
2Q1
VCC
2c1
2d1
2nMR
74HC741RD
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, такт до счётчика не доходит.

ДетальНогаМетка
74HC081A
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 — от единицы.

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

  1. Clock — 1Hz. Нажми Сброс: табло 00.
  2. RUN = 1: секундомер считает 01, 02 … 09, 10, 11 … — по одной в секунду. Хочешь быстрее — Clock 10Hz.
  3. На 99 → 00: десятки и единицы обнуляются вместе.
  4. RUN = 0 — счёт стоит, лампа TICK гаснет. RUN = 1 — продолжает с того же места.
  5. Сброс посреди счёта — сразу 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)

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