Convertir una pantalla LCD a I2C con el chip PCF8574


En esta entrada os voy a enseñar como poder adaptar vuestras pantallas LCD a una pantalla que se comunique a través del protocolo I2C (empleando sólo dos pines SDA y SCL). En una anterior entrada hemos hablado de un módulo que permite realizar esta operación de manera sencilla y económica, pero y si queremos montarnos nuestro propio módulo, o asignar diferentes direcciones a dispositivos para nuestros proyectos porque hay varios dispositivos con la misma dirección y no podemos trabajar con ambos. Todo esto es muy sencillo gracias al integrado PCF8574, que es un expansor de entradas/salidas compatible con la mayoría de los microcontroladores existentes, que nos permite convertir una comunicación en paralelo con un dispositivo a una comunicación I2C, además de poder indicar la dirección que queremos asignar a este dispositivo I2C.

Aquí podéis ver el pinout del integrado PCF8574N:

Pinout PCF8574

Hay que tener en cuenta que se pueden encontrar dos tipos de integrados PCF8574, uno el PCF8574N y otro el PCF8574A, que se diferencian en el valor de la dirección del dispositivo que podemos asignar, aumentando así las posibilidades a la hora de crear más dispositivos I2C para trabajar con nuestras placas Arduino, os dejo unas imagenes de como poder seleccionar la dirección I2C para el dispositivo en cada uno de los integrados arriba mencionados y una tabla de referencia de direcciones para el PCF8574N según se conecten los pines A0, A1 y A2.

Direcciones diferentes PCF8574

Tabla referencia Direcciones I2C

Ahora vamos a ver como cablear nuestras pantalla LCD al integrado PCF8574 para conseguir una comunicación I2C entre nuestro Arduino y la pantalla LCD:

LCD I2C PCF8574

NOTA: Faltan por conectar las resistencias de pullup de 4.7K en las líneas SDA y SCL que van a nuestro Arduino.

Yo he optado por conectar los pines A0, A1 y A2 del PCF8574 a tierra, para así obtener como dirección del dispositivo I2C (en este caso la pantalla LCD) 0x20 (en valor hexadecimal).

Os pongo también el esquemático en Eagle por si alguien lo entiende mejor que con el Fritzing:

Esquemático eagle PCF8574 LCD

Os pongo el ejemplo que he usado para realizar las pruebas básicas de funcionamiento y con el que no he tenido ningún problema:

#include <Wire.h> 
#include <LCD_I2C.h>

LCD_I2C lcd(0x20,16,2);  //Indicamos la dirección de la pantalla LCD 0x20 y el numero de columnas y filas 16*2

void setup()
{
  lcd.init(); //Inicializamos la pantalla LCD
  lcd.backlight();  //Activamos la iluminación de la pantalla
  //lcd.noBacklight(); //Desactivamos la iluminación de la pantalla
  lcd.setCursor(1,0);
  lcd.print("Visitanos en:");  //Imprimimos un mensaje
  lcd.setCursor(1,1);
  lcd.print("Taller Arduino");
}

void loop()
{
}

Aquí podéis ver el resultado:

IMAG0021

Para conseguir que funcionara todo correctamente he tenido que modificar la librería LyquidCrystal_I2C, así que en este archivo comprimido va una librería con la que funciona perfectamente la pantalla LCD, así como el datasheet del PCF8574 y el archivo Fritzing: https://www.mediafire.com/?3tcm58ig07a2eb5

Espero que os sirva de ayuda la entrada!!

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

5 comentarios en “Convertir una pantalla LCD a I2C con el chip PCF8574”

  1. Esto es de hace varios años, no se si lo leeras.
    Quise simular todo el conjunto en Proteus 8 con la libreria de arduino, pero no me imprime nada en el LCD.
    Tenes idea si este circuito es simulable?

  2. La verdad es que no he probado a realizar su simulación. Creo que haciendo uso del PCF8574 junto a una pantalla LCD en proteus y con la librería de pantalla I2C si que se veían en pantalla datos, pero no te se decir. Tengo que probar a ver si soy capaz de simularlo, en la realidad si que funciona correctamente.

  3. Gracias por contestar.
    Logre que imprimiera en el LCD, una conección mal.
    El problema que cuando logre imprimir, me hacia un solo carácter, la «H» del «Hola Mundo!», buscando en San Google, encontré que alguien decía que había que modificar el archivo .cpp y cambiar todos los return 0 por return 1, y ahí logre que imprima la frase completa.

  4. Hola, compre un circuito integrado PCF8574P para agrearlo a la placa del lcd con el circuito impreso, el problema que encuentro es que no se en que direccion hex esta, A0 A1 A2 estan conectados a negativo, y supuestamente la direccion seria 0x40?, pero veo en el recuadro de arriba que el pcf8574p figura como 0x20, soy novato en arduino, intente buscar la direccion con el monitor serial pero el recuadro estaba en blanco, ayuda, gracias.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s