8-bit I2C I/O expander in a through-hole DIP
It provides eight push-pull output or input ports, each capable of sinking 25 mA or sourcing 1 mA, controlled through a simple two-wire serial interface. The part includes a power-on reset (POR) feature that initializes the outputs to a known state at power-up, and an interrupt output pin that signals the host when an input changes state, eliminating the need for continuous bus polling.
100 kHz I2C bus — timing budget for the system
The 100 kHz clock ceiling on the I2C interface is the standard-mode limit. If your host controller runs at 400 kHz (fast mode) or 1 MHz (fast mode plus), this expander will not keep up — you must configure the I2C master to operate at 100 kHz for this slave. That caps the throughput for reading or writing all eight ports at roughly 10 kbytes per second, which is fine for switch sensing, LED toggling, or relay latching, but too slow for streaming data or high-speed register updates.
25 mA sink, 1 mA source — what you can drive
The asymmetric current drive is the spec to watch when assigning loads to the ports. But the source capability is only 1 mA, so you cannot use a port to directly power a logic gate input or pull up a bus line without an external pull-up resistor. For inputs, the port reads a logic low when the pin is pulled below about 0.8 V at the rated sink current, and a logic high when left floating (internal pull-up is weak, around 100 µA). Plan your external pull-up resistor values accordingly.
Interrupt output for event-driven monitoring
The interrupt output (INT) goes active low whenever any input port changes state from the previous read. This lets the host microcontroller sleep or attend to other tasks instead of polling the I2C bus at a fixed interval. In a multi-expander system, the INT lines can be wire-ORed to a single host interrupt pin, and the host then reads each expander's input register to identify which one triggered the event.
This is a mature, widely second-sourced I2C expander architecture — the base number PCF8574 is used across multiple vendors.
