Перейти к содержанию

Квазидвунаправленный вывод

Квазидвунаправленный вывод не нужно переключать между режимами входа и выхода: он всегда выход, но в единице настолько слабый, что внешняя схема легко переводит его в ноль. Так устроены порты расширителя 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 мкА — светодиод на общий провод светиться не будет.

Источники

  1. Texas Instruments. PCF8574 Remote 8-Bit I/O Expander for I2C Bus (SCPS068K, revised September 2024) — квазидвунаправленные выводы без управления направлением; в единице — источник тока 30–310 мкА и кратковременная сильная подтяжка при записи единицы; ноль — до 25 мА; выводы должны быть в единице перед использованием как входы
  2. Microchip (Atmel). AT89S52: 8-bit Microcontroller with 8K Bytes In-System Programmable Flash (doc. 1919) — порты 1–3 с внутренними подтягивающими резисторами: при записи единиц выводы подтянуты и могут служить входами

Нашли ошибку?