Leer Primero

Como se utiliza este blog?

martes, 27 de abril de 2021

Manejo basico de un modulo i2c lcd 2x16 con Arduino

Bienvenido a mi blog, hoy hablaremos un poco de como programar un manejo básico de un modulo I2C, LCD de 2 filas por 16 columnas, con nuestro Arduino UNO Rev3,  utilizando el lenguaje de programación Arduino (basado en Wiring) y el Software Arduino IDE (basado en Processing).

No es el objetivo de este articulo abordar toda la teoria y la historia de las pantallas lcd, asi que hare un breve resumen acotando que la LCD (Liquid Crystal Display) o pantalla de cristal líquido, es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos. La pantalla LCD de 16×2 esta basada en el controlador HD44780 de Hitachi, dicha pantalla es un periférico que se utiliza ampliamente en proyectos con microcontroladores y el modulo I2C está gobernado internamente por un controlador PCF8574, el cual es un expansor de Entradas y Salidas digitales controlado por I2C que dirige todo su funcionamiento. En este caso vamos a emplear una LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. En la siguiente imagen se puede observar la estructura de sus pines. La podemos dividir en, los pines de alimentación, los pines de control y los pines del bus de datos bidireccional. Por lo general podemos encontrar ademas, en su estructura, los pines de Anodo (+) de led backlight y cátodo (-) de led backlight [Los pines 15 y 16 de backligth se deben manejar de manera pulsante con una frecuencia de 60Hz, tambien se puede utilizar una resistencia fija de 10 ohmios 1/2 watio para alimentar el positivo del backligth en caso de hacerlo manualmente sin modulo I2C].

Si estamos empleando en nuestro proyecto una LCD con Arduino UNO Rev3, necesitamos determinar la dirección del dispositivo. Podemos usar el siguiente código estandar con Arduino (basado en Wiring), para ver cual es la dirección del Módulo I2C, para ello utilizaremos el Software Arduino IDE (basado en Processing) versión 1.8.15 (recuerda que este scanner es general para cualquier dispositivo I2C que conectes a tu arduino respetando la señalizacion de sus pines):

#include <Wire.h>

void setup()

{

  Wire.begin(); 
  Serial.begin(9600);
  Serial.println("\nI2C Scanner");

}

void loop()

{

  byte error, address;
  int nDevices;
  
  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ )

  {

 // I2c_scanner utiliza el valor de retorno de la Write.endTransmisstion para ver si un dispositivo reconoció la dirección.

    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)

    {

      Serial.print("Dispositivo I2C encontrado en la direccion hexadecimal 0x");
      if (address<16)
       Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;

    }

    else if (error==4)

    {

      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);

    }    

  }

  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);                                // wait 5 seconds for next scan

}


Utilizaremos el pin +5Vcc del arduino UNO Rev3 para alimentar la lcd con los +5 voltios del puerto usb de la pc (Vcc), el pin gnd de la placa arduino ira a gnd de la lcd, el pin SDA del arduino ira a SDA de la lcd y el pin SCL del arduino ira a SCL de la lcd, como podemos ver en el siguiente esquematico:


Despues de montado el circuito y programado el I2C scan en el IDE de Arduino, podremos ver en el monitor serie, la direccion hexadecimal de nuestro dispositivo, la cual utilizaremos para crear ahora un pequeño sketch que maneje nuestra lcd, inicialmente deberemos descargar alguna librería que sea capaz de controlar la LCD via I2C directamente con Processing, para este caso usaremos la librería "LiquidCrystal_I2C.zip" que podemos descargar gratis desde este repositorio en github.

Para que funcione esta librería, debemos añadirla en el IDE mediante el menu programa - incluir libreria - Añadir biblioteca .zip

La librería "LiquidCrystal_I2C.zip" que utilizaremos dispone de los principales métodos:

  • LiquidCrystal_I2C() – Constructor de la clase, configura el hardware.
  • init() – Prepara el LCD para su uso.
  • clear() – Borra todos los caracteres de la pantalla LCD.
  • setCursor(col, row) – Permite mover el cursor a la posición indicada en sus parámetros.
  • print() – Imprime una variable o literal en la pantalla
  • scrollDisplayLeft() y scrollDisplayRight() – Recorre el contenido de la pantalla a la izquierda o a la derecha
  • backlight() y noBacklight() – Métodos para encender / apagar la iluminación de fondo
  • createChar(num, data) –  Crear un carácter definido por el usuario en la memoria del controlador de pantalla.

Programación Display LCD – I2C

El siguiente código puede ser usado con Arduino UNO Rev3 a modo de ejemplo:

#include <LiquidCrystal_I2C.h>       // Libreria que controla el I2C
#include <Wire.h>                               // La libreria Wire viene incluida en el IDE de arduino

LiquidCrystal_I2C lcd(0x27,16,2); // dependiendo del fabricante del LCD, la direccion 0x27 puede                                                                // cambiar, utilice el I2C_Scan primero por favor!

void setup() {

  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(" PROTOCOLO  I2C ");  // Mensaje a desplegar
  lcd.setCursor(0,1);
  lcd.print("Prueba LCD 16x2 ");    // Mensaje 2 a desplegar
  delay(3000);                                  // espera 3 segundos con el mensaje estatico 

}

void loop() { 

  for(int c=0;c<12;c++){
  lcd.scrollDisplayLeft();       // Movimiento a la Izquierda
  delay(400);

  }

  for(int c=0; c<12;c++){
  lcd.scrollDisplayRight();    // Movimiento a la Derecha 
  delay(400); 

  }

}


La libreria y los códigos .ino de los ejemplos anteriores los puedes descargar gratis del repositorio de github que mencione más arriba. Tambien tengo los mismos códigos publicados en:

I2C_Scan.ino

https://create.arduino.cc/editor/jorgechac/eaad38ae-3d58-4617-b151-8ce6decc2924/preview

I2C_LCD_16x2.ino

https://create.arduino.cc/editor/jorgechac/1dc82806-7b66-4105-bdda-47176a28fb6c/preview

Finalmente recordemos que con las pantallas OLED estos modulos lcd iran descontinuandose poco a poco, tambien recordemos que este es solo el manejo básico de una pantalla LCD con Arduino, a medida que avancemos iremos añadiendo mas funciones y aumentando la complejidad.


Si te sirvió deja un comentario de agradecimiento, comparte el post en tus redes sociales o recomiéndale el blog a un amigo, eso me motiva a seguir realizando estos pequeños posts y espero que vuelvas a mi blog, publico nuevo material con base en los softwares y apps que utilizo y la experiencia que he adquirido. Por último si deseas colaborar voluntariamente y crees que mi trabajo y mi tiempo lo ameritan, considere hacer una pequeña donación a mi NEQUI +573177295861.


También te puede interesar:


Nuevo Microcontrolador Raspberry Pi Pico

Convierte facilmente una Fuente ATX de PC en una Fuente para alimentar tus proyectos Arduino y/o Raspberry Pi

Como Grabar el Bootloader de Arduino

Bootloader USB para Microcontroladores PIC 18F2550 y PIC18F4550

Diseño y fabricación de PCB profesionales con Fritzing

Conociendo La Familia de los Módulos WiFi para Arduino ESP8266

Cómo Detectar un Arduino Falsificado

ChipKIT™ Max32™ El Arduino de Microchip

No hay comentarios.:

Publicar un comentario