Порты у PCF8574 назваются «квази-двунаправленными» (Quasi-bidirectional I/Os). И это «квази» — оно неспроста.
Смотрим на схему порта:
Порт ввода/вывода
Фактически, при операции записи одного байта в PCF8574 происходит выставление подтяжек портов ввода/вывода исходя из значения соответствующего порту бита данных.
Причем, если в бит установлен в ноль, происходит «честная» подтяжка порта к земле (2).
А вот если бит установлен в единицу, порт будет подтянут к питанию — но как! — с ограничением тока в жалкие 100 uA (1)! То есть логический уровень есть, но светодиод с такой подтяжкой не зажжешь.
Еще на схеме порта виден транзистор (3), который как раз может подтянуть порт к питанию напрямую. Но увы, он включается только на короткое время, чтобы обеспечить быстрое переключение порта в логическую единицу. И управлять поведением этого транзистора мы не можем.
Чтение из PCF8574 — операция более простая для понимания. Какие уровни установлены на портах с учетом текущей подтяжки и того, что подключено к портам извне — то и будет отправлено микроконтроллеру.
Не то, чтобы такое построение порта сильно ограничивало возможности, но оказаться неприятным сюрпризом оно вполне может.
Так, светодиоды к PCF8574 надо подключать так, чтобы к порту подключался катод (минус) светодиода. Светодиод, подключенный анодом (плюсом) убогая подтяжка порта просто не потянет.