En esta página

¿Qué es? Precio Funcionamiento Montaje Código

PCF8575: expansión de GPIO por I2C

¿Qué es el PCF8575?

El PCF8575 es un expansor de entradas y salidas digitales de 16 bits que opera mediante el bus I2C. Su principal ventaja es permitir añadir 16 GPIO adicionales utilizando únicamente dos líneas de comunicación del microcontrolador, como SDA y SCL en plataformas tipo Arduino.

La dirección del dispositivo puede configurarse mediante pines dedicados, lo que permite conectar hasta 8 unidades en un mismo bus I2C. De este modo, es posible alcanzar un total de 128 líneas de entrada/salida adicionales sin aumentar el número de pines del microcontrolador.

Alimentación

El PCF8575 opera en un rango de tensión de entre 2.5 V y 5.5 V, lo que permite su integración tanto en sistemas de 3.3 V como de 5 V.

Consumo

El consumo en reposo es extremadamente bajo, del orden de 10 µA, lo que lo hace ideal para aplicaciones de bajo consumo o sistemas que se alimentan por batería.

Capacidad de corriente

La corriente total suministrada por el dispositivo puede alcanzar aproximadamente 100 mA, teniendo en cuenta el conjunto de todos los pines.

La comunicación se realiza a través de I2C con frecuencias de hasta 400 kHz, lo que facilita su integración en sistemas embebidos sin necesidad de implementar protocolos complejos.

El tiempo de conmutación típico es de unos 4 µs. Aunque puede emplearse para generar señales digitales de baja frecuencia, no es adecuado para aplicaciones que requieran PWM de alta velocidad, debido a las limitaciones inherentes al bus I2C.

No añade pines → cambia la arquitectura del sistema.

Precio

El PCF8575 es un componente económico y ampliamente disponible. A continuación se muestra una comparativa entre distintos fabricantes y distribuidores.

Texas Instruments

2.50€

Ver producto

Mouser Electroincs

2,37€

Ver producto

RS Iberia

3,85€

Ver módulos

¿Cómo funciona?

El PCF8575 no es un GPIO convencional → funciona como un registro remoto controlado por I2C.

El dispositivo internamente tiene un registro de 16 bits conectado directamente a los pines. Cada bit controla un pin físico (P0–P17), por lo que cuando escribes datos, en realidad estás modificando ese registro.

La comunicación es muy simple: el microcontrolador envía dos bytes seguidos. El primero afecta a los pines P0–P7 y el segundo a P10–P17. Estos valores se guardan en un latch interno, lo que permite que el estado de los pines se mantenga sin necesidad de comunicación continua.

Una de sus particularidades es que no existe configuración clásica de entrada o salida. Los pines son cuasi-bidireccionales, lo que simplifica mucho su uso:

Escribir HIGH → el pin actúa como entrada
Escribir LOW o HIGH → el pin actúa como salida

Internamente, cada pin tiene una pequeña corriente hacia VCC, lo que permite leer niveles altos cuando se utiliza como entrada sin necesidad de resistencias externas en muchos casos.

Cuando escribes un valor, este pasa por un registro interno, se almacena y se refleja directamente en los pines. No hay capas intermedias ni configuraciones complejas.

Además, el PCF8575 dispone de una salida de interrupción (INT) que se activa cuando cambia el estado de un pin de entrada, evitando tener que estar leyendo continuamente el dispositivo.

No configuras pines → escribes y lees directamente su estado

En lectura, el proceso es igual de directo: el microcontrolador solicita los datos y recibe el estado actual de todos los pines en dos bytes.

Esquema de montaje

La dirección se configura con A0, A1 y A2
INT
1
A1
2
A2
3
P0
4
P1
5
P2
6
P3
7
P4
8
P5
9
P6
10
P7
11
GND
12
PCF8575
24
VCC
23
SDA
22
SCL
21
A0
20
P17
19
P16
18
P15
17
P14
16
P13
15
P12
14
P11
13
P10
Haz clic en un pin

Ejemplo de código

En este ejemplo se utiliza el PCF8575 no solo como expansor de salidas, sino también como interfaz de entrada.

Se configura el pin P1 como entrada, al que se conecta un pulsador, y el pin P0 como salida, donde se encuentra el LED.

En cada iteración del programa, se lee el estado de P1 mediante digitalRead(). Si el pulsador está activo (nivel alto), se escribe un nivel alto en P0, encendiendo el LED. En caso contrario, el LED permanece apagado.

Este comportamiento refleja una característica clave del PCF8575: sus pines son cuasi-bidireccionales, lo que permite usarlos dinámicamente como entrada o salida sin hardware adicional complejo.

Este tipo de configuración es especialmente útil cuando se necesita ampliar el número de entradas/salidas de un microcontrolador manteniendo una arquitectura simple basada en I2C.

La librería utilizada es la desarrollada por Xreef, cuyo código se puede encontrar en el enlace de su github: PCF8575 Library.
Arduino
 1#include <PCF8575.h> 2// Dirección I2C del PCF8575 3PCF8575 pcf8575(0x20); 4 5void setup() { 6 Serial.begin(115200); 7 // P1 como entrada (botón) 8 pcf8575.pinMode(P1, INPUT); 9 // P0 como salida (LED) 10 pcf8575.pinMode(P0, OUTPUT); 11 pcf8575.begin(); 12} 13 14void loop() { 15 bool estado = pcf8575.digitalRead(P1); 16 if(estado == HIGH) { 17 pcf8575.digitalWrite(P0, HIGH); 18 } else { 19 pcf8575.digitalWrite(P0, LOW); 20 } 21}