Коротко о модуле PCF8574
Модуль PCF8574 добавляет восемь цифровых линий P0–P7 к микроконтроллеру через шину I²C. Он подходит для кнопок, концевых выключателей, дискретных сигналов и несложной индикации, когда основной плате не хватает GPIO.
Порты квазидвунаправленные: запись 0 активно подтягивает линию к LOW, а запись 1 отпускает ее и оставляет слабый источник тока к VCC. Поэтому HIGH здесь не является обычным сильным push-pull выходом, а перед чтением линии как входа в ее latch нужно записать 1.[1][2]
Ключевые характеристики
- Назначение
- расширение цифровых входов и выходов через I²C
- Линии порта
- 8 квазидвунаправленных, P0–P7
- Микросхема
- PCF8574 или PCF8574A; определяется по маркировке
- Питание
- 2,5–6 В
- Шина
- I²C, Standard-mode до 100 кГц
- Адрес PCF8574
0x20–0x27, в зависимости от A0–A2- Адрес PCF8574A
0x38–0x3F, в зависимости от A0–A2- Прерывание
- INT, активный LOW, выход с открытым стоком
- Размеры модуля
- 48 × 15,5 мм
- Масса
- 5,6 г
- Рабочая температура
- −40…+85 °C
Подробное описание и особенности
Как работают P0–P7
PCF8574 не имеет отдельного регистра направления, привычного для GPIO большинства микроконтроллеров. Один записанный бит определяет поведение линии: 0 включает активное подтягивание к земле, а 1 отключает сильный LOW-драйвер. После подачи питания все восемь линий находятся в отпущенном HIGH-состоянии.[1][2]
Для кнопки между Pn и GND сначала оставьте соответствующий бит равным 1. Ненажатая кнопка читается как HIGH, а нажатая подтягивает вход к LOW. Если библиотека после чтения случайно запишет полученный LOW обратно в latch, линия останется активно прижатой к земле даже после отпускания кнопки.
Адресация и масштабирование
Контакты A0, A1 и A2 задают один из восьми адресов в пределах установленного семейства микросхемы. Для PCF8574 используются 7-битные адреса 0x20–0x27, для PCF8574A — 0x38–0x3F.[1] На одной шине можно использовать до восьми модулей одного варианта, если каждому назначен уникальный адрес, и получить до 64 дополнительных дискретных линий.
Выход INT переходит в LOW при изменении состояния входа и позволяет сообщить контроллеру о событии без постоянного опроса всех P0–P7. INT имеет открытый сток и требует корректной подтяжки в пределах логического напряжения системы.[1][2]
Питание и логические уровни
Диапазон питания микросхемы составляет 2,5–6 В, но это не означает автоматическую совместимость любой комбинации 3,3- и 5-вольтовых узлов. Уровень HIGH на входах зависит от VCC, а линии SDA и SCL подтягиваются к напряжению шины.[2] Для 3,3-вольтового контроллера питайте модуль в совместимом домене и убедитесь, что подтяжки I²C не поднимают SDA, SCL или INT до опасного для контроллера напряжения.
PCF8574 лучше поглощает ток в LOW, чем отдает его в HIGH. Для светодиодов используйте токоограничивающие резисторы, а для реле, двигателей, соленоидов и других нагрузок — отдельные транзисторные ключи или драйверы. Значения из раздела Absolute Maximum не являются допустимыми рабочими режимами, а число 25 мА не следует трактовать как гарантированный ток каждого из восьми каналов одновременно.[2]
Подойдет / не подойдет
Подойдет
- для добавления восьми медленных дискретных входов или выходов через I²C;
- для кнопок, переключателей, концевых выключателей и контактных датчиков;
- для индикаторных светодиодов с правильно рассчитанными резисторами;
- для систем, где изменения входов нужно отслеживать через линию INT;
- для Arduino-, ESP32- и других контроллеров после согласования питания и логических уровней.
Не подойдет
- для аналоговых измерений, ADC или DAC;
- как аппаратный PWM-генератор или источник точных быстрых импульсов;
- для прямого питания реле, двигателей, мощных светодиодов или других токовых нагрузок;
- как I²C-мультиплексор для устройств с одинаковыми адресами;
- когда требуется обычный симметричный push-pull HIGH/LOW на каждом выходе.
Примеры применения
Панель с кнопками
Подключите до восьми кнопок между P0–P7 и GND, оставьте входные биты в состоянии 1 и добавьте программное устранение дребезга контактов.
Контроль концевых выключателей
Собирайте состояния дверей, крышек или механических ограничителей, а INT используйте для уведомления контроллера об изменении входа.
Низкотоковая индикация
Управляйте отдельными индикаторными LED через резисторы; схема с поглощением тока в LOW обычно лучше соответствует асимметрии выходов PCF8574.
Управляющие сигналы через драйвер
Используйте P0–P7 как логические команды для проверенного транзисторного каскада или специализированного драйвера, а питание нагрузки проводите отдельно.
Подключение и первый запуск
-
Выберите напряжение шины
Согласуйте VCC модуля с логическими уровнями контроллера и всеми подтяжками SDA, SCL и INT.
-
Соедините основные контакты
Подключите VCC, GND, SDA и SCL. Земля модуля, контроллера и внешних драйверов должна быть общей, если схема не использует специально спроектированную гальваническую развязку.
-
Определите адрес
Сверьте надпись PCF8574 или PCF8574A на микросхеме, проверьте состояние A0–A2 и выполните безопасное сканирование I²C без записи байта в порт.
-
Задайте безопасное начальное состояние
Для линий, которые будут работать входами, запишите
1. Не используйте0x00как тест присутствия: такая запись активно подтянет все P0–P7 к LOW. -
Проверьте нагрузку
Перед включением реле, индикаторов или внешних входов проверьте ток, полярность, начальные состояния и поведение программы после reset.
Подробнее о latch, released HIGH, адресах и безопасной работе библиотек: PCF8574 без магии: как работают квазидвунаправленные входы-выходы.
Ограничения и безопасность
Не подключайте силовую нагрузку напрямую
Катушки реле, двигатели, соленоиды и мощные светодиоды требуют отдельного драйвера, рассчитанного источника питания и защиты от индуктивных выбросов. Перегрузка P0–P7 может повредить микросхему.
HIGH не является сильным push-pull уровнем
Запись 1 отпускает сильный LOW-драйвер и оставляет слабый источник тока. Не проектируйте схему так, будто P0–P7 могут симметрично отдавать и поглощать одинаковый ток.
Избегайте конфликта выходов
Не соединяйте P0–P7 напрямую с push-pull выходом другого контроллера. Если PCF8574 запишет LOW, а второй выход подаст HIGH, между драйверами возникнет чрезмерный ток.
Проверяйте запуск библиотеки
Инициализационная запись изменяет физические состояния P0–P7. До подачи питания определите безопасный байт для active-low нагрузок и входов, а после reset не допускайте кратковременного нежелательного включения внешнего оборудования.
FAQ
Какой I²C-адрес указывать в программе?
Для PCF8574 используйте адрес из диапазона 0x20–0x27, для PCF8574A — 0x38–0x3F. Точное значение зависит от A0–A2, поэтому проверьте маркировку микросхемы и результат I²C-сканера.
Как сделать Pn входом?
Запишите 1 в соответствующий latch-бит, а затем считывайте физический уровень. Если оставить 0, PCF8574 сама будет активно удерживать линию в LOW.
Можно ли напрямую управлять реле?
Нет. Используйте транзисторный ключ или драйвер с необходимым током и защитой катушки; P0–P7 должны подавать только управляющий сигнал.
Поддерживает ли модуль PWM?
Аппаратного PWM в PCF8574 нет. Частые записи через I²C создают программное переключение с ограниченной частотой и джиттером, поэтому для стабильного PWM нужен специализированный контроллер.
Можно ли подключить несколько одинаковых I²C-датчиков к P0–P7?
Нет. P0–P7 являются цифровыми линиями, а не дополнительными шинами SDA/SCL. Для разделения I²C-устройств с одинаковыми адресами нужен I²C-коммутатор или мультиплексор.
Совместимые платы и альтернатива
- Для 5-вольтового прототипа подойдет плата UNO R3; модуль и I²C-подтяжки можно держать в одном 5-вольтовом логическом домене.
- Для 3,3-вольтового IoT-проекта можно использовать ESP32 MiniKit; питание модуля и подтяжки шины должны оставаться безопасными для 3,3-вольтовых GPIO.
- Если требуется не добавить GPIO, а разделить устройства с одинаковыми I²C-адресами, выберите 8-канальный I²C-коммутатор TCA9548A.
Документы и источники
- NXP Semiconductors — PCF8574; PCF8574A Remote 8-bit I/O expander for I²C-bus with interrupt, Rev. 5, 27 May 2013: квазидвунаправленные порты, начальное состояние, адреса, INT и Standard-mode I²C.
- Texas Instruments — PCF8574 Remote 8-Bit I/O Expander for I²C Bus, SCPS068K, Rev. K, September 2024: рабочие условия, токовые ограничения, логические уровни и устройство P-порта.