

The PCF8575C is a 16-bit I/O port expander that communicates via the I2C protocol. It is designed to provide additional GPIO (General Purpose Input/Output) pins for microcontrollers, making it an ideal solution for applications requiring more I/O capabilities than the microcontroller natively supports. The device operates as a bidirectional I/O expander, allowing each pin to be configured as either an input or an output.








The PCF8575C has 24 pins. Below is the pin configuration:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | P0.0 | GPIO Pin 0 (Port 0, Bit 0) |
| 2 | P0.1 | GPIO Pin 1 (Port 0, Bit 1) |
| 3 | P0.2 | GPIO Pin 2 (Port 0, Bit 2) |
| 4 | P0.3 | GPIO Pin 3 (Port 0, Bit 3) |
| 5 | P0.4 | GPIO Pin 4 (Port 0, Bit 4) |
| 6 | P0.5 | GPIO Pin 5 (Port 0, Bit 5) |
| 7 | P0.6 | GPIO Pin 6 (Port 0, Bit 6) |
| 8 | P0.7 | GPIO Pin 7 (Port 0, Bit 7) |
| 9 | GND | Ground |
| 10 | A0 | I2C Address Selection Bit 0 |
| 11 | A1 | I2C Address Selection Bit 1 |
| 12 | A2 | I2C Address Selection Bit 2 |
| 13 | RESET | Active Low Reset Input |
| 14 | SCL | I2C Clock Line |
| 15 | SDA | I2C Data Line |
| 16 | INT | Interrupt Output (Active Low) |
| 17 | P1.0 | GPIO Pin 8 (Port 1, Bit 0) |
| 18 | P1.1 | GPIO Pin 9 (Port 1, Bit 1) |
| 19 | P1.2 | GPIO Pin 10 (Port 1, Bit 2) |
| 20 | P1.3 | GPIO Pin 11 (Port 1, Bit 3) |
| 21 | P1.4 | GPIO Pin 12 (Port 1, Bit 4) |
| 22 | P1.5 | GPIO Pin 13 (Port 1, Bit 5) |
| 23 | P1.6 | GPIO Pin 14 (Port 1, Bit 6) |
| 24 | P1.7 | GPIO Pin 15 (Port 1, Bit 7) |
Below is an example of how to use the PCF8575C with an Arduino UNO to toggle an LED connected to one of its GPIO pins:
#include <Wire.h> // Include the Wire library for I2C communication
#define PCF8575C_ADDRESS 0x20 // Default I2C address (A0, A1, A2 = GND)
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Set all pins as outputs and turn them off
Wire.beginTransmission(PCF8575C_ADDRESS);
Wire.write(0x00); // Low byte (P0.0 to P0.7)
Wire.write(0x00); // High byte (P1.0 to P1.7)
Wire.endTransmission();
}
void loop() {
// Turn on an LED connected to P0.0
Wire.beginTransmission(PCF8575C_ADDRESS);
Wire.write(0x01); // Set P0.0 high, others low
Wire.write(0x00); // Keep P1.x pins low
Wire.endTransmission();
delay(1000); // Wait for 1 second
// Turn off the LED
Wire.beginTransmission(PCF8575C_ADDRESS);
Wire.write(0x00); // Set all P0.x pins low
Wire.write(0x00); // Set all P1.x pins low
Wire.endTransmission();
delay(1000); // Wait for 1 second
}
No Response from the Device:
GPIO Pins Not Responding:
Interrupt Pin Not Working: