Урок 6. Буферы шины: 74HC244 и 74HC245
В картинкахПосле этого урока в библиотеке 74HC244 и 74HC245 — микросхемы, на которых держится любая шина компьютера, — а на холсте шина из четырёх проводов: два устройства говорят на неё по очереди, третье слушает или отвечает.
6.1. Идея: шина и третье состояние
В компьютере процессор, память и устройства сидят на одних и тех же проводах — шине. Если два выхода гонят на один провод разное, это короткое замыкание. Поэтому у каждого, кто садится на шину, выход с третьим состоянием: говорит только тот, кого включили, остальные отключены. 74HC244 — восемь таких выходов, в двух четвёрках со своими OE.
6.2. Идея: буфер — двойной переворот
Внутри 74HC244 каждый вход переворачивается дважды: значение то же, но выход теперь сильный и идёт только в одну сторону — шина не «протекает» обратно во вход. Это и есть буфер. А третье состояние — ключ на выходе, как в 74HC595.
6.3. Идея: в обе стороны — две 74HC244
Память на шине и читают, и пишут: данные идут то туда, то обратно. 74HC245 пропускает в обе стороны: DIR выбирает направление. Внутри — две 74HC244 навстречу друг другу, и включена всегда только одна. Микросхема из микросхем — как 74HC390 и 74HC595.
6.4. Сборка
Тот же проект, что в уроке 5: в библиотеке все микросхемы уроков 1–5.
Шаг 1. Чип 74HC244 — 2 × 4 буфера с третьим состоянием
Ноги корпуса по даташиту: 1 1OE, 2 1A0, 3 2Y0, 4 1A1, 5 2Y1, 6 1A2, 7 2Y2, 8 1A3, 9 2Y3, 11 2A3, 12 1Y3, 13 2A2, 14 1Y2, 15 2A1, 16 1Y1, 17 2A0, 18 1Y0, 19 2OE; 10 — GND, 20 — VCC. Две четвёрки: 1A0–1A3 → 1Y0–1Y3 и 2A0–2A3 → 2Y0–2Y3, у каждой своё «включить» — 1OE, 2OE (активный 0). Внутри три 74HC04: каждый вход переворачивается дважды — получается сильный буфер, который гонит сигнал только в одну сторону, — и два переворота OE; на выходе — Transmission gate.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | 1OE |
| Порт входа | выход | 1A0 |
| Порт входа | выход | 1A1 |
| Порт входа | выход | 1A2 |
| Порт входа | выход | 1A3 |
| Порт входа | выход | 2A3 |
| Порт входа | выход | 2A2 |
| Порт входа | выход | 2A1 |
| Порт входа | выход | 2A0 |
| Порт входа | выход | 2OE |
| Порт выхода | вход | 2Y0 |
| Порт выхода | вход | 2Y1 |
| Порт выхода | вход | 2Y2 |
| Порт выхода | вход | 2Y3 |
| Порт выхода | вход | 1Y3 |
| Порт выхода | вход | 1Y2 |
| Порт выхода | вход | 1Y1 |
| Порт выхода | вход | 1Y0 |
| 74HC04 | 1A 1Y 2A 2Y 3A 3Y 4Y 4A 5Y 5A 6Y 6A | 1A0 n1A0 1A1 n1A1 1A2 n1A2 n1A3 1A3 n2A0 2A0 n2A1 2A1 |
| 74HC04 | 1A 1Y 2A 2Y 3A 3Y 4Y 4A 5Y 5A 6Y 6A | 2A2 n2A2 2A3 n2A3 n1A0 b1A0 b1A1 n1A1 b1A2 n1A2 b1A3 n1A3 |
| 74HC04 | 1A 1Y 2A 2Y 3A 3Y 4Y 4A 5Y 5A 6Y 6A | n2A0 b2A0 n2A1 b2A1 n2A2 b2A2 b2A3 n2A3 e1 1OE e2 2OE |
| Transmission gate | A Enable B | b1A0 e1 1Y0 |
| Transmission gate | A Enable B | b1A1 e1 1Y1 |
| Transmission gate | A Enable B | b1A2 e1 1Y2 |
| Transmission gate | A Enable B | b1A3 e1 1Y3 |
| Transmission gate | A Enable B | b2A0 e2 2Y0 |
| Transmission gate | A Enable B | b2A1 e2 2Y1 |
| Transmission gate | A Enable B | b2A2 e2 2Y2 |
| Transmission gate | A Enable B | b2A3 e2 2Y3 |
Ctrl+G → имя 74HC244. Ноги: входы 1OE, 1A0, 1A1, 1A2, 1A3, 2A3, 2A2, 2A1, 2A0, 2OE; выходы 2Y0, 2Y1, 2Y2, 2Y3, 1Y3, 1Y2, 1Y1, 1Y0.
Шаг 2. Чип 74HC245 — 8 двунаправленных буферов
Ноги корпуса по даташиту: 1 DIR, 2 A0, 3 A1, 4 A2, 5 A3, 6 A4, 7 A5, 8 A6, 9 A7, 11 B7, 12 B6, 13 B5, 14 B4, 15 B3, 16 B2, 17 B1, 18 B0, 19 OE; 10 — GND, 20 — VCC. DIR = 1 — данные идут A → B, DIR = 0 — B → A; OE = 1 — обе стороны отключены (активный 0). Внутри — две 74HC244, по одной на направление, а 74HC04 и 74HC00 решают, какая из них включена. Ноги A и B работают в обе стороны.
| Деталь | Нога | Метка |
|---|---|---|
| Порт входа | выход | DIR |
| Порт входа | выход | A0 |
| Порт входа | выход | A1 |
| Порт входа | выход | A2 |
| Порт входа | выход | A3 |
| Порт входа | выход | A4 |
| Порт входа | выход | A5 |
| Порт входа | выход | A6 |
| Порт входа | выход | A7 |
| Порт входа | выход | OE |
| Порт выхода | вход | B7 |
| Порт выхода | вход | B6 |
| Порт выхода | вход | B5 |
| Порт выхода | вход | B4 |
| Порт выхода | вход | B3 |
| Порт выхода | вход | B2 |
| Порт выхода | вход | B1 |
| Порт выхода | вход | B0 |
| 74HC04 | 1A 1Y 2A 2Y 3A 4A 5A 6A | OE nOE DIR nDIR GND GND GND GND |
| 74HC00 | 1A 1B 1Y 2A 2B 2Y 3A 3B 4A 4B | nOE DIR oAB nOE nDIR oBA GND GND GND GND |
| 74HC244 | 1OE 2OE 1A0 1Y0 1A1 1Y1 1A2 1Y2 1A3 1Y3 2A0 2Y0 2A1 2Y1 2A2 2Y2 2A3 2Y3 | oAB oAB A0 B0 A1 B1 A2 B2 A3 B3 A4 B4 A5 B5 A6 B6 A7 B7 |
| 74HC244 | 1OE 2OE 1A0 1Y0 1A1 1Y1 1A2 1Y2 1A3 1Y3 2A0 2Y0 2A1 2Y1 2A2 2Y2 2A3 2Y3 | oBA oBA B0 A0 B1 A1 B2 A2 B3 A3 B4 A4 B5 A5 B6 A6 B7 A7 |
Ctrl+G → имя 74HC245. Ноги: входы DIR, A0, A1, A2, A3, A4, A5, A6, A7, OE; выходы B7, B6, B5, B4, B3, B2, B1, B0.
Шаг 3. Устройства X и Y
Восемь тумблеров: X0–X3 — устройство X, Y0–Y3 — устройство Y.
| Деталь | Нога | Метка |
|---|---|---|
| Input (тумблер) | выход | X0 |
| Input (тумблер) | выход | X1 |
| Input (тумблер) | выход | X2 |
| Input (тумблер) | выход | X3 |
| Input (тумблер) | выход | Y0 |
| Input (тумблер) | выход | Y1 |
| Input (тумблер) | выход | Y2 |
| Input (тумблер) | выход | Y3 |
Шаг 4. Кто говорит
SEL выбирает, кто на шине: 0 — X, 1 — Y; OFF = 1 — никто. «Включить» у 74HC244 — от нуля, поэтому oeX = SEL ИЛИ OFF, oeY = НЕ SEL ИЛИ OFF (74HC04 и 74HC32 из урока 1).
| Деталь | Нога | Метка |
|---|---|---|
| Input (тумблер) | выход | SEL |
| Input (тумблер) | выход | OFF |
| 74HC04 | 1A 1Y 2A 3A 4A 5A 6A | SEL nSEL GND GND GND GND GND |
| 74HC32 | 1A 1B 1Y 2A 2B 2Y 3A 3B 4A 4B | SEL OFF oeX nSEL OFF oeY GND GND GND GND |
Шаг 5. 74HC244 на шину
Выходы обеих четвёрок — на одни и те же провода BUS0–BUS3. Это и есть шина: говорит только включённая четвёрка, другая отключена — третье состояние.
| Деталь | Нога | Метка |
|---|---|---|
| 74HC244 | 1OE 2OE 1A0 1Y0 1A1 1Y1 1A2 1Y2 1A3 1Y3 2A0 2Y0 2A1 2Y1 2A2 2Y2 2A3 2Y3 | oeX oeY X0 BUS0 X1 BUS1 X2 BUS2 X3 BUS3 Y0 BUS0 Y1 BUS1 Y2 BUS2 Y3 BUS3 |
Шаг 6. Резисторы шины
Никто не говорит — резисторы держат на шине 0.
| Деталь | Нога | Метка |
|---|---|---|
| Resistor | конец 1 конец 2 | BUS0 GND |
| Resistor | конец 1 конец 2 | BUS1 GND |
| Resistor | конец 1 конец 2 | BUS2 GND |
| Resistor | конец 1 конец 2 | BUS3 GND |
Шаг 7. Третье устройство через 74HC245
DIR = 1 — шина → лампы K0–K3. DIR = 0 — тумблеры KS0–KS3 устройства через резисторы → K → 74HC245 → шина. Резистор здесь — «слабый» выход тумблера: когда 74HC245 сам гонит K, он сильнее и спора нет.
| Деталь | Нога | Метка |
|---|---|---|
| Input (тумблер) | выход | DIR |
| Input (тумблер) | выход | KS0 |
| Input (тумблер) | выход | KS1 |
| Input (тумблер) | выход | KS2 |
| Input (тумблер) | выход | KS3 |
| Resistor | конец 1 конец 2 | KS0 K0 |
| Resistor | конец 1 конец 2 | KS1 K1 |
| Resistor | конец 1 конец 2 | KS2 K2 |
| Resistor | конец 1 конец 2 | KS3 K3 |
| 74HC245 | DIR OE A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 | DIR GND BUS0 BUS1 BUS2 BUS3 UA4 UA5 UA6 UA7 K0 K1 K2 K3 UB4 UB5 UB6 UB7 |
Шаг 8. Незанятые ноги 74HC245 — через резисторы
У 74HC245 ноги A и B бывают и входами, и выходами: при DIR = 1 микросхема гонит B, при DIR = 0 — A. Выход прямо на GND — короткое замыкание (редактор подсветит). Поэтому незанятые A4–A7, B4–B7 — на землю через резистор: он держит 0, а когда нога становится выходом, спора нет.
| Деталь | Нога | Метка |
|---|---|---|
| Resistor | конец 1 конец 2 | UA4 GND |
| Resistor | конец 1 конец 2 | UA5 GND |
| Resistor | конец 1 конец 2 | UA6 GND |
| Resistor | конец 1 конец 2 | UA7 GND |
| Resistor | конец 1 конец 2 | UB4 GND |
| Resistor | конец 1 конец 2 | UB5 GND |
| Resistor | конец 1 конец 2 | UB6 GND |
| Resistor | конец 1 конец 2 | UB7 GND |
Шаг 9. Табло и лампы
Display (bus) ⚙: ширина 4, DEC, шина BUS. Лампы K0–K3 — то, что видит третье устройство.
| Деталь | Нога | Метка |
|---|---|---|
| Display | ⚙ | ширина 4, DEC, шина BUS |
| LED | вход | K0 |
| LED | вход | K1 |
| LED | вход | K2 |
| LED | вход | K3 |
6.5. Проверка
- Набери на тумблерах:
X= 5 (X0иX2),Y= 9 (Y0иY3),KS= 12 (KS2иKS3).DIR= 1,OFF= 0. SEL= 0 — на табло шины 5, лампыKпоказывают 5: говорит X, третье устройство слушает.SEL= 1 — на шине 9: говорит Y.OFF= 1 — на шине 0: никто не говорит, резисторы тянут провода к земле.- Не выключая
OFF, поставьDIR= 0 — на шине 12: теперь говорит третье устройство, через 74HC245 в обратную сторону.
Главное правило шины: говорит только один. Если при DIR = 0 выключить OFF, на шину будут гнать двое — это короткое замыкание (в симуляторе провод станет красным). На настоящей плате так горят микросхемы.
| Что видно | Что это |
|---|---|
| табло = X или Y | говорит та четвёрка 74HC244, что включена |
| табло = 0 | никто не говорит — резисторы к земле |
| лампы K = шина | 74HC245 гонит A → B (DIR = 1) |
| табло = KS | 74HC245 гонит B → A (DIR = 0) |
Вставка урока 6 (Cmd+I)
Поверх урока 5.
# Урок 6 — 74HC244 и 74HC245: буферы шины; общая шина на 4 провода — кто говорит, тот и на шине.# Вставка: Cmd+I поверх урока 5 (нужны 74HC00, 74HC04, 74HC32). # 74HC244 — 2 × 4 буфера с третьим состоянием, A → Y; 1OE, 2OE — включить свою четвёрку (активный 0). Ноги: 1 1OE, 2 1A0, 3 2Y0, 4 1A1, 5 2Y1, 6 1A2, 7 2Y2, 8 1A3, 9 2Y3, 11 2A3, 12 1Y3, 13 2A2, 14 1Y2, 15 2A1, 16 1Y1, 17 2A0, 18 1Y0, 19 2OEchip 74HC244 { portIn(1OE) portIn(1A0) portIn(1A1) portIn(1A2) portIn(1A3) portIn(2A3) portIn(2A2) portIn(2A1) portIn(2A0) portIn(2OE) portOut(2Y0) portOut(2Y1) portOut(2Y2) portOut(2Y3) portOut(1Y3) portOut(1Y2) portOut(1Y1) portOut(1Y0) # буфер: каждый вход переворачивается дважды — выход сильный и только в одну сторону; три 74HC04 = 18 инверторов (16 + два OE) 74HC04(1A=1A0, 1Y=n1A0, 2A=1A1, 2Y=n1A1, 3A=1A2, 3Y=n1A2, 4Y=n1A3, 4A=1A3, 5Y=n2A0, 5A=2A0, 6Y=n2A1, 6A=2A1) 74HC04(1A=2A2, 1Y=n2A2, 2A=2A3, 2Y=n2A3, 3A=n1A0, 3Y=b1A0, 4Y=b1A1, 4A=n1A1, 5Y=b1A2, 5A=n1A2, 6Y=b1A3, 6A=n1A3) 74HC04(1A=n2A0, 1Y=b2A0, 2A=n2A1, 2Y=b2A1, 3A=n2A2, 3Y=b2A2, 4Y=b2A3, 4A=n2A3, 5Y=e1, 5A=1OE, 6Y=e2, 6A=2OE) # ключи на выход: открыты, пока OE своей четвёрки = 0 tgate(b1A0, e1, 1Y0) tgate(b1A1, e1, 1Y1) tgate(b1A2, e1, 1Y2) tgate(b1A3, e1, 1Y3) tgate(b2A0, e2, 2Y0) tgate(b2A1, e2, 2Y1) tgate(b2A2, e2, 2Y2) tgate(b2A3, e2, 2Y3)} # 74HC245 — 8 двунаправленных буферов: DIR = 1 — A → B, DIR = 0 — B → A; OE = 1 — отключено (активный 0). Ноги: 1 DIR, 2 A0, 3 A1, 4 A2, 5 A3, 6 A4, 7 A5, 8 A6, 9 A7, 11 B7, 12 B6, 13 B5, 14 B4, 15 B3, 16 B2, 17 B1, 18 B0, 19 OEchip 74HC245 { portIn(DIR) portIn(A0) portIn(A1) portIn(A2) portIn(A3) portIn(A4) portIn(A5) portIn(A6) portIn(A7) portIn(OE) portOut(B7) portOut(B6) portOut(B5) portOut(B4) portOut(B3) portOut(B2) portOut(B1) portOut(B0) # какая сторона говорит: A → B, когда OE = 0 и DIR = 1; B → A, когда OE = 0 и DIR = 0. Выходы — «включить» для 74HC244 (активный 0) 74HC04(1A=OE, 1Y=nOE, 2A=DIR, 2Y=nDIR, 3A=GND, 4A=GND, 5A=GND, 6A=GND) 74HC00(1A=nOE, 1B=DIR, 1Y=oAB, 2A=nOE, 2B=nDIR, 2Y=oBA, 3A=GND, 3B=GND, 4A=GND, 4B=GND) # две 74HC244: одна гонит A → B, другая B → A 74HC244(1OE=oAB, 2OE=oAB, 1A0=A0, 1Y0=B0, 1A1=A1, 1Y1=B1, 1A2=A2, 1Y2=B2, 1A3=A3, 1Y3=B3, 2A0=A4, 2Y0=B4, 2A1=A5, 2Y1=B5, 2A2=A6, 2Y2=B6, 2A3=A7, 2Y3=B7) 74HC244(1OE=oBA, 2OE=oBA, 1A0=B0, 1Y0=A0, 1A1=B1, 1Y1=A1, 1A2=B2, 1Y2=A2, 1A3=B3, 1Y3=A3, 2A0=B4, 2Y0=A4, 2A1=B5, 2Y1=A5, 2A2=B6, 2Y2=A6, 2A3=B7, 2Y3=A7)} # ---------- общая шина ----------# два устройства-источника: X и Y по 4 тумблераinput(X0)input(X1)input(X2)input(X3)input(Y0)input(Y1)input(Y2)input(Y3)# кто говорит: SEL = 0 — X, SEL = 1 — Y; OFF = 1 — никтоinput(SEL)input(OFF)74HC04(1A=SEL, 1Y=nSEL, 2A=GND, 3A=GND, 4A=GND, 5A=GND, 6A=GND)74HC32(1A=SEL, 1B=OFF, 1Y=oeX, 2A=nSEL, 2B=OFF, 2Y=oeY, 3A=GND, 3B=GND, 4A=GND, 4B=GND)# 74HC244: четвёрка 1 — X на шину, четвёрка 2 — Y на шину; выходы обеих — на одни провода BUS74HC244(1OE=oeX, 2OE=oeY, 1A0=X0, 1Y0=BUS0, 1A1=X1, 1Y1=BUS1, 1A2=X2, 1Y2=BUS2, 1A3=X3, 1Y3=BUS3, 2A0=Y0, 2Y0=BUS0, 2A1=Y1, 2Y1=BUS1, 2A2=Y2, 2Y2=BUS2, 2A3=Y3, 2Y3=BUS3)# резисторы к земле: никто не говорит — на шине 0resistor(BUS0, GND)resistor(BUS1, GND)resistor(BUS2, GND)resistor(BUS3, GND)# третье устройство через 74HC245: DIR = 1 — шина → лампы K, DIR = 0 — его тумблеры KS через резисторы → шинаinput(DIR)input(KS0)input(KS1)input(KS2)input(KS3)resistor(KS0, K0)resistor(KS1, K1)resistor(KS2, K2)resistor(KS3, K3)74HC245(DIR=DIR, OE=GND, A0=BUS0, A1=BUS1, A2=BUS2, A3=BUS3, A4=UA4, A5=UA5, A6=UA6, A7=UA7, B0=K0, B1=K1, B2=K2, B3=K3, B4=UB4, B5=UB5, B6=UB6, B7=UB7)# незанятые ноги 74HC245 бывают выходами (B при DIR = 1, A при DIR = 0) — на землю только через резистор, не напрямуюresistor(UA4, GND)resistor(UA5, GND)resistor(UA6, GND)resistor(UA7, GND)resistor(UB4, GND)resistor(UB5, GND)resistor(UB6, GND)resistor(UB7, GND)# табло шины и лампы третьего устройстваdisplay{bits=4, base="DEC", busSource="BUS"}()led(K0)led(K1)led(K2)led(K3)Не получается? Что-то не работает →