PCF8574: consigue más pines de conexión para Arduino

pcf8574

Puede que te hayas encontrado en alguna situación en la que te gustaría ampliar la cantidad de entradas y salidas de las que dispone tu placa Arduino, ya que estás realizando un proyecto que necesita más dispositivos de los esperados. En estos casos solo podías hacer una cosa, y es pensar en comprar una placa de un modelo superior con más cantidad de estas conexiones. Pero ahora con el PCF8574 puedes expandir el E/S de Arduino de una forma fácil y barata.

Aquí te mostraremos qué es el PCF8574 por si no lo conocías, además de enseñar cómo se puede conectar a tu placa Arduino explicado paso a paso y cómo funciona…

¿Qué es el PCF8574?

pcf8574

El PCF8574 es un expansor de entradas y salidas (E/S) digitales para el bus I2C1. Este dispositivo, fabricado por Philips, permite conectar un procesador como Arduino para controlar más dispositivos empleando menos pines2. El PCF8574 incorpora 8 pines cuasi-direccionales basados en salidas CMOS en configuración de drenador abierto.

Además, el PCF8574 es un dispositivo de bajo consumo que admite operaciones de VCC de 2.5 V a 6V. Cuenta con un puerto de E/S cuasi-bidireccional de 8 bits, salidas enganchadas, salida de interrupción de drenador abierto y capacidad de conducción de alta corriente para LEDs. Por otro lado su consumo en stand-by es muy bajo, de menos de 10 µA.

Es muy útil para ampliar las capacidades de tu placa Arduino más allá de sus límites, lo cual puede ser de gran ayuda para los creadores que necesitan algo más que lo que ofrece Arduino. La corriente máxima que puede suministrar cada pin, dependerá de la configuración:

  • Cuando actúa como salida, es de 25mA cuando actúa como sink (sumidero), es decir, cuando la corriente eléctrica fluye hacia el PCF8574. Esta es la configuración por defecto.
  • Cuando actúa como source (fuente) es de 300µA, es decir, cuando la corriente fluye desde el PCF8574. Así mismo, hay que saber que todas las salidas disponen de Latches, es decir, mantienen el estado por sí mismas en un registro. Únicamente debernos actuar cuando queramos modificar el estado de unas de las salidas.

La comunicación se realiza a través del bus I2C, por lo que es sencillo obtener los datos de los dispositivos conectados a él. Así mismo, hay que destacar que dispone de 3 pines de dirección, lo que da 8 posibles conectados al mismo bus I2C. Esto quiere decir que es posible controlar 64 dispositivos usando únicamente 2 pines.

Configuración de direcciones

Algunos modelos de este módulo PCF8574 suelen incluir pines de configuración y jumpers como los que ves en la imagen superior. En cambio, otros modelos incluyen un switch que facilita las cosas con los tres microinterruptores… Sea como sea, sirven para configurar las direcciones de los pines de E/S:

A0 A1 A2 Dirección
0 0 0 0x20
0 0 1 0x21
0 1 0 0x22
0 1 1 0x23
1 0 0 0x24
1 0 1 0x25
1 1 0 0x26
1 1 1 0x27

Precio y dónde comprar

Se puede encontrar por tan solo unos euros. Es un dispositivo bastante barato para lo práctico que puede resultar para algunos modelos de Arduino que cuentan con menor número de E/S. Así que si estás buscando un PCF8574, puedes encontrarlo en tiendas especializadas o también en grandes plataformas online como Amazon, Aliexpress o en eBay. Por ejemplo, aquí te recomendamos uno:

Conexión del PCF8574 a Arduinno

Para conectar el expansor PCF8574 a tu placa de Arduino, el esquema de conexión es bastante simple. Tan solo tendrás que conectar:

  • El pin SCL marcado en la placa PCF8574 al pin SCL de Arduino. Este pin puede cambiar según el modelo, pero generalmente es en el A5 en los modelos más populares como el UNO.
  • El pin SDA del expansor tiene que conectarse con el pin SDA de Arduino. Lo mismo que he comentado anteriormente, puede cambiar según el modelo, pero generalmente es el A4. Si dudas, consulta el pinout de tu modelo.
  • El pin GND del PCF8574 irá conectado por supuesto al marcado como GND en Arduino, es decir, es la conexión de tierra.
  • El pin Vcc del expansor va conectado a 5V de Arduino, de esta forma, con GND y Vcc tenemos ya alimentada la placa expansora para que pueda comenzar a funcionar.

Funcionamiento

Una vez el PCF8574 está conectado a la placa Arduino, ahora toca conocer cómo es su funcionamiento. Para ello, tienes que tener en cuenta que podrás contar con 8 pines extra, a cambio de haber usado dos de Arduino, además de los de alimentación. Por otro lado, tienes que tener en cuenta algo, y es que en cada uno de esos 8 pines del PCF8574 tienes un transistor MOSFET junto con una resistencia pull-up de muy baja resistencia. Esto supone una intensidad de corriente de 100 microA cuando el transistor está activo.

Y esto nos deja el siguiente panorama:

  • Configuración como salida: cuando el pin se usa como salida, actúa como un sumidero de corriente, como he comentado anteriormente, es decir, la corriente fluye hacia dentro.
    • LOW: cuando está a bajo voltaje, no conduce la corriente, la carga = Vdd.
    • HIGH: cuando está a alto voltaje, puede pasar hasta 25mA de corriente, la carga quedará conectada a GND.
  • Configuración como entrada: se debe poner siempre en HIGH o alto, y en este caso actuará como una fuente, es decir, la corriente fluye hacia fuera.
    • Cerrada: cuando la carga externa no se da, la tensión en el pin pasa a GND.
    • Abierta: cuando se produce una carga externa, la tensión del pin pasa a Vdd.

Código Arduino IDE

Arduino IDE, tipos de datos, programación

Si lo que quieres es algunos ejemplos de cómo crear código para usar este PCF8574 en Arduino, es tan sencillo como usar estos ejemplos de código que podrás modificar según tus necesidades:

  • Configuración como salida:

#include <Wire.h>

const int pcfAddress = 0x38;

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  for (short channel = 0; channel < 8; channel++)
  {
    // Escribir dato en canal 'channel'
    Wire.beginTransmission(pcfAddress);
    Wire.write(~(1 << channel));
    Wire.endTransmission();
    
    // Leer dato de canal
    delay(500);
  }
}
  • Configuración como entrada:

#include <Wire.h>

const int pcfAddress = 0x38;

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  short channel = 1;
  byte value = 0;

  // Leer dato de canal 'channel'
  Wire.requestFrom(pcfAddress, 1 << channel);
  if (Wire.available())
  {
    value = Wire.read();
  }
  Wire.endTransmission();

  // Mostrar el valor por puerto serie
  Serial.println(value);
}

Recuerda que también puedes usar la biblioteca creada especialmente para el PCF8574 que también incluye ejemplos prácticos…


Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.