# Controlador LCD Hitachi HD44780

El controlador LCD Hitachi HD44780 es un controlador alfanumérico de pantalla de cristal líquido (LCD) de matriz de puntos desarrollado por Hitachi en la década de 1980. El juego de caracteres del controlador incluye caracteres ASCII, japoneses Kana y algunos símbolos en dos líneas de 28 caracteres. Utilizando una extensión del driver, el dispositivo puede mostrar hasta 80 caracteres. El HD44780 es uno los controladores de caracteres para LCD más popular nunca construido, con numerosas pantallas de terceros fabricantes utilizando su interfaz de 16 pines y su juego de instrucciones por compatibilidad.
El controlador LCD Hitachi HD44780 está limitado a pantallas de texto monocromo y es a menudo utilizado en fotocopiadoras, faxes, impresoras láser, equipamiento industrial de pruebas y equipamiento de redes como routers y dispositivos de almacenamiento.
Las pantallas LCD compatibles están fabricadas en varias configuraciones estándar. Las configuraciones más comunes son una fila de ocho caracteres (8x1) y formatos de 16×2, 20×2 y 20×4. Las configuraciones a medidas más grandes están compuestas por 32, 40 u 80 caracteres con 1, 2, 4 o 8 líneas. La configuración más grande habitualmente fabricada es de 40x4 caracteres, la cual requiere dos controladores HD44780 direccionables individualmente con chips de expansión, puesto que un único chip HD44780 puede direccionar únicamente hasta 80 caracteres.
Los caracteres LCD pueden ser retroiluminados mediante led, fluorescencia o por electroluminiscencia.
Los displays LCD utilizan una interfaz de 16 contactos, generalmente utilizando pines o conexiones de tarjeta de 0,1 pulgadas (2.54 mm). Aquellos sin retroiluminación pueden tener sólo 14 pines, omitiendo los dos pines de alimentación de la luz. Esta interfaz se diseñó para ser fácilmente ensamblada con la interfaz XRAM Intel MCS-51, utilizando sólo dos pines de dirección, lo que permitía mostrar textos en el LCD utilizando órdenes sencillas de tipo MOVX, ofreciendo una opción eficaz de coste ajustado para añadir el mostrar textos en dispositivos. La configuración de pines es la siguiente:
* Tierra
* VCC +3.3 a +5V (típico)
* Ajuste de contraste (VO) Esta es una entrada analógica , típicamente conectado a un potenciómetro. El usuario tiene que ser capaz de controlar este voltaje independiente de todos otros ajustes, para optimizar la visibilidad del display que varía con la temperatura y, en algunos casos, con la altura sobre el nivel de mar. Con un ajuste incorrecto el display parecerá para funcionar mal.
* Registro Seleccionado (RS). RS=0: Comando, RS=1: Dato
* Lectura/Escritura (R/W). R/W=0: Escribe, R/W=1: Lee (En la mayor parte de las aplicaciones que leer del HD44780 no tiene sentido. En ese caso este pin puede ser permanentemente conectado a tierra y no hay necesidad de asignar pines de entrada/salida para gestionarlo.)
* Reloj (Enable). Disparado por el borde descendente
* Bit 0 (No utilizado en operación de 4 bits)
* Bit 1 (No utilizado en operación de 4 bits)
* Bit 2 (No utilizado en operación de 4 bits)
* Bit 3 (No utilizado en operación de 4 bits)
* Bit 4
* Bit 5
* Bit 6
* Bit 7
* Backlight Ánodo (+) (Si aplica)
* Backlight Cátodo (-) (Si aplica)
El voltaje operativo nominal para retroiluminacion led es de 5V a brillo máximo, con atenuación en los voltajes más bajos dependientes de los detalles como en el caso de leds en color. La retroiluminación no led suele requerir voltajes más altos (I.e. electroluminiscencia).

## Selección de modo

En modo de 8 bits todas las transferencias ocurren en un ciclo del pin de reloj (Enable) con los 8 bits en el bus de datos y los pines RS y RW estables. En modo de 4 bits, el dato se transfiere como pares de 4 bits o "nibbles" en los pines de datos superiores (7-4) con dos ciclos de reloj (Enable) y los pines RS y RW estables. Los cuatro bits más significativos (7-4) tienen que ser escritos primero, seguido por los cuatro bits menos significativos (3-0). La secuencia de reloj alta/baja tiene que ser completada cada vez o el controlador no recibirá correctamente órdenes posteriores.
La selección de modo entre 4 u 8 bits requiere una utilización adecuada de comandos. Hay dos consideraciones primarias. Primero, con D3-D0 sin conexión, estas líneas siempre aparecerán en estado bajo (0b0000) para el HD44780. Segundo, los LCD pueden estar inicialmente en uno de los siguientes tres estados:
* (Estado1) modo 8 bits
* (Estado2) modo 4 bits, esperando al primer conjunto de datos de 4 bits
* (Estado3) modo 4 bits, esperando al segundo conjunto de datos de 4 bits
El estado3 puede ocurrir, por ejemplo, si un comando de control previo se abortó después de enviar sólo los primeros 4 bits de una orden mientras el LCD estaba en modo de 4 bits.
El siguiente algoritmo asegura que el LCD está configurado en el modo deseado:
La misma orden Function Set se envía tres veces con 8 bits por la interfaz D7-D4 = 0b0011, no importando el valor de los cuatro bits bajos, utilizando pulsos de reloj Enable individuales. Si el controlador está en modo 4 bits los cuatro bits inferiores se ignoran y no pueden ser enviados hasta que la interfaz esté en una configuración de tamaño conocida. el más bajo cuatro bits están ignorados tan no pueden ser enviados hasta la interfaz es en una configuración de medida sabida.
Inicializando en estado 1 - configuración de 8 bits
Inicializando en estado 2 - configuración de 4 bits, esperando la primera transferencia de 4 bits
Inicializando en estado 3 - configuración de 4 bits, esperando la última transferencia de 4 bits
En los tres casos para cualquier estado inicial el bus del intgerface está ahora en modo 8 bits, 1 línea, caracteres de 5x8 . Si se desea una configuración diferente al modo 8 bits se debe enviar por el bus un comnado de 8 bits de tipo Function Set para configurar los parámetros completos. Si se desea configurar el modo 4 bits se debe enviar 0b0010 por las líneas de datos D7-D4 con un único pulso de reloj Enable. Ahora el controlador estará en modo 4 bits y una secuencia completa en el bus del comando Function Set en 4 bits (dos ciclos de reloj Enable con los bits de la orden 7-4 y 3-0 en ciclos consecutivos) completará la configuración del registro con Function Set.

## Conjunto de instrucciones

El conjunto de instrucciones del HD44780 se muestra a continuación:
HD44780U conjunto de instrucción basada :
| Instrucción | Código | Código | Código | Código | Código | Código | Código | Código | Código | Código | Descripción | Tiempo de ejecución (max) (cuándo fcp = 270 kHz) |
| Instrucción | RS | R/ | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | Descripción | Tiempo de ejecución (max) (cuándo fcp = 270 kHz) |
| Borrar pantalla | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Limpia la pantalla y mueve el cursor a la posición inicial (dirección 0). | 1.52 ms |
| Cursor al inicio | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | * | Mueve el cursor a la posición inicial. También devuelve la visualización en la pantalla a la posición original. El contenido de la memoria DDRAM queda sin cambios. | 1.52 ms |
| Configurar modo de entrada | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | Configura la dirección de movimiento del cursor (I/D); especifica el desplazamiento de la pantalla (S). Estas operaciones se ejecutan durante las operaciones de lectura/escritura. | 37 μs |
| Control de encendido/apagado de la pantalla | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | Configura la pantalla completa como encendida o apagada (D), el cursor encencido o apagado (C), y el parpadeo del carácter donde esté posicionado el cursor (B). | 37 μs |
| Cambio/de exhibición del cursor | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | * | * | Cursor de conjuntos-movimiento o exhibición-cambio (S/C), dirección de cambio (R/L). DDRAM El contenido queda sin cambios. | 37 μs |
| Function set | 0 | 0 | 0 | 0 | 1 | DL | N | F | * | * | Configura la longitud de datos de la interfaz de entrada (DL), el número de líneas de la pantalla (N) y la fuente de caracteres a utilizar (F). | 37 μs |
| Asignar dirección CGRAM | 0 | 0 | 0 | 1 | CGRAM Dirección | CGRAM Dirección | CGRAM Dirección | CGRAM Dirección | CGRAM Dirección | CGRAM Dirección | Asigna la dirección en la memoria CGRAM. El dato de la CGRAM será enviado y recibido después de este comando. | 37 μs |
| Asignar dirección DDRAM | 0 | 0 | 1 | DDRAM Dirección | DDRAM Dirección | DDRAM Dirección | DDRAM Dirección | DDRAM Dirección | DDRAM Dirección | DDRAM Dirección | Asigna la dirección en la memoria DDRAM. El dato de la DDRAM será enviado y recibido después de este comando. | 37 μs |
| Leer el indicador de ocupado y leer dato de memoria | 0 | 1 | BF | CGRAM/DDRAM Dirección | CGRAM/DDRAM Dirección | CGRAM/DDRAM Dirección | CGRAM/DDRAM Dirección | CGRAM/DDRAM Dirección | CGRAM/DDRAM Dirección | CGRAM/DDRAM Dirección | Lee el indicador de controlador ocupado en operación interna (BF) y lee el contenido del contador de direcciones (CGRAM o DDRAM dependiendo de la instrucción anterior). | 0 μs |
| Escribir en CGRAM o DDRAM | 1 | 0 | Escribe Dato | Escribe Dato | Escribe Dato | Escribe Dato | Escribe Dato | Escribe Dato | Escribe Dato | Escribe Dato | Escribe dato en la memoria CGRAM o DDRAM. | 37 μs |
| Leer de CGRAM o DDRAM | 1 | 1 | Dato leído | Dato leído | Dato leído | Dato leído | Dato leído | Dato leído | Dato leído | Dato leído | Dato leído de CGRAM o DDRAM. | 37 μs |
| Relación de bits de las instrucciones — I/D - 0 = decrementar posición del cursor, 1 = incrementar posición del cursor; S - 0 = ningún cambio de pantalla, 1 = cambio de exhibición; D - 0 = encender pantalla, 1 = apagar pantalla; C - 0 = mostrar cursor encendido, 1 = mostrar cursor apagado; B - 0 = 0 = parpadeo de cursor encendido, 1 = parpadeo de cursor apagado; S/C - 0 = mover el cursor, 1 = desplazar el contenido de la pantalla; R/L - 0 = desplazar a la izquierda, 1 = desplazar a la derecha; DL - 0 = interfaz en modo 4 bits, 1 = interfaz en modo 8 bits; N - 0 = servicio 1/8 o 1/11 (1 línea), 1 = servicio 1/16 (2 líneas); F - 0 = 5×8 puntos, 1 = 5×10 puntos; BF - 0 = puede aceptar instrucción, 1 = operación interna en progreso. |||||||||||||
DDRAM es la RAM de visualización de datos y CGRAM es RAM del generador de caracteres. La DDRAM consiste en 80 bytes (40 por fila) direccionables con un espacio entre las dos filas. La primera fila se corresponde con las direcciones 0 a 39 decimal o 0 a 27 hex. La segunda fila se corresponde con las direcciones 64 decimal a 103 decimal o 40 a 67 hex.
La CGRAM es memoria de lectura/escritura utilizada para codificar hasta 8 caracteres en el generador de caracteres. Consta de 64 campos con direcciones de 0 a 3F hex. Cada campo se corresponde con el mapa de 5 bits correspondiente a una fila de píxeles de cada carácter. Cada 8 campos en el CGRAM se corresponden con un carácter. Los 3 bits inferiores de los códigos de carácter de 0-7 y 8-15 seleccionan los grupos de 8 campos en la memoria CGRAM .
La lectura y escritura sobre el DDRAM se realiza poniendo la entrada RS a nivel alto durante las transferencias del bus. El DDRAM mosto también ser seleccionado por utilizar el Pone DDRAM la dirección manda cuál selecciona el DDRAM para acceso y también pone la dirección de empezar para DDRAM acceso.
Así mismo las operaciones de lectura y escritura sobre la CGRAM se efectúan poniendo la entrada RS a valor alto durante las transferencias del bus. La CGRAM debe ser seleccionada por el comando Set CGRAM que selecciona el acceso a la CGRAM y la dirección a partir de la cual se empieza a acceder.
Los tiempos de ejecución mostrados en esta tabla están basado en una frecuencia de oscilador de 270 kHz. La hoja de datos indica que para una resistencia de 91 kΩ a 5V Vcc el oscilador puede variar entre 190 kHz y 350 kHz resultando en tiempos de espera de 52.6 microsegundos y 28.6 microsegundos en vez de 37 microsegundos Si una pantalla con la resistencia recomendada de 91 kΩ se alimenta con 3.3 voltios la velocidad del oscilador será mucho más lenta. Si el bit busy no se utiliza y las instrucciones son cronometradas por la circuitería externa, esto debería ser tenido en cuenta.

## Juego de caracteres

La ROM original de generación de caracteres del HD44780 contiene 208 caracteres en una matriz de 5×8 puntos, y 32 caracteres en una matriz de 5×10 puntos. Chips compatibles más modernos están disponibles con una resolución más alta, emparejados con pantallas con más píxeles.
Dos versiones de la ROM han sido desarrolladas:
* HD44780UA00, la versión estándar (japonés), la cual incluye caracteres katakana y algunas letras griegas y símbolos matemáticos
* HD44780UA02, una versión europea,lal cual incluye el conjunto completo de griego, cirílico y caracteres europeos Occidentales (con diacríticos)
El subconjunto ASCII de 7 bits para la versión japonesa no es estándar: incluye un símbolo de Yen donde se encuentra normalmente el carácter barra inversa y los símbolos de flecha izquierda y derecha en el lugar los caracteres de tilde y borrado.
Un número limitado de caracteres hechos a medida puede ser programado en el dispositivo en forma de imagen de mapa de bits utilizando órdenes especiales. Estos caracteres tienen que ser escritos al dispositivo cada vez se enciende, puesto que se almacenan en la memoria volátil de la CGRAM.