Módulo PCF8574

Como comentábamos en la entrada donde explorábamos la posibilidad de aumentar el número de entradas analógicas, una de las carencias del ESP8266 o del ESP32 es sin duda la falta de pines de entrada y salida tanto digitales como analógicos, es por eso que desde estas entradas intentamos resolver este problema lo hicimos ayer con las entradas y salidas analógicas, hoy es turno de las digitales con el módulo PCF8574

El circuito integrado PCF8574 es un expansor de entradas y salidas digitales de 8 canales, muy útil cuando necesitamos un extra del microcontrolador para cuando nuestros proyectos se hacen demasiado grandes.

Este integrado no se entiende sin la librería PCF8574.h que si no la tienes descargada puedes hacerlo directamente desde el sitio oficial de Arduino pinchando en este enlace.

En esta entrada construiremos un Módulo PCF8574 multidireccional, apto para cualquier tipo de microcontrolador que soporte la comunicación I2C.

Lista de materiales

  • 3 diodos LED
  • 3 resistencias de 330Ω
  • 6 resistencias de 10kΩ
  • 2 resistencias de 4k7Ω
  • 1 circuito integrado PCF8574
  • 1 switch slide de 3 pines.

Esquema del módulo PCF8574

El esquema de este proyecto es el siguiente:

Esquema del módulo PCF8574

Sobre el módulo PCF8574

  • Como en todas las entradas relacionadas con el Expansor I/O para el ESP8266 (proyecto que estamos construyendo módulo por módulo) he añadido bloques de terminal para conectar los cables de entrada o salidas, estos son totalmente opcionales.
  • El switch slide es opcional, puedes usar tres pines digitales de tu microcontrolador favorito en su lugar. ya que son los encargados de darle la dirección I2C al integrado.
  • Aunque las resistencias usadas para limitar la corriente a los LED en el esquema es de 220Ω es recomendable usar resistencias de 330Ω.
  • La tensión de entrada del módulo es de 5VDC.

Direccionamiento del módulo

Para toda comunicación I2C es necesario dar un direccionamiento para que nuestro microcontrolador pueda enviarle datos.

Este direccionamiento viene dado por los pines A0, A1 y A2 del circuito integrado y se consigue poniendo a nivel alto o bajo sus entradas siendo A0 el pin de mayor valor, a continuación te adjunto una tabla con todas las direcciones posibles.

En este módulo conseguimos este nivel alto o bajo digital con el switch slide y una configuración de resistencias pull-down que evita que el integrado pueda dañarse en ese momento en el que el switch no esta del todo abierto o cerrado.

Tabla de direccionamiento para el modulo PCF8574

Sobre la librería PCF8574.h

Para controlar este integrado existe una librería dedicada para ello, como comenté en la introducción puedes descargarla directamente desde el sitio oficial de arduino.

Esta librería nos permite controlar las entradas y salidas digitales del circuito integrado como si se trataran entradas y salidas propias del microcontrolador, lo que hace muy amena su implementación.

Tanto es así que he decidido no crear la mía propia ya que no conseguiría un mejor resultado de que ya disponemos.

A continuación te dejo un código de ejemplo de una secuencia de LED’s controlados por este integrado:

/*
  Contador decimal usando el integrado 74HC595 y un display de 7 segmentos

  Este programa nos permite mostrar el valor decimal de una variable en un
  display de 7 segmentos usando el integrado 74HC595 controlado por dos botones
  que suman o restan una unidad a la variable de control (i)

  Autor: Alexdevrep
  Fecha: 24/3/2024
  Más contenido interesante en :
    -GitHub: https://www.github.com/alexdevrep
    -Instagram: https://www.instagram.com/alexdevrep/
    -Mi blog de WordPress: https://www.eltallerdealexdevrep.com/
    -Youtube: https://www.youtube.com/channel/UCNlqgVY-CaQ2Lgc5xJChaKA

*/

#include <Wire.h>
#include <PCF8574.h>

#define PCF8574_ADDRESS 0x26 // Dirección I2C del PCF8574
PCF8574 pcf8574(PCF8574_ADDRESS);

void setup() {
  Wire.begin(); // Inicia la comunicación I2C
  pcf8574.begin(); // Inicia el PCF8574
  Serial.begin(9600); // Inicia la comunicación serie
  pcf8574.pinMode(P0, OUTPUT);
  pcf8574.pinMode(P1, OUTPUT);
  pcf8574.pinMode(P2, OUTPUT);
  pcf8574.pinMode(P3, OUTPUT);
  pcf8574.pinMode(P4, OUTPUT);
  pcf8574.pinMode(P5, OUTPUT);
  pcf8574.pinMode(P6, OUTPUT);
  pcf8574.pinMode(P7, OUTPUT);
  // Configura todos los pines del PCF8574 como salidas y los inicializa en LOW
  for (int i = 0; i < 8; i++) {
    pcf8574.digitalWrite(i, LOW); // Establece el pin como salida en estado bajo
  }
}

void loop() {
  for (int i = 0; i < 8; i++) { // El PCF8574 tiene 8 pines
    pcf8574.digitalWrite(i, HIGH); // Pone el pin 'i' en nivel alto
    delay(1000); // Espera 1 segundo
    pcf8574.digitalWrite(i, LOW); // Pone el pin 'i' en nivel bajo
  }

  delay(1000); // Espera antes de repetir el ciclo
}

Vídeo de funcionamiento

A continuación te dejo un vídeo donde puedes comprobar el funcionamiento de este módulo:

Vídeo del funcionamiento.

Aún hay más, si has llegado hasta aquí y te apetece construir el tuyo te dejo los archivos Gerber del proyecto listos para fabricar en mi perfil de GitHub.

Fin a esta entrada, como siempre te invito a dejarme un comentario con tus dudas en impresiones, estaré encantado de leerte, ya estamos llegando al final de esta serie, como capítulo final tendremos una descripción del proyecto completo y su historia. 😀

Deja un comentario

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

Scroll al inicio