jueves, 17 de diciembre de 2015

Display LCD 16x2 con comunicación I2C

 
Aquí les dejo como simplificar la conexión de un LCD 16x2 (consta de 2 líneas y 16 caracteres por línea), mediante comunicación I2C (SCL y SDA únicamente), puesto que por el método tradicional, necesitaríamos un potenciómetro lineal de 10KΩ además de ocupar un gran número de pines digitales, con lo que el montaje del circuito se complicaría en exceso, aunque no va a ser nuestro caso.
Para realizar las conexiones de nuestro montaje, necesitamos un módulo LCM 1602 I2C V1, que es el encargado de realizar la comunicación I2C entre el Arduino y el LCD 1602. Este módulo consta de un expansor de E/S de 8 bits destinado a la comunicación I2C, el cual le podemos encontrar en las versiones PCF8574 y PCF8574A, un potenciómetro para controlar el contraste del LCD, una serie de resistencias para regular corrientes y un pequeño LED integrado en la placa para saber si el módulo está alimentado correctamente (POWER).
Módulo LCM 1602 I2C V1

Este módulo va soldado directamente sobre los terminales del LCD 1602 que se describen a continuación:
·         VSS: Es el terminal de alimentación negativa, es decir, 0 V (masa o GND).
·         VDD: Es la alimentación positiva de la pantalla y el chip (5 V). Es recomendable ponerle en serie una resistencia para evitar daños (con una de 220 Ω es suficiente.
·         RW: Es el terminal de activación de lectura/escritura. Se suele conectar a masa para que se escriba en todo momento.
·         VO: Es el contraste de la pantalla, debe conectarse con un potenciómetro de unos 10 kΩ.
·         RS: Es el terminal selector de registro, mediante el cual, el microcontrolador le comunica al LCD si quiere mostrar caracteres o si lo que quiere es enviar comandos de control, como cambiar la posición del cursor o borrar la pantalla, por ejemplo.
·         E: Es el terminal de habilitación de la pantalla, tiene que estar activado para poder recibir información.
·         D0~D7: El LCD tiene un bus de datos de 8 bits. En este Proyecto solamente utilizaremos 4 bits, de D4 a D7, que nos servirán para establecer las líneas de comunicación por donde se transfieren los datos.
·         A y K: Son los terminales del LED que ilumina el fondo de la pantalla (BackLight). A à 5 V y K à GND.
 
Otra cosa muy importante a recordar es que dentro de la programación, exactamente en la línea “LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);”, donde pone 0x27, es justo la dirección que va a tener nuestro LCD 1602. Dicha dirección se  obtiene midiendo el valor de los pines de dirección A0, A1 y A2, que están justo detrás del módulo LCM 1602 I2C V1, con un voltímetro. Si por ejemplo A0 = 0 o nivel BAJO (LOW) significa que ese pin está conectado a GND y de lo contrario si A0 = 1 o nivel ALTO (HIGH) significa que ese pin está conectado a +5V, en la mayoría de los módulos la dirección puede ser modificada simplemente soldando o no los pines de dirección a unos pines adyacentes que van conectados a GND, permitiéndonos conectar varios LCD al mismo tiempo y seleccionarlos según la dirección que tengan. Las posibles direcciones y configuraciones de los pines de dirección A2, A1 y A0 se pueden obtener de la siguiente tabla.
 
Tabla de configuración de los pines A2, A1 y A0 (direcciones I2C)
 
Para encontrar la dirección I2C de los LCD, también tenemos un método alternativo realizado mediante software, es decir, disponemos del programa denominado “Escaner_direcciones_I2C” que nos facilitará enormemente la búsqueda de las direcciones I2C de cualquier dispositivo que conectemos mediante este protocolo a nuestro Arduino.  


Simplemente tendremos descargar el programa desde el link anterior, conectar el dispositivo deseado mediante I2C, cargar el programa en nuestro Arduino y por último abrir el monitor serie del IDE de Arduino para obtener su dirección I2C.
 
Monitor serie del IDE de Arduino

También comentaros que este módulo lo podemos adquirir ya soldado en la parte posterior del LCD 16x2 o por separado, aunque si lo compramos por separado nos hará falta un soldador, estaño y una cierta práctica soldando. Por último no debemos de olvidar ajustar el contraste del LCD 1602 a través del potenciómetro que el módulo LCM 1602 I2C V1 trae incorporado. Ahora ya solo tenemos que conectar los 4 terminales del módulo a sus correspondientes de la placa Arduino (VCC, GND, SDL y SDA), cargar el programa y por último enviar caracteres a través del Monitor serie para que se vayan mostrando en el LCD.

Display 16x2 LCD 1602

Antes de proceder a enviar caracteres, el LED Backlight,  que sirve para iluminar el fondo del LCD , realiza mediante programación una serie de parpadeos, quedándose encendido finalmente. También le enviamos unas pequeñas líneas de texto al LCD para que la ejecución del programa sea mucho más interactiva (consultar comentarios en el código para comprender mejor el funcionamiento completo del programa).
Para ejecutar correctamente este Proyecto necesitamos emplear una parte del software Arduino llamado Serial Monitor. Esta ventana le permite escribir mensajes que se envían a la placa Arduino, así como ver los mensajes que el Arduino nos envía (Herramientas à Monitor serie o también Ctrl+Mayús+M).

 
Lista de Materiales:

 
·         Arduino UNO Rev.3.
 
·         Cable USB tipo A-B.
 
·         Módulo LCM 1602 I2C V1.
 
·         Display 16x2 LCD 1602.
 
·         Protoboard.
 
·         Cables de conexión.
 

Código del programa: 


 
 
Video:
 

7 comentarios:

  1. Buen artículo. Sólo una sugerencia, cuando hablas de obtener la dirección del LCD midiendo los pines de dirección, quizá sería más apropiado usar la palabra "voltímetro" en lugar de "potenciómetro". Saludos.

    ResponderEliminar
  2. Me pudes pasar la libreria I2 C q utlizas gracias :)

    ResponderEliminar
    Respuestas
    1. http://miarduinounotieneunblog.blogspot.com.es/2015/12/anadiendo-las-librerias.html?m=1

      Eliminar
  3. Tengo arduino uno R3, LCD 16X2 I2C con chip PCF8574AT, en mi caso la direccion es 0x3F, y no logro visualizar nada, controlo el backlight, los tiempos, pero no muestra absolutamente nada, ajusto el contraste, he cambiado de librerias, ¿ Tienes alguna sugerencia ?,
    Gracias.

    ResponderEliminar
    Respuestas
    1. Revisa las conexiones y carga mis librerias que estan en uno de los primeros POST del BLOG.

      Eliminar
    2. Hola Mariano, gracias por la respuesta, pero, usando tus librerias, y ejecutando el sketch de este blog, solo pestañea 3 veces, luego queda el backlight encendido, pero no aparece absolutamente nada, ni cuando envio desde el monitor serial.

      Eliminar
    3. El scaner lo detecta perfectamente pero en la direccion 0x3F.

      Eliminar