Introducción
Actualmente podemos encontrar pantallas de
cristal líquido por precios bastante asequibles, y que con un poco de imaginación
nos permiten hacer muchas cosas. Además son de manejo bastante sencillo, ya que
presentan un bus de datos y un mini-bus de control, y lo que hay que hacer es
simplemente mandarle comandos. ;-)
Los módulos que encontramos habitualmente
presentan 1, 2 ò 4 filas de 16 ó 20 caracteres y, a pesar de estas
variaciones, el circuito integrado que los controla es el mismo. No obstante,
existen módulos que poseen otros segmentos, bien números o palabras, para
funciones extra.
Desde el punto de vista del controlador, los
segmentos extra aparecen dispuestos en una matriz de 5 x 7 puntos donde cada
punto de la matriz se corresponde con uno de estos segmentos especiales.
Controlador
Hitachi HD44780
El circuito integrado de Hitachi HD44780, o
modelos compatibles, es normalmente el encargado del control del sistema. De
cara al exterior encontramos un conector de 14 patillas donde se conecta la
alimentación, la señal de contraste y todas las señales de control.
La función de cada patilla es la siguiente:
Patilla Nombre Nivel Descripción
1 Vss 0V Masa
2 Vcc 5V Alimentación
3 Vee Nota Polarización del cristal
4 RS lógico Registro de selección, 1=datos, 0=instrucción
5 R/W " Read/Write, 1=lee 0=escribe
6 E " Habilitación
7-14 DB0-DB7 " Bus de datos (DB0, LSB)
Nota:
La tensión de polarización controla el
contraste de la pantalla. Para las pantallas de rango normal de temperatura se
utiliza una tensión entre 0 y 5V mientras que para los módulos de temperatura
extendida se usará una tensión entre 0 y -7V.
Normalmente se recomienda obtener esta tensión con una resistencia variable de
entre 10K y 20K conectada entre masa y la tensión adecuada.
Las funciones que podemos efectuar son las
siguientes:
- Escribir comandos
- Escribir datos
- Leer datos
- Leer el estado
Estructura
interna del controlador
El controlador posee una memoria RAM que aparece
dividida en dos bloques diferenciados: la RAM de datos (DDRAM) y la RAM de
caracteres generados (CGRAM).
La DDRAM almacena los códigos ASCII de los
caracteres que queramos que aparezcan en pantalla y existe una correspondencia
entre las filas de la pantalla y las posiciones consecutivas de memoria. Por
otro lado, la CGRAM nos permite definir caracteres especiales que no se
encuentren en la memoria ROM que dispone el microcontrolador.
La DDRAM tiene un tamaño de 128 bytes, sea cual
sea el tamaño de la pantalla; cuando ésta es más pequeña podemos almacenar
en ella caracteres y mostrarlos programando el modo de desplazamiento de
pantalla.
Normalmente la primera fila comienza en la
dirección 00h y la segunda en la 40h. La excepción es la pantalla de 1 fila
por 16 caracteres, en la que la fila se divide en dos porciones de memoria cuyas
direcciones van desde la 00h hasta la 07h para los 8 primeros caracteres y desde
la 40h hasta la 47h para los otros 8.
La patilla R/W permite leer un registro de estado
que sólo sirve para ver si el controlador ha terminado de realizar la instrucción
que se le ha enviado y seguir enviando más. Sin embargo, para un control
sencillo, podemos realizar pausas después de cada instrucción o envío de
datos para no tener que leer el registro de estado
Comandos
de control
Los comandos se envían a través del bus de
datos. Para que la pantalla los reconozca hay que poner la señal RS a nivel
bajo.
Borrar pantalla: 0 0 0 0 0 0 0 1
Limpia la pantalla y pone el cursor en la primera
posición.
Tiempo de ejecución 1.64ms
Cursor al principio: 0 0 0 0 0 0 1 x
Coloca el cursor en la primera posición.
Tiempo de ejecución 1.64 ms
Modo de entrada: 0 0 0 0 0 1 i d
* i=1 la posición de la DDRAM se incrementa
automáticamente tras cada lectura o escritura a la misma, mientras que si i=0
se configura para decrementar el puntero de DDRAM.
* d=1 la pantalla se desplaza en el sentido
indicado por el bit mencionado antes (i) cuando el cursor llega al filo de la
pantalla.
Encendido-apagado: 0 0 0 0 1 p c i
Selecciona el encendido de la pantalla (p=1), la
visibilidad del cursor (c=1) y la intermitencia del mismo (i=1 parpadea).
Cursor/Desplazamiento: 0 0 0 1 p d x x
Selecciona si se desplaza toda la pantalla (p=1)
o sólo el cursor (p=0) sin alterar el contenido de la DDRAM; el bit d
selecciona el sentido de desplazamiento; será hacia la derecha si d=1.
Función: 0 0 1 l c f x x x
Selecciona el modo de transmisión, ciclo y
fuente de carácter.
* Si l=1 la comunicación es con 8 bits, mientras
que en el caso contrario solo se usan líneas d4-d7 del bus, mandando la parte
alta y luego, la baja del dato.
* El bit c indica el número de líneas; para c=0
se usará una sóla línea, mientras que si c=0 usaremos 2.
* El bit f establece el tipo de caracteres que
usaremos si f=1 los caracteres serán de 5 x 11 puntos, mientras que si f=0
configuramos el controlador para usar caracteres de 5 x 7 puntos.
Dirección en la DDRAM: 1 d d d d d d d
Esta instrucción se utiliza para modificar el
puntero a la DDRAM.
Si la dirección es la 00h escribiremos en la
primera línea, y la segunda línea empieza en 40h. (Ojo : el display de 1x16 se
divide en dos mitades: la izquierda empieza en 00h y la derecha en 40h)
Inicialización
Los controladores de Hitachi se inicializarán de
manera automática si durante el encendido conseguimos que la tensión de
alimentación suba desde 0'5V hasta 4'5V en un tiempo comprendido entra 0'1 y
10ms. Puesto que ésto puede ser difícil de conseguir, podemos recurrir a la
inicialización por software. Consiste en enviar una serie de comandos de los
descritos anteriormente y esperar un determinado tiempo.
En la inicialización se configura también si la
transmisión se hace con 4 o con 8 hilos.
La inicialización para configurar el modo de 4
bits (el que utilizamos) es así:
- Aplicar VCC
- Esperar 15 ms
- Modo de 8 bits
- Esperar 4'1 ms
- Modo de 8 bits
- Esperar 100 ms
- Modo de 8 bits
- Esperar 4'1ms
- Modo 4 bits, una o dos líneas y la fuente que
se desee
- Esperar 40 ms-Apagar pantalla, quitar cursor
- Esperar 40 ms
- Encender pantalla y configurar cursor
- Esperar 40 ms
- Configurar desplazamiento de pantalla/cursor
- Esperar 40 ms.
En este momento, la inicialización ha sido
completa.
Notas importantes:
Los tiempos de espera son los mínimos; puede
esperarse más. Esto es válido si sólo tenemos retardos de ms.
Fijémonos en que la configuración para 8 bits
no usa las líneas 0-3, y por eso sirve también con 4 hilos.
Cuando hay que mandar los comandos en 4 bits se manda primero la parte alta y
luego la baja