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()
{
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop()
{
int nDevices;
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.
error = Wire.endTransmission();
if (error == 0)
{
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
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 <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.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() {
lcd.scrollDisplayLeft(); // Movimiento a la Izquierda
delay(400);
}
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
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
No hay comentarios.:
Publicar un comentario