Квазидвунаправленный вывод
Квазидвунаправленный вывод не нужно переключать между режимами входа и выхода: он всегда выход, но в единице настолько слабый, что внешняя схема легко переводит его в ноль. Так устроены порты расширителя PCF8574 и классических микроконтроллеров 8051.
Обновлено Редакция GAW
Квазидвунаправленный вывод (quasi-bidirectional I/O) — вывод порта, который одновременно служит и выходом, и входом без отдельного регистра направления. В нуле его тянет к общему проводу сильный транзистор, а в единице к питанию подключён лишь слабый источник тока. Внешняя схема легко пересиливает эту единицу, а значит, вывод в единице работает как вход с подтяжкой.
На примере расширителя портов PCF8574 по даташиту TI:
| Состояние | Ток вывода |
|---|---|
| Ноль | до 25 мА втекающего тока (гарантированно 10 мА при 1 В и 5 В питания) |
| Единица | 30–310 мкА вытекающего тока |
| Момент записи единицы | кратковременно около 1 мА — до спада следующего такта SCL |
Отсюда правило работы: чтобы использовать вывод как вход, в него сначала записывают единицу, и TI прямо требует, чтобы выводы были в единице перед использованием как входы. После включения питания выводы PCF8574 уже в единице. Кратковременная сильная подтяжка при записи единицы нужна, чтобы быстро зарядить ёмкость линии: слабого тока на это не хватило бы.
Квазидвунаправленные порты были и у классических микроконтроллеров семейства 8051 — их устройство разобрано в статье «Архитектура 8051». Похожая, но не одинаковая схема — открытый сток: у него подтяжки внутри нет вовсе. Адреса, подключение кнопок и светодиодов к расширителю — в карточке PCF8574.
Частые вопросы
Как прочитать вход на квазидвунаправленном выводе?
Сначала записать в вывод единицу: тогда он подтянут к питанию слабым током и внешняя кнопка или датчик могут перевести его в ноль. Затем прочитать состояние. Если в выводе записан ноль, он сильно тянет линию к общему проводу, и прочитать внешний сигнал не получится.
Чем квазидвунаправленный вывод отличается от открытого стока?
У открытого стока в единице вывод вообще не подтянут — нужна внешняя подтяжка. У квазидвунаправленного подтяжка внутренняя и слабая, а при записи единицы на короткое время включается сильная, чтобы быстрее зарядить ёмкость линии. В остальном поведение похожее: сильный ноль и слабая единица.
Можно ли питать светодиод от квазидвунаправленного вывода?
Только током втекающим в вывод: светодиод включают анодом к питанию через резистор, катодом к выводу, и он горит при нуле. У PCF8574 в нуле вывод принимает до 25 мА, а в единице отдаёт лишь 30–310 мкА — светодиод на общий провод светиться не будет.
Источники
- Texas Instruments. PCF8574 Remote 8-Bit I/O Expander for I2C Bus (SCPS068K, revised September 2024) — квазидвунаправленные выводы без управления направлением; в единице — источник тока 30–310 мкА и кратковременная сильная подтяжка при записи единицы; ноль — до 25 мА; выводы должны быть в единице перед использованием как входы
- Microchip (Atmel). AT89S52: 8-bit Microcontroller with 8K Bytes In-System Programmable Flash (doc. 1919) — порты 1–3 с внутренними подтягивающими резисторами: при записи единиц выводы подтянуты и могут служить входами
Нашли ошибку?
Смотрите также
- PCF85748 выводов по I²C: адреса, квазидвунаправленные порты, токи, INT
- Архитектура 8051Память, SFR, машинный цикл, порты, таймеры, UART и прерывания
- Открытый стокВыход только с транзистором к земле, единицу даёт подтяжка
- Подтягивающий резисторPull-up и pull-down: определённый уровень на свободной линии