Урок 1. Логика в корпусах: 74HC00, 02, 04, 08, 32

В картинках

После этого урока в библиотеке пять настоящих микросхем — с теми же именами ног, что в даташите, — и на них работает сигнализация: открыл дверь при включённой охране — загорается тревога и гудит зуммер, и тревога держится, пока не нажмут «Сброс».


1.1. Идея: микросхема — корпус с вентилями

Возняк собирал Apple I не из отдельных вентилей, а из микросхем серии 74: в одном корпусе — четыре или шесть одинаковых вентилей. У корпуса 14 ног, у каждой — номер и имя:

  • 1A, 1B — входы первого вентиля, 1Y — его выход; дальше 2A, 2B, 2Y и так до четвёртого;
  • нога 7 — GND, нога 14 — VCC: питание. У нас питание общее для всех чипов, поэтому этих ног нет.

Буквы в названии — семейство: HC — современные CMOS-микросхемы. Внутри у них ровно то, что мы собираем из транзисторов: пары P и N. Цифры — что внутри: 00 — И-НЕ, 02 — ИЛИ-НЕ, 04 — НЕ, 08 — И, 32 — ИЛИ.

1 1AVCC 142 1B4B 133 1Y4A 124 2A4Y 115 2B3B 106 2Y3A 97 GND3Y 8ноги 7 и 14 — питание: у нас VCC и GND общие, этих ног у чипа нет
74HC00 изнутри: четыре вентиля И-НЕ в одном корпусе. Каждый вентиль — свои три ноги (A, B, Y), номер перед именем — это номер вентиля. Ноги нумеруются от выемки против часовой стрелки: 1–7 слева сверху вниз, 8–14 справа снизу вверх.
74HC024 × ИЛИ-НЕ11Y14VCC21A134Y31B124B42Y114A52A103Y62B93B7GND83A74HC046 × НЕ11A14VCC21Y136A32A126Y42Y115A53A105Y63Y94A7GND84Y
Ноги 74HC02 и 74HC04 расставлены иначе, чем у 74HC00: у 74HC02 выход идёт первым (1Y, 1A, 1B), у 74HC04 — шесть пар «вход — выход». У 74HC08, 74HC32 и 74HC86 ноги точно как у 74HC00. Черта над именем на рисунках — «активный 0»; в симуляторе имя пишется без черты.

1.2. Идея: свободные входы — на землю

На плате часто работает один вентиль из четырёх. Входы остальных нельзя оставить в воздухе: у CMOS-входа нет своего уровня, он «плавает», и выход вентиля дёргается. Правило из любого даташита: неиспользуемые входы — на GND (или на VCC). В симуляторе то же самое: висящий вход даёт неопределённость.

??вход в воздухеGND1вход на земле
Свободный вход CMOS-вентиля ни к чему не подключён — у него нет уровня, и выход «плавает». Поэтому свободные входы всех вентилей в корпусе сажаем на GND: выход становится определённым, хоть и никому не нужным.

1.3. Идея: защёлка из одной микросхемы

Два И-НЕ из одной 74HC00, соединённые крест-накрест, — SR-защёлка: ноль на одном входе зажигает выход, ноль на другом гасит, а когда на обоих единицы, защёлка помнит последнее. Так сигнализация помнит тревогу.

nTRIPnRESETALARMALQN1A=nTRIP, 1B=ALQN, 1Y=ALARM · 2A=nRESET, 2B=ALARM, 2Y=ALQN
Защёлка тревоги — два И-НЕ из одной 74HC00 крест-накрест. 0 на nTRIP зажигает ALARM, 0 на nRESET гасит; когда на обоих 1, защёлка держит то, что было. Поэтому тревога не гаснет, даже если дверь закрыли.

1.4. Сборка

Настоящая сборка урока 1 — без постановки, ускорено в 8 раз, 2 мин 47 с.

Новый проект. Нужны вентили NOT, NAND, NOR, AND, OR — из любого набора серии или урока 0.

Шаг 1. Чип 74HC00 — 4 × И-НЕ (NAND)

Ноги корпуса по даташиту: 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 (у нас питание общее, этих ног нет). Имя порта = имя ноги: двойной клик по порту → 1A и т. д.

ДетальНогаМетка
Порт входавыход1A
Порт входавыход1B
Порт входавыход2A
Порт входавыход2B
Порт входавыход3A
Порт входавыход3B
Порт входавыход4A
Порт входавыход4B
Порт выходавход1Y
Порт выходавход2Y
Порт выходавход3Y
Порт выходавход4Y
NANDI0
I1
O0
1A
1B
1Y
NANDI0
I1
O0
2A
2B
2Y
NANDI0
I1
O0
3A
3B
3Y
NANDI0
I1
O0
4A
4B
4Y

Ctrl+G → имя 74HC00. Ноги: входы 1A, 1B, 2A, 2B, 3A, 3B, 4A, 4B; выходы 1Y, 2Y, 3Y, 4Y.

Шаг 2. Чип 74HC02 — 4 × ИЛИ-НЕ (NOR)

Ноги корпуса по даташиту: 1 1Y, 2 1A, 3 1B, 4 2Y, 5 2A, 6 2B, 8 3A, 9 3B, 10 3Y, 11 4A, 12 4B, 13 4Y; 7 — GND, 14 — VCC (у нас питание общее, этих ног нет). Имя порта = имя ноги: двойной клик по порту → 1A и т. д.

ДетальНогаМетка
Порт входавыход1A
Порт входавыход1B
Порт входавыход2A
Порт входавыход2B
Порт входавыход3A
Порт входавыход3B
Порт входавыход4A
Порт входавыход4B
Порт выходавход1Y
Порт выходавход2Y
Порт выходавход3Y
Порт выходавход4Y
NORI0
I1
O0
1A
1B
1Y
NORI0
I1
O0
2A
2B
2Y
NORI0
I1
O0
3A
3B
3Y
NORI0
I1
O0
4A
4B
4Y

Ctrl+G → имя 74HC02. Ноги: входы 1A, 1B, 2A, 2B, 3A, 3B, 4A, 4B; выходы 1Y, 2Y, 3Y, 4Y.

Шаг 3. Чип 74HC04 — 6 × НЕ

Ноги корпуса по даташиту: 1 1A, 2 1Y, 3 2A, 4 2Y, 5 3A, 6 3Y, 8 4Y, 9 4A, 10 5Y, 11 5A, 12 6Y, 13 6A; 7 — GND, 14 — VCC (у нас питание общее, этих ног нет). Имя порта = имя ноги: двойной клик по порту → 1A и т. д.

ДетальНогаМетка
Порт входавыход1A
Порт входавыход2A
Порт входавыход3A
Порт входавыход4A
Порт входавыход5A
Порт входавыход6A
Порт выходавход1Y
Порт выходавход2Y
Порт выходавход3Y
Порт выходавход4Y
Порт выходавход5Y
Порт выходавход6Y
NOTI0
O0
1A
1Y
NOTI0
O0
2A
2Y
NOTI0
O0
3A
3Y
NOTI0
O0
4A
4Y
NOTI0
O0
5A
5Y
NOTI0
O0
6A
6Y

Ctrl+G → имя 74HC04. Ноги: входы 1A, 2A, 3A, 4A, 5A, 6A; выходы 1Y, 2Y, 3Y, 4Y, 5Y, 6Y.

Шаг 4. Чип 74HC08 — 4 × И (AND)

Ноги корпуса по даташиту: 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 (у нас питание общее, этих ног нет). Имя порта = имя ноги: двойной клик по порту → 1A и т. д.

ДетальНогаМетка
Порт входавыход1A
Порт входавыход1B
Порт входавыход2A
Порт входавыход2B
Порт входавыход3A
Порт входавыход3B
Порт входавыход4A
Порт входавыход4B
Порт выходавход1Y
Порт выходавход2Y
Порт выходавход3Y
Порт выходавход4Y
ANDI0
I1
O0
1A
1B
1Y
ANDI0
I1
O0
2A
2B
2Y
ANDI0
I1
O0
3A
3B
3Y
ANDI0
I1
O0
4A
4B
4Y

Ctrl+G → имя 74HC08. Ноги: входы 1A, 1B, 2A, 2B, 3A, 3B, 4A, 4B; выходы 1Y, 2Y, 3Y, 4Y.

Шаг 5. Чип 74HC32 — 4 × ИЛИ (OR)

Ноги корпуса по даташиту: 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 (у нас питание общее, этих ног нет). Имя порта = имя ноги: двойной клик по порту → 1A и т. д.

ДетальНогаМетка
Порт входавыход1A
Порт входавыход1B
Порт входавыход2A
Порт входавыход2B
Порт входавыход3A
Порт входавыход3B
Порт входавыход4A
Порт входавыход4B
Порт выходавход1Y
Порт выходавход2Y
Порт выходавход3Y
Порт выходавход4Y
ORI0
I1
O0
1A
1B
1Y
ORI0
I1
O0
2A
2B
2Y
ORI0
I1
O0
3A
3B
3Y
ORI0
I1
O0
4A
4B
4Y

Ctrl+G → имя 74HC32. Ноги: входы 1A, 1B, 2A, 2B, 3A, 3B, 4A, 4B; выходы 1Y, 2Y, 3Y, 4Y.

Шаг 6. Сигнализация: питание и входы

Тумблеры ARM — сигнализация включена, DOOR — дверь открыта, WIN — окно открыто; кнопка «Сброс» — RESET.

ДетальНогаМетка
PowerвыходVCC
GroundвыходGND
Input (тумблер)выходARM
Input (тумблер)выходDOOR
Input (тумблер)выходWIN
Button «Сброс»выходRESET

Шаг 7. Открыто: 74HC32

OPEN = дверь ИЛИ окно. Работает один вентиль из четырёх; входы остальных трёх — на GND: у CMOS-микросхемы вход не должен висеть в воздухе, иначе выход «плавает». Так же на настоящей плате.

ДетальНогаМетка
74HC321A
1B
1Y
2A
2B
3A
3B
4A
4B
DOOR
WIN
OPEN
GND
GND
GND
GND
GND
GND

Шаг 8. Тревога начинается: 74HC08

TRIP = открыто И сигнализация включена.

ДетальНогаМетка
74HC081A
1B
1Y
2A
2B
3A
3B
4A
4B
OPEN
ARM
TRIP
GND
GND
GND
GND
GND
GND

Шаг 9. Переворот: 74HC04

Защёлка из И-НЕ срабатывает от нуля, поэтому TRIP и кнопку RESET переворачиваем: nTRIP, nRESET.

ДетальНогаМетка
74HC041A
1Y
2A
2Y
3A
4A
5A
6A
TRIP
nTRIP
RESET
nRESET
GND
GND
GND
GND

Шаг 10. Защёлка тревоги: 74HC00

Два И-НЕ крест-накрест — защёлка: nTRIP = 0 зажигает ALARM, nRESET = 0 гасит. Тревога держится, даже когда дверь закрыли, — пока не нажмут «Сброс».

ДетальНогаМетка
74HC001A
1B
1Y
2A
2B
2Y
3A
3B
4A
4B
nTRIP
ALQN
ALARM
nRESET
ALARM
ALQN
GND
GND
GND
GND

Шаг 11. Готово: 74HC02

READY = ИЛИ-НЕ(открыто, тревога): горит, когда всё закрыто и тревоги нет.

ДетальНогаМетка
74HC021Y
1A
1B
2A
2B
3A
3B
4A
4B
READY
OPEN
ALARM
GND
GND
GND
GND
GND
GND
LEDвходALARM
LEDвходREADY
Speaker (зуммер, 880)SPKRALARM

Шаг 12. Лампы и гонг

Speaker — режим «зуммер», тон 880: гудит, пока ALARM = 1.

ДетальНогаМетка
LEDвходALARM
LEDвходREADY
Speaker (зуммер, 880)SPKRALARM

1.5. Проверка

  1. Нажми Сброс: ALARM не горит, READY горит — всё закрыто, тревоги нет.
  2. DOOR = 1 (сигнализация выключена): READY гаснет — дверь открыта, но тревоги нет. DOOR = 0 — READY снова горит.
  3. ARM = 1 — сигнализация включена. WIN = 1: загорается ALARM, гудит зуммер, READY гаснет.
  4. WIN = 0 — окно закрыли, а ALARM горит: защёлка помнит тревогу.
  5. Сброс — ALARM гаснет, READY горит.
  6. DOOR = 1 и Сброс: тревога не гаснет — пока дверь открыта, nTRIP держит защёлку.
Что видноЧто это
ALARM горитбыло открыто при включённой сигнализации
ALARM горит, всё закрытозащёлка 74HC00 помнит тревогу — нужен Сброс
READY горитвсё закрыто и тревоги нет

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

Нужны вентили NOT, NAND, NOR, AND, OR (урок 0 или его вставка). Вставка — пять микросхем и сигнализация; Speaker — режим «зуммер», тон 880 — настрой руками.

# Урок 1 — логика в корпусах: 74HC00, 74HC02, 74HC04, 74HC08, 74HC32 и сигнализация на них.# Вставка: Cmd+I в проект, где есть вентили NOT, NAND, NOR, AND, OR (урок 0). # 74HC00 — 4 × И-НЕ (NAND). Ноги: 1 1A, 2 1B, 3 1Y, 4 2A, 5 2B, 6 2Y, 8 3Y, 9 3A, 10 3B, 11 4Y, 12 4A, 13 4Bchip 74HC00 {  portIn(1A)  portIn(1B)  portIn(2A)  portIn(2B)  portIn(3A)  portIn(3B)  portIn(4A)  portIn(4B)  portOut(1Y)  portOut(2Y)  portOut(3Y)  portOut(4Y)  NAND(1A, 1B, 1Y)  NAND(2A, 2B, 2Y)  NAND(3A, 3B, 3Y)  NAND(4A, 4B, 4Y)} # 74HC02 — 4 × ИЛИ-НЕ (NOR). Ноги: 1 1Y, 2 1A, 3 1B, 4 2Y, 5 2A, 6 2B, 8 3A, 9 3B, 10 3Y, 11 4A, 12 4B, 13 4Ychip 74HC02 {  portIn(1A)  portIn(1B)  portIn(2A)  portIn(2B)  portIn(3A)  portIn(3B)  portIn(4A)  portIn(4B)  portOut(1Y)  portOut(2Y)  portOut(3Y)  portOut(4Y)  NOR(1A, 1B, 1Y)  NOR(2A, 2B, 2Y)  NOR(3A, 3B, 3Y)  NOR(4A, 4B, 4Y)} # 74HC04 — 6 × НЕ (инвертор). Ноги: 1 1A, 2 1Y, 3 2A, 4 2Y, 5 3A, 6 3Y, 8 4Y, 9 4A, 10 5Y, 11 5A, 12 6Y, 13 6Achip 74HC04 {  portIn(1A)  portIn(2A)  portIn(3A)  portIn(4A)  portIn(5A)  portIn(6A)  portOut(1Y)  portOut(2Y)  portOut(3Y)  portOut(4Y)  portOut(5Y)  portOut(6Y)  NOT(1A, 1Y)  NOT(2A, 2Y)  NOT(3A, 3Y)  NOT(4A, 4Y)  NOT(5A, 5Y)  NOT(6A, 6Y)} # 74HC08 — 4 × И (AND). Ноги: 1 1A, 2 1B, 3 1Y, 4 2A, 5 2B, 6 2Y, 8 3Y, 9 3A, 10 3B, 11 4Y, 12 4A, 13 4Bchip 74HC08 {  portIn(1A)  portIn(1B)  portIn(2A)  portIn(2B)  portIn(3A)  portIn(3B)  portIn(4A)  portIn(4B)  portOut(1Y)  portOut(2Y)  portOut(3Y)  portOut(4Y)  AND(1A, 1B, 1Y)  AND(2A, 2B, 2Y)  AND(3A, 3B, 3Y)  AND(4A, 4B, 4Y)} # 74HC32 — 4 × ИЛИ (OR). Ноги: 1 1A, 2 1B, 3 1Y, 4 2A, 5 2B, 6 2Y, 8 3Y, 9 3A, 10 3B, 11 4Y, 12 4A, 13 4Bchip 74HC32 {  portIn(1A)  portIn(1B)  portIn(2A)  portIn(2B)  portIn(3A)  portIn(3B)  portIn(4A)  portIn(4B)  portOut(1Y)  portOut(2Y)  portOut(3Y)  portOut(4Y)  OR(1A, 1B, 1Y)  OR(2A, 2B, 2Y)  OR(3A, 3B, 3Y)  OR(4A, 4B, 4Y)} # ---------- сигнализация ----------power(VCC)ground(GND)input(ARM)input(DOOR)input(WIN)button{label="Сброс"}(RESET)# открыто: дверь ИЛИ окно74HC32(1A=DOOR, 1B=WIN, 1Y=OPEN, 2A=GND, 2B=GND, 3A=GND, 3B=GND, 4A=GND, 4B=GND)# тревога начинается: открыто И сигнализация включена74HC08(1A=OPEN, 1B=ARM, 1Y=TRIP, 2A=GND, 2B=GND, 3A=GND, 3B=GND, 4A=GND, 4B=GND)# переворачиваем: защёлке из И-НЕ нужен 0, чтобы сработать74HC04(1A=TRIP, 1Y=nTRIP, 2A=RESET, 2Y=nRESET, 3A=GND, 4A=GND, 5A=GND, 6A=GND)# защёлка тревоги: два И-НЕ крест-накрест — тревога держится, пока не нажмут «Сброс»74HC00(1A=nTRIP, 1B=ALQN, 1Y=ALARM, 2A=nRESET, 2B=ALARM, 2Y=ALQN, 3A=GND, 3B=GND, 4A=GND, 4B=GND)# «готово»: не открыто И нет тревоги = ИЛИ-НЕ74HC02(1Y=READY, 1A=OPEN, 1B=ALARM, 2A=GND, 2B=GND, 3A=GND, 3B=GND, 4A=GND, 4B=GND)led(ALARM)led(READY)speaker{mode="buzz", tone=880}(ALARM)

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