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

Расширитель портов

Когда выводов микроконтроллера не хватает, ставят расширитель портов: микросхему с 8 или 16 выводами общего назначения, которой управляют по I²C или SPI. Два популярных типа — простой PCF8574 и полноценный MCP23017.

Обновлено Редакция GAW

Расширитель портов (I/O expander) — микросхема, которая добавляет микроконтроллеру выводы общего назначения. Микроконтроллер управляет ею по последовательной шине — I²C или SPI — и получает 8 или 16 дополнительных линий ввода-вывода ценой двух-четырёх своих.

Два типичных представителя:

ПараметрPCF8574MCP23017
Выводов816, два порта по 8
Направлениенет регистра — квазидвунаправленные выводырегистр направления для каждого вывода
Единица на выходеслабая, десятки–сотни микроампердвухтактный выход, миллиамперы
Подтяжкивстроенный слабый источник токавключаются программно
ШинаI²C до 100 кГцI²C до 1,7 МГц; MCP23S17 — SPI до 10 МГц
Адреса0x20–0x270x20–0x27
Прерываниеодин выход при изменении входаINTA и INTB, по изменению или сравнению

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

Выход прерывания избавляет от постоянного опроса: расширитель сообщает об изменении входа, и микроконтроллер читает порт только по событию. Выбор зависит от задачи: для индикатора HD44780 и кнопок хватает PCF8574, для клавиатур и множества светодиодов удобнее MCP23017. Подробности — в карточках PCF8574 и MCP23017, о шине — в статье «Интерфейс I²C».

Частые вопросы

Какой расширитель портов выбрать?

Для простых задач — кнопок, светодиодов, индикатора HD44780 — хватает PCF8574: 8 выводов и минимум настроек. Если нужны 16 выводов, сильный выход в единице, программные подтяжки и гибкие прерывания — MCP23017. Для быстрого опроса — SPI-версия MCP23S17.

Можно ли поставить несколько расширителей на одну шину?

Да, их различают по адресу, который задают выводы A0–A2: у PCF8574 и MCP23017 по восемь адресов от 0x20 до 0x27. Но эти диапазоны совпадают, поэтому при совместном использовании адреса разводят выводами.

Зачем расширителю выход прерывания?

Чтобы не опрашивать входы постоянно. Расширитель сам сообщает микроконтроллеру об изменении входа, и тот читает порт только тогда, когда что-то произошло. Это экономит время процессора и трафик шины.

Источники

  1. Texas Instruments. PCF8574 Remote 8-Bit I/O Expander for I2C Bus (SCPS068K, revised September 2024) — 8 квазидвунаправленных выводов без регистра направления, I²C до 100 кГц, адреса 0x20–0x27, выход прерывания при изменении входа
  2. Microchip. MCP23017/MCP23S17: 16-Bit I/O Expander with Serial Interface (DS20001952C, 2016) — 16 выводов с регистрами направления, подтяжки и прерывания по изменению, I²C до 1,7 МГц (MCP23S17 — SPI до 10 МГц), адреса 0x20–0x27, выходы INTA и INTB

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