arduino-lcd-hitachi-hd44780

Conectar Arduino a un display LCD HITACHI HD44780

¿Qué es un LCD HITACHI HD44780?

Las pantallas LCD (Liquid Cristal Display) son una de las formas más sencillas y económicas de dotar de un display a un autómata.

El Hitachi HD44780 es uno de los controladores de LCDs más ampliamente extendidos por su sencillez y bajo precio.

El HD44780 está diseñado para controlar LCDs monocromos de hasta 80 caracteres alfanuméricos y símbolos. También dispone de una pequeña memoria RAM para configurar nuestros propios caracteres o dibujos.

Las pantallas LCD con el controlador HD44770 se fabrican en distintos tamaños, siendo comunes 16x02 (2 líneas de 16 caracteres), 20x02, 20x04 y 40x02.

Las pantallas LCD disponen de retroiluminación trasera en azul o en verde. El contraste puede ser variado conectando un potenciómetro al LCD.

Conectar directamente un LCD a Arduino requiere una gran cantidad de pines. Suele ser aconsejable emplear un adaptador a bus I2C, como vimos la entrada conectar un LCD a Arduino por I2C.

Precio

Los LCD con controlador HD44770 son componentes baratos. Su precio varía en función del tamaño y el número de caracteres.

Podemos encontrar el tamaño 16x02 (LCD1602), muy habitual, por 1.1€, en vendedores internacionales de Ebay o AliExpress. El LCD de 20x4 (LCD2004) es, lógicamente, algo más caro. Podemos encontrarlo por 3.4€.

arduino-lcd-hitachi-hd44780-componente

Esquema montaje

Como hemos adelantado, conectar un Arduino a una pantalla LCD HD44770 sin usar un adaptador I2C requiere una gran cantidad de cables. El esquema de conexión visto desde el LCD a los pines de Arduino es el siguiente.

arduino-lcd-hitachi-hd44780-esquema

Mientras que la conexión desde el lado de Arduino quedaría así.

arduino-lcd-hitachi-hd44780-conexion

Si quisiéramos controlar el contraste de la pantalla, añadiríamos un potenciómetro para regular la tensión en V0.

Ejemplos de código

El IDE de Arduino incorpora de serie la librería LiquidCrystal, para controlar pantallas LCD HD44770 de forma sencilla. La librería LiquidCrystal varios ejemplos sobre su uso. Resulta aconsejable examinarlos, en general es sencilla de utilizar.

Por ejemplo, el siguiente sketch muestra el uso de las funciones de la librería para mostrar los textos “Linea 1” y “Linea 2” en una pantalla de 16x02.

/* Conexión
PIN2 - LCD4 (RS)
PIN3 - LCD5 (R/W)
PIN4 - LCD6 (E)

PIN8 - LCD11 (D4)
PIN9 - LCD12 (D5)
PIN10 - LCD13 (D6)
PIN11 - LCD14 (D7)
*/

#include <LiquidCrystal.h>      

LiquidCrystal lcd(2, 3, 4, 8, 9, 10, 11); //(RS,RW, E, D4,D5, D6, D7)

void setup()
{
  lcd.begin(16, 2);  // Inicia un LCD 16x02 (columnas,fila)
  lcd.setCursor(0, 0);  // Pone el cursor en las coordenadas (0,0)
  lcd.print("Linea 1");  // Escribe el LCD
  lcd.setCursor(0, 1);  // Ponemos el cursor en la segunda Fila
  lcd.print("Linea 2");   // Escribe el LCD
}

void loop()
{
  //Apagar cursor
  lcd.noCursor();
  delay(500);
  
  //Apagar encender cursor
  lcd.cursor();
  delay(500);
}

El siguiente sketch usa las funciones scroll para desplazar un texto horizontalmente en la pantalla.

/* Conexión
PIN2 - LCD4 (RS)
PIN3 - LCD5 (R/W)
PIN4 - LCD6 (E)

PIN8 - LCD11 (D4)
PIN9 - LCD12 (D5)
PIN10 - LCD13 (D6)
PIN11 - LCD14 (D7)
*/  
#include <LiquidCrystal.h>

LiquidCrystal lcd(2, 3, 4, 8, 9, 10, 11); //(RS,RW, E, D4,D5, D6, D7)

void setup() {
  lcd.begin(16, 2);
  
  lcd.print("¡Hola mundo!");
  delay(1000);
}

void loop() {
  
  //mover 13 posiciones (longitud del texto) a la izquierda
  //para sacar el texto de la pantalla por la izquierda
  for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
    lcd.scrollDisplayLeft();
    delay(150);
  }

  //mover 29 posiciones (longitud del texto + ancho del display) a la derecha
  //para sacar el texto de la pantalla por la derecha
  for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
    lcd.scrollDisplayRight();
    delay(150);
  }

  //mover 16 posiciones (29-13) a la izquierda
  //para devolver el texto a la posición inicial
  for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
    lcd.scrollDisplayLeft();
    delay(150);
  }
  
  delay(1000);
}

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full