Conectando una pantalla LCD con el Arduino
Sinceramente pensé que me llevaría más tiempo hacer cosas interesantes con el nuevo juguete, pero lo encuentro realmente fácil, si bien no soy nuevo en el área de la electrónica, si estoy muy lejos de ser un experto.
El proyecto de esta ocasión es el conectar una pantalla LCD con interfaz paralela basada en el controlador Hitachi HD44780 al Arduino. Como en estos casos, primero hay que ver el código que ya está hecho para poder entender y adaptar a las necesidades. El código base lo tomé de los ejemplos de LiquidCrystal, los que vienen incluídos con el Arduino.
El circuito, bastante sencillo por cierto, es como aparece aquí:
(presiona para ver más grande)
Creo que lo normal es encontrarselas en formatos 16×2 caracteres, aunque la que conseguí es de 20×4, no hubo mayor problema al conectarla. La interfaz serie consta de 16 líneas que se explican en su hoja de datos. He aquí una breve explicación de ellos:
- Tierra.
- Vcc (+5 V)
- Ajuste de contraste (0 a 5 V)
- Selector de registro (R/S)
- Lectura escritura (R/W)
- Reloj (habilitado)
- Bit 0
- Bit 1
- Bit 2
- Bit 3
- Bit 4
- Bit 5
- Bit 6
- Bit 7
- Luz trasera (+)
- Luz tarsera (-)
Nótese que marqué los bits 4 al 7, ya que con tan sólo con estos cuatro se puede mandar texto a la pantalla. El código es algo así
/*
Biblioteca LiquidCrystal
Hola mundo con control de contraste
Demuestra cómo funciona una pantalla de cristal líquido en base al
chip Hitachi HD44780 con interfaz paralela de 16 contáctos.
Bibioteca agregada originalmente el 18 Apr 2008 por David A. Mellis
Modificada el 2009-07-05 por Limor Fried (http://www.ladyada.net)
Ejemplo agregado el 2009-07-09 por Tom Igoe
Modificado el 2009-07-25 por David A. Mellis
Modificado en 2010-04 por Antonio Maldonado (http://www.confusion.com.mx)
*/
//Incluír la biblioteca:
#include <liquidcrystal .h>
//Inicializa la biblioteca con las terminales adecuadas
LiquidCrystal LCD(7, 8, 9, 10, 11, 12);
int estadoBt1 = 0;
int estadoBt2 = 0;
int contraste = 100;
void setup() {
//Configura el tamaño del LCD en filas y columnas
LCD.begin(20, 4);
//Se usa la terminal 6 para manejar el voltaje de la luz de contraste
pinMode(6,OUTPUT);
analogWrite(6,contraste);
//Dejamos que el cursor parpade
LCD.blink();
//Para los botones que regularan el contraste
pinMode(5,INPUT);
pinMode(4,INPUT);
}
void loop() {
//Si el botón 1 está activado, se sube el contraste aumentando el voltaje
if( estadoBt1 == LOW && digitalRead(4) == HIGH ) {
estadoBt1=HIGH;
contraste++;
} else {
estadoBt1 = LOW;
}
//Si el botón 2 está activado, se baja el contraste reduciendo el voltaje
if( estadoBt2 == LOW && digitalRead(5) == HIGH ) {
estadoBt2 = HIGH;
contraste--;
} else {
estadoBt2 = LOW;
}
//Limpia la pantalla
LCD.clear();
//Ajusta el voltaje para el contraste
analogWrite(6,contraste);
//Se hace el despliegue de los mensajes
LCD.println("Hola mundo!");
LCD.print("Contraste: ");
LCD.print(contraste);
//Un pequeño retardo y seguimos.
delay(150);
}
Por el momento es todo, que se diviertan!
Recursos
Biblioteca oficial: http://arduino.cc/en/Tutorial/LiquidCrystal
Sobre botones pull-down: http://www.ladyada.net/learn/arduino/lesson5.html




