Урок 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.2. Идея: свободные входы — на землю
На плате часто работает один вентиль из четырёх. Входы остальных нельзя оставить в воздухе: у CMOS-входа нет своего уровня, он «плавает», и выход вентиля дёргается. Правило из любого даташита: неиспользуемые входы — на GND (или на VCC). В симуляторе то же самое: висящий вход даёт неопределённость.
1.3. Идея: защёлка из одной микросхемы
Два И-НЕ из одной 74HC00, соединённые крест-накрест, — SR-защёлка: ноль на одном входе зажигает выход, ноль на другом гасит, а когда на обоих единицы, защёлка помнит последнее. Так сигнализация помнит тревогу.
1.4. Сборка
Новый проект. Нужны вентили 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 |
| NAND | I0 I1 O0 | 1A 1B 1Y |
| NAND | I0 I1 O0 | 2A 2B 2Y |
| NAND | I0 I1 O0 | 3A 3B 3Y |
| NAND | I0 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 |
| NOR | I0 I1 O0 | 1A 1B 1Y |
| NOR | I0 I1 O0 | 2A 2B 2Y |
| NOR | I0 I1 O0 | 3A 3B 3Y |
| NOR | I0 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 |
| NOT | I0 O0 | 1A 1Y |
| NOT | I0 O0 | 2A 2Y |
| NOT | I0 O0 | 3A 3Y |
| NOT | I0 O0 | 4A 4Y |
| NOT | I0 O0 | 5A 5Y |
| NOT | I0 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 |
| AND | I0 I1 O0 | 1A 1B 1Y |
| AND | I0 I1 O0 | 2A 2B 2Y |
| AND | I0 I1 O0 | 3A 3B 3Y |
| AND | I0 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 |
| OR | I0 I1 O0 | 1A 1B 1Y |
| OR | I0 I1 O0 | 2A 2B 2Y |
| OR | I0 I1 O0 | 3A 3B 3Y |
| OR | I0 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-микросхемы вход не должен висеть в воздухе, иначе выход «плавает». Так же на настоящей плате.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC32 | 1A 1B 1Y 2A 2B 3A 3B 4A 4B | DOOR WIN OPEN GND GND GND GND GND GND |
Шаг 8. Тревога начинается: 74HC08
TRIP = открыто И сигнализация включена.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC08 | 1A 1B 1Y 2A 2B 3A 3B 4A 4B | OPEN ARM TRIP GND GND GND GND GND GND |
Шаг 9. Переворот: 74HC04
Защёлка из И-НЕ срабатывает от нуля, поэтому TRIP и кнопку RESET переворачиваем: nTRIP, nRESET.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC04 | 1A 1Y 2A 2Y 3A 4A 5A 6A | TRIP nTRIP RESET nRESET GND GND GND GND |
Шаг 10. Защёлка тревоги: 74HC00
Два И-НЕ крест-накрест — защёлка: nTRIP = 0 зажигает ALARM, nRESET = 0 гасит. Тревога держится, даже когда дверь закрыли, — пока не нажмут «Сброс».
| Деталь | Нога | Метка |
|---|---|---|
| 74HC00 | 1A 1B 1Y 2A 2B 2Y 3A 3B 4A 4B | nTRIP ALQN ALARM nRESET ALARM ALQN GND GND GND GND |
Шаг 11. Готово: 74HC02
READY = ИЛИ-НЕ(открыто, тревога): горит, когда всё закрыто и тревоги нет.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC02 | 1Y 1A 1B 2A 2B 3A 3B 4A 4B | READY OPEN ALARM GND GND GND GND GND GND |
| LED | вход | ALARM |
| LED | вход | READY |
| Speaker (зуммер, 880) | SPKR | ALARM |
Шаг 12. Лампы и гонг
Speaker — режим «зуммер», тон 880: гудит, пока ALARM = 1.
| Деталь | Нога | Метка |
|---|---|---|
| LED | вход | ALARM |
| LED | вход | READY |
| Speaker (зуммер, 880) | SPKR | ALARM |
1.5. Проверка
- Нажми Сброс:
ALARMне горит,READYгорит — всё закрыто, тревоги нет. DOOR= 1 (сигнализация выключена):READYгаснет — дверь открыта, но тревоги нет.DOOR= 0 —READYснова горит.ARM= 1 — сигнализация включена.WIN= 1: загораетсяALARM, гудит зуммер,READYгаснет.WIN= 0 — окно закрыли, аALARMгорит: защёлка помнит тревогу.- Сброс —
ALARMгаснет,READYгорит. 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)Не получается? Что-то не работает →