Inicio

Capítulo 1_ El invernadero

Capítulo 2_ El riego y humedad en el suelo

Capítulo 3_ Placa de Adquisición de datos y excitación de actuadores

Capítulo 4_ Sensado de humedad

Capítulo 5_ Sensado de temperatura

Capítulo 6_ Sistema de ventilación

Capítulo 7_ Pantalla LCD

7.1- Generalidades

7.2- Lista de comandos

7.3- Inicialización

7.4- Ejemplo

Capítulo 8_Software Asociado

Conclusiones

Bibliografía

Fotos

Sistema de control automático de temperatura y ventilación de un Invernadero

Capítulo 7_ Pantalla LCD

La pantalla LCD tiene como función la de proveer una interfase sencilla para el usuario. Se pueden encontrar LCDs en casi cualquier grado de integración desde la sola pantalla que necesita drivers y controladores, a un PCB que incluye los drivers de filas y columnas, hasta los que incluyen además algún controlador que facilite la interfase. Por ello se seleccionó una pantalla de 4x20 o sea con 4 líneas de 20 caracteres cada una con una interfase ASCII que utiliza un controlador estándar Hitachi HD44780 que resulta muy sencillo de programar.

Figura 7.1_ Pantalla de LCD

7.1- Generalidades

Para el caso elegido el diagrama de pines es el siguiente:

Pin#

Símbolo

Nivel

Función

1

Vss

GND

Tierra

2

Vcc

+5V

Alimentación del módulo

3

Vee

Ver 1

Alimentación del cristal líquido

4

RS

H/L

Selector del registro H=datos L=instrucción

5

R/W

H/L

Lectura/Escritura H=lectura, L=escritura

6

E

Ver 2

Enable sensible por flancos

7

DB0

Ver 3

Bit de datos 0 (menos significativo)

8

DB1

Ver 3

Bit de datos 1

9

DB2

Ver 3

Bit de datos 2

10

DB3

Ver 3

Bit de datos 3

11

DB4

Ver 3

Bit de datos 4

12

DB5

Ver 3

Bit de datos 5

13

DB6

Ver 3

Bit de datos 6

14

DB7

Ver 3

Bit de datos 7 (más significativo)

  1. Vee esta entre GND y 5V y funciona como ajuste del contraste de la pantalla de cristal líquido, se puede ajustar mediante un potenciómetro o arreglo de resistencias.
  2. Enable memoriza RS y R/W en el flanco creciente y los datos en el flanco decreciente. De acuerdo a las especificaciones RS y R/W deben permanecer estables antes que E suba y debe permanecer estable hasta que E baje, también los datos deben permanecer estables mientras E baja.
  3. Los pines de datos DB7-DB0 (o DB7-DB4 cuando se está usando el modo de 4 bits) deben ser alimentados por el CPU cuando escribe, pero deben estar en alta impedancia si se quiere leer.

El consumo del módulo está entre 10 y 25 mW (de 2 a 5 mA), y es proporcional al producto de las filas y las columnas.

Se decidió utilizar la interfase de 8 bits conectando el pin RS con PA5 (del 8255) y E con PA6, la pata RD/WR se conectó directamente en el ámbito bajo ya que se realizarán únicamente operaciones de escritura a la pantalla. El puerto C completo del 8255 se utilizó para conectar los pines DB0-DB7.

El controlador dispone de dos tipos de memoria RAM interna que pueden ser accedidas tanto para escritura como lectura. La DDRAM o de datos a mostrar por pantalla es de 128 bytes y se divide de acuerdo a las líneas de pantalla donde la línea 1 va de 0 a 19, la línea 2 de 64 a 83, la línea 3 de 20 a 39 y la línea 4 de 84 a 103. La CGRAM o de caracteres de usuario consta de 64 bytes el cual permite configurar hasta 8 caracteres especiales que no estén en la tabla normal.

7.2- Lista de comandos

Las siguientes son algunas de las funciones que están disponibles para el uso de la pantalla y que se utilizan en el programa de control:

  • Seteo de funciones: permite fijar el tamaño de la interfase de datos, el modo y fuente, y tiene un tiempo de ejecución de 40us.

DL = 1 para interfase de 8 bits; DL = 0 para interfase de 4 bits

N = 1 para displays de 2 líneas; N = 0 para displays de 1 línea

F = 1 para fuentes de 5x11 puntos; F = 0 para fuentes de 5x8 puntos

  • Fijar la dirección del cursor: reposiciona el cursor en la DDRAM, cualquier dato que se escriba a la pantalla LCD después de este comando se hará a partir de la dirección fijada. El tiempo de ejecución es de 40 us.

AAAAAAA: dirección de 7 bits dentro de la DDRAM.

  • Escribir datos en la pantalla: los datos son escritos en la posición donde se encuentre el cursor y luego mueve el cursor a la siguiente posición de la memoria DDRAM. El tiempo de ejecución es de 40 us.

DDDDDDDD: el código de carácter de 8 bits. Se puede ver la lista de caracteres con que cuenta este modelo de controlador en la siguiente tabla.

Figura 7.2_ Set de Caracteres

  • Limpiar la pantalla: limpia la DDRAM y coloca el cursor en la posición de inicio, el tiempo de ejecución es de 1.64 ms.

  • Colocar el cursor en la posición de inicio: coloca el cursor en la posición de inicio (extremo superior izquierda de la pantalla) sin afectar la DDRAM. El tiempo de ejecución es de 40 us a 1.64 ms.

*=don’t care

  • Controles de encendido/apagado: enciende o apaga la pantalla, el cursor o el parpadeo. El contenido de la DDRAM no es afectado por este comando ni siquiera cuando se apaga la pantalla.

D = 1 pantalla encendida; D = 0 pantalla apagada

C = 1 cursor encendido; C = 0 cursor apagado

B = 1 parpadeo activado; B = 0 parpadeo desactivado

7.3- Inicialización

Una vez que la pantalla es encendida se debe seguir una secuencia de comandos para de esta forma fijar la cantidad de líneas de la pantalla el tipo de fuente a utilizar y principalmente la cantidad de pines a usar en la comunicación con la pantalla (se puede hacer en 4 u 8 bits).

Se debe seguir el siguiente diagrama de flujo para inicializar la pantalla LCD.

Figura 7.3- Diagrama de Flujo de Inicialización

El primer retardo es ampliamente completado ya que la alimentación se enciende junto con la PC al encender el equipo y toma varios segundos el que se comience a ejecutar el programa de control que escribirá en la pantalla. Luego se ejecuta la secuencia descripta antes de comenzar a utilizar la pantalla, recién concluida ésta, se puede comenzar a escribir en la pantalla. Una vez realizada la inicialización no se puede cambiar ninguno de estos parámetros, la única forma de resetear dichos parámetros es apagando la alimentación de la pantalla LCD.

7.4- Ejemplo

De esta forma utilizando los comandos y funciones descriptas anteriormente si se quiere escribir la palabra "Hola" en la segunda línea de la pantalla LCD se tendrá que ejecutar el siguiente código en C.


/* Ejemplo de escritura en la pantalla LCD */
char p_sal_com; /* variable global que contiene el estado del puerto A */

#define DATO 0x20
#define INSTRUCCION 0xDF
#define ACTIVAR_E 0x40
#define DESACTIVAR_E 0xBF

void escribir_hola()
{
char contador;
char cadena[10];

/* Primero se posiciona el cursor */
p_sal_com = p_sal_com & INSTRUCCION & DESACTIVAR_E;
outp(0x300,p_sal_com); /* se activa la pata de mandar instrucción (puerto A)*/
outp(0x302,64); /* posiciona el cursor (puerto C) */
p_sal_com = p_sal_com | ACTIVAR_E;
outp(0x300,p_sal_com); /*se manda el pulso de enable*/
p_sal_com = p_sal_com & DESACTIVAR_E;
outp(0x300,p_sal_com);
delay(2); /* se espera a que se termine de ejecutar el comando */

/* Ahora se escribe en la pantalla */
/* se coloca en el modo enviar caracteres a la pantalla LCD */
strcpy(cadena,"Hola");
p_sal_com = (p_sal_com | DATO) & DESACTIVAR_E;
outp(0x300,p_sal_com);

for (contador = 0; contador < strlen(cadena);contador++)
{
/* Ahora se mandan los caracteres uno por uno */
outp(0x302,cadena[contador]);
p_sal_com = p_sal_com | ACTIVAR_E;
outp(0x300,p_sal_com); /*se manda el pulso de enable*/
p_sal_com = p_sal_com & DESACTIVAR_E;
outp(0x300,p_sal_com);
delay(2);
}

/*se vuelve al modo anterior */
p_sal_com = p_sal_com & INSTRUCCION & DESACTIVAR_E;
outp(0x300, p_sal_com);
}

En la primera parte del programa se posiciona el cursor en la pantalla a donde se quiere escribir, luego se comienzan a enviar los caracteres uno a uno. Se debe notar que para cada función a ejecutar, primero se fijan los valores en los puertos y entonces recién se envía el pulso de enable para que sea ejecutado por el controlador de la pantalla LCD.

Para una mayor claridad en el código y para facilitar el uso de la pantalla se diseñaron una serie de rutinas que aíslan al programa principal de los detalles específicos de direccionamiento, todas estas rutinas se guardaron el archivo "LCD.C".




Eduardo A. Sciutto - Juan E. Mascareña - Universidad Nacional de la Patagonia San Juan Bosco - Octubre 2000