Display LCD 16×2 con I2C

Los Displays LCD son muy utilizados ya que nos permiten visualizar variables de nuestros proyectos o cualquier tipo de información que deseemos. para conectarlos a los microcontroladores existen formas o maneras muy engorrosas pero podemos encontrar un modulo que permite conectar diferentes display usando 2 pines de nuestra arduino con el bus I2C.

En esta entrada veremos como conectar el display 16×2 y el código necesario para usarlo con nuestra arduino UNO y el modulo I2C.

Lo primero sera conocer el hardware del modulo I2C, si no conoces aun que significa I2C puedes mirar el siguiente post donde explico el bus I2C AQUI!

MODULO DISPLAY I2C

Partes del Modulo I2C

  • Pines de conexión LCD: se encuentran los pines que van conectados con nuestro display 16×2, donde el pin 1 es el primer pin justo al lado de los pines de conexión (GND,VCC,SDA,SCL).
  • Pines de conexión: encontramos los pines de alimentación GND, VCC = 5 V, SDA y SCL, estos dos últimos van conectados a los respectivos pines de nuestra tarjeta arduino.
  • Potenciometro de contraste: permite ajusta el contraste de nuestro display, es importante ajustarlo pues muchas veces cuando compramos nuestro modulo este esta al máximo contraste lo cual no permite visualizar nuestros caracteres.
  • Controlador I2C PCF8574: este circuito integrado permite la conexión del bus I2C con nuestro display.
  • Jumper de luz de fondo: este jumper si se encuentra abierto la luz de fondo de nuestro display estará apagada, si esta cerrado como se ve en la imagen la luz de fondo del display encenderá esto se puede modificar también desde el código.
  • Direcciones I2C: estos pines de soldadura nos permite cambiar la dirección de nuestro modulo para poder conectar varios dispositivo al mismo tiempo en el bus I2C, por defecto esta la 0x27.

CONEXIÓN CON ARDUINO UNO:

Para poder realizar nuestro código es importante 2 librerías, la primera es la wire que se encuentra en nuestro Arduino IDE y la otra es LiquidCrystal_I2C que la pueden descargar desde AQUI!, esta librería nos permite la comunicación I2C de nuestro modulo ya que contiene los parámetros para el bus I2C y los de la librería LCD.h que viene en el Arduino IDE, en el siguiente código podrán observar algunas de las funciones y como se debe parametrizar nuestro modulo para poder mostrar caracteres.

// Incluimos librerias
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// declaracion de la direccion de nuestro modulo LCD
// por defecto es 0x27
#define I2C_ADDR    0x27

LiquidCrystal_I2C lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);
void setup()
   {   
       lcd.begin (16,2);    // Inicializar el display con 16 caraceres 2 lineas
       lcd.setBacklightPin(3,POSITIVE);// Configuramos el encendido de la luz de fondo
       lcd.setBacklight(HIGH);

       lcd.home ();                   // lleva el cursor a la posicion de primera columna primera fila (0,0)
       lcd.print("victruino.com");    //se imprime los datos
       lcd.setCursor ( 0, 1 );        // llevamos el cursor a la posicion 0 de la fila 2
       lcd.print("Coming Soon!");
   }
void loop() 
   {
    delay(100);
    lcd.setBacklight(HIGH);//encendemos la luz de fondo 
    lcd.blink();// parpadea el cursor
    delay(1000);
    lcd.setBacklight(LOW);// apagamos la luz de fondo
    delay(1000);
    lcd.setBacklight(HIGH);//encendemos la luz de fondo
    delay(1000);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("www.victruino.com");
    delay(500);
    for(int i =0;i<16;i++){
    lcd.scrollDisplayLeft();//hacee scroll a la izquierda.
    delay(200);
    } 
    for(int i =0;i<16;i++){
    lcd.scrollDisplayRight();// hace scroll a la derecha
    delay(200);
    }
    lcd.clear();
    lcd.moveCursorRight();//mueve el cursor a la derecha
    lcd.print("victruino");
    delay(1000);
    lcd.clear();
    lcd.moveCursorLeft();//mueve el cursor a la Izquierda
    lcd.print("victruino");
    delay(1000);
    for(int i =0;i<5;i++){
    lcd.print("www.victruino.com");
    lcd.autoscroll();
    delay(200);
    }
    lcd.clear();
    lcd.off();// apaga el modulo
    delay(1000);
    lcd.on();// Enciende el modulo
       
    }

para crear nuevos caracteres se usa la siguiente función createChar(memory, char[]); donde los argumentos son: memory: es un dígito de 0 a 7, esto significa que disponemos solo 8 caracteres nuevos que podemos hacer, y char[] es el vector que contiene los datos del nuevo carácter, y para poder escribirlo en la pantalla usamos la función write(); que nos permite escribir los binarios, cada carácter esta compuesto de una matriz 5×8, y en ella podemos realizar cualquier figura solo activando con 1, la posiciones de la matriz que se mostraran  como veremos a continuación.

En este código podemos ver como se declaran y como se escriben los numero caracteres.

// Incluimos librerias
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// declaracion de la direccion de nuestro modulo LCD
// por defecto es 0x27
#define I2C_ADDR    0x27

LiquidCrystal_I2C lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);

byte ch1[8] = {B00000,B01010,B01010,B00000,B10001,B10001,B01110,B00000};
byte ch2[8] = {B10001,B11111,B10101,B11011,B11111,B01110,B00100,B00000};
byte ch3[8] = {B00100,B00100,B01110,B11111,B11111,B00100,B01110,B11111};
byte ch4[8] = {B00100,B10101,B11111,B10101,B00100,B10101,B11111,B10001};
byte ch5[8] = {B01110,B01110,B00100,B11111,B00100,B01110,B01010,B01010};
byte ch6[8] = {B00100,B01110,B11111,B00000,B00000,B11111,B01110,B00100};
byte ch7[8] = {B00000,B00000,B01010,B00000,B00000,B01110,B10001,B00000};
byte ch8[8] = {B11011,B11011,B11011,B00000,B00000,B11011,B11011,B11011};


void setup()
   {   
       lcd.begin (16,2);    // Inicializar el display con 16 caraceres 2 lineas
       lcd.setBacklightPin(3,POSITIVE);// Configuramos el encendido de la luz de fondo
       lcd.setBacklight(HIGH);
       lcd.createChar(0,ch1);
       lcd.createChar(1,ch2);
       lcd.createChar(2,ch3);
       lcd.createChar(3,ch4);
       lcd.createChar(4,ch5);
       lcd.createChar(5,ch6);
       lcd.createChar(6,ch7);
       lcd.createChar(7,ch8);
       
       lcd.home ();                   // lleva el cursor a la posicion de primera columna primera fila (0,0)
       lcd.print("victruino.com");    //se imprime los datos
       lcd.setCursor ( 1,1 );        // llevamos el cursor a la posicion 1 de la fila 2
       lcd.write(byte(0));
       lcd.setCursor ( 3,1 );
       lcd.write(byte(1));
       lcd.setCursor ( 5,1 );
       lcd.write(byte(2));
       lcd.setCursor ( 7,1 );
       lcd.write(byte(3));
       lcd.setCursor ( 9,1 );
       lcd.write(byte(4));
       lcd.setCursor ( 11,1);
       lcd.write(byte(5));
       lcd.setCursor ( 13,1);
       lcd.write(byte(6));
       lcd.setCursor ( 15,1);
       lcd.write(byte(7));
       
   }
void loop() 
   {
   
    }

 

2 comentarios en “Display LCD 16×2 con I2C

Deja un comentario

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