Home > Manuscriptus digitalis > Conectando una pantalla LCD con el Arduino

Conectando una pantalla LCD con el Arduino

May 4th, 2010

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:

  1. Tierra.
  2. Vcc (+5 V)
  3. Ajuste de contraste (0 a 5 V)
  4. Selector de registro (R/S)
  5. Lectura escritura (R/W)
  6. Reloj (habilitado)
  7. Bit 0
  8. Bit 1
  9. Bit 2
  10. Bit 3
  11. Bit 4
  12. Bit 5
  13. Bit 6
  14. Bit 7
  15. Luz trasera (+)
  16. 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

  1. No comments yet.
Comments are closed.