59
Capítulo 3 Control de un display LCD de modo texto El objetivo que se persigue es que el alumno adquiera unos conocimientos generales sobre el funcionamiento de un display LCD que le permitan utilizar un dispositivo de estas características de una forma sencilla y, si lo desea, mejorar o perfeccionar el ejemplo que se pone a su disposición. El funcionamiento del display LCD a que hace referencia este documento va gobernado por el controlador HD44780U de Hitachi. Hoy día existen varios dispositivos en el mercado compatibles con este controlador por lo que la descripción que aquí se facilita valdrá para un gran número de dispositivos. En cualquier caso se recomienda consultar en cada caso la documentación facilitada por el fabricante. 3.1 Descripción general Cuando se adquiere un display LCD lo primero que se puede observar es su apariencia externa. Éste se compone de una placa de circuito impreso rectangular, de un tamaño similar 1

Control de un display LCD.doc

Embed Size (px)

Citation preview

MONTAJE Y DESCRIPCIN DE LA PLACA ENTRENADORA BASADA EN EL MICROCONTROLADOR MOTOROLA 68331

Captulo 3

Control de un display LCD de modo textoEl objetivo que se persigue es que el alumno adquiera unos conocimientos generales sobre el funcionamiento de un display LCD que le permitan utilizar un dispositivo de estas caractersticas de una forma sencilla y, si lo desea, mejorar o perfeccionar el ejemplo que se pone a su disposicin.

El funcionamiento del display LCD a que hace referencia este documento va gobernado por el controlador HD44780U de Hitachi. Hoy da existen varios dispositivos en el mercado compatibles con este controlador por lo que la descripcin que aqu se facilita valdr para un gran nmero de dispositivos. En cualquier caso se recomienda consultar en cada caso la documentacin facilitada por el fabricante.

3.1 Descripcin general

Cuando se adquiere un display LCD lo primero que se puede observar es su apariencia externa. ste se compone de una placa de circuito impreso rectangular, de un tamao similar al del display, sobre la que van soldados el LCD, el controlador y el resto de componentes, formando todo un conjunto compacto.

Figura 1 - Aspecto general de un display.

Bien en la parte superior o en la inferior debe encontrarse el conjunto de puntos (14 en el dispositivo que aqu se describe) que permiten su conexin. Numerados de izquierda a derecha tienen la siguiente funcionalidad:

PINSmboloDescripcin

1VssMasa

2VddAlimentacin

3VoVoltaje de ajuste del contraste

4RSSeleccin de registro

5R/WLectura / escritura

6EValidacin de datos (Enable)

7D0Bit de datos menos significativo

8D1Bit de datos

9D2Bit de datos

10D3Bit de datos

11D4Bit de datos

12D5Bit de datos

13D6Bit de datos

14D7Bit de datos ms significativo

Tabla 1 Funcin de los puntos de conexin.

Los tres primeros puntos de conexin (pins) son para la alimentacin y control del contraste. Los tres siguientes (RS, R/W y E) son para el control y los restantes (D0 a D7) son para el intercambio de datos.

El gobierno de la pantalla LCD lo lleva a cabo el controlador HD44780U de Hitachi (o similar). La utilizacin correcta del dispositivo depende del conocimiento que se tenga sobre su funcionamiento, seales de control, instrucciones, etc. Asimismo, la forma de conexin al microcontrolador depender de los diferentes modos de funcionamiento del display por lo que resulta imprescindible describir su funcionamiento.

3.2 Funcionamiento del displayA modo de introduccin general, el display es un dispositivo que dispone de un puerto de Entrada/Salida por el que recibe instrucciones y datos y por el que devuelve informacin sobre su estado interno. Para ello dispone de algunos registros que se seleccionan mediante las lneas de control. Cada operacin necesita de unos tiempos de ejecucin que se describirn posteriormente. Todo este proceso de comunicacin se controla con las tres lneas de control (RS, R/W y E) conforme al cronograma del dispositivo.

3.2.1 Alimentacin y control de contraste

La alimentacin de 5 V. la recibe a travs de los dos primeros puntos de conexin, al primero (Vss) se conecta la masa y al segundo (Vdd) los 5 voltios, con un consumo de corriente que no excede de 5mA. El tercero (Vo) permitir el control del contraste variando la tensin en el mismo entre 0 (contraste mnimo) y 5 voltios (contraste mximo). A la hora de conectarlo, podremos optar entre dos soluciones:

1. Fijar el contraste a su valor mximo.

sta es la solucin ms sencilla, para lo cual se conectar este punto a 5 V.

2. Regular el contraste.

Para esta solucin se conectar un potencimetro en configuracin de divisor de tensin variable, conforme se detalla en la figura y con el que se suministra la tensin deseada entre 0 y 5 V.

Figura 2 Conexin de un potencimetro de contraste.

Cabe recordar que cada fabricante puede optar por diferentes soluciones de polarizacin para la regulacin del contraste y por tanto ser necesario consultar la documentacin del dispositivo.

3.2.2 La pantalla y los caracteres

El display est formado por un LCD (Liquid Crystal Display, pantalla de cristal lquido) de dos lneas con 16 posiciones cada una. Cada posicin est formada por una matriz que puede ser de 5 x 8 de 5 x 10 puntos, para representar los diferentes caracteres o smbolos. La pantalla est gobernada por el controlador HD44780U que dispone de dos plantillas de caracteres predefinidas en la CGROM (Character Generator ROM). La primera plantilla est formada por 160 caracteres de 5 x 8 puntos ms 32 de 5 x 10 y la segunda por 240 caracteres de 5 x 8 puntos. Ambas se pueden consultar en el Anexo I.

En la tabla 2 se muestran los caracteres ms importantes de la referida plantilla. Los cdigos de cada carcter vienen dados en hexadecimal y se puede comprobar que coinciden con los cdigos en ASCII.

CdigoCarac.CdigoCarac.CdigoCarac.CdigoCarac.CdigoCarac.CdigoCarac.

$20Espacio$300$40@$50P$60`$70P

$21$311$41A$51Q$61A$71Q

$22$322$42B$52R$62B$72R

$23#$333$43C$53S$63C$73S

$24$$344$44D$54T$64D$74T

$25%$355$45E$55U$65E$75U

$26&$366$46F$56V$66F$76V

$27$377$47G$57W$67G$77W

$28($388$48H$58X$68H$78X

$29)$399$49I$59Y$69I$79Y

$2A*$3A:$4AJ$5Z$6AJ$7AZ

$2B+$3B;$4BK$5B[$6BK$7B{

$2C,$3C$4EN$5E^$6EN$7E~

$2F/$3F?$4FO$5F_$6FO$7F

Tabla 2 Conjunto de caracteres de uso ms comn.

En el caso aqu referido, la matriz de cada posicin de la pantalla LCD es de 5 x 8 puntos, por lo que slo tiene sentido usar la segunda plantilla de 240 caracteres predefinidos.

3.2.3 La memoria del display

El display dispone de dos memorias de acceso aleatorio. La DDRAM (Display Data RAM) donde se guardan los datos que se presentan en la pantalla y consta de 80 posiciones de 8 bits, es decir, 80 caracteres, y la CGRAM (Character Generator RAM) que permite definir caracteres de usuario diferentes de los predefinidos en la CGROM. Veamos a continuacin su funcionamiento:

3.2.3.1 Display Data RAM (DDRAM)Como ya se ha comentado dispone de 80 posiciones destinadas a guardar los caracteres a representar en la pantalla. Esta memoria se puede configurar en el modo de una lnea, en cuyo caso tendr las 80 direcciones consecutivas, o en modo de dos lneas (se entiende que slo tiene sentido si la pantalla LCD es de dos lneas), quedando fraccionada en dos bloques de 40 posiciones consecutivas por lnea. Existe una tercera variante implementada con un LCD de cuatro lneas en la que se fracciona en cuatro bloques de 20 posiciones.

DDRAM

Modo de 1 lnea.

1 2 3 4 5 6 7 79 80

Direccin00010203040506( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 4E4F

Modo de 2 lneas.

1 2 3 4 5 6 7 39 40

Lnea 100010203040506( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 2627

Lnea 2404142434445466667

Figura 3 Configuracin en los modos de una y dos lneas.

Como la pantalla LCD tiene nicamente 16 posiciones, se puede pensar en el display como en un display virtual de una lnea de 80 caracteres, o bien, dos de 40, donde la pantalla real es una ventana en la que se visualizan una o dos lneas de 16 caracteres. Mas adelante se ver cmo se puede desplazar la pantalla real sobre el display virtual.

Cualquier operacin de escritura en el display se trata, en realidad, de una escritura en la DDRAM y ser visible o no en la pantalla dependiendo de la posicin relativa que en un momento dado tenga la ventana de visualizacin.

Figura 4 Display virtual y pantalla LCD.

3.2.3.2 Character Generator RAM (CGRAM)

La memoria CGRAM permite definir caracteres de usuario. En total consta de 64 posiciones de 5 bits. El controlador HD44780U puede trabajar con pantallas LCD cuyos caracteres estn definidos mediante matrices tanto de 5 x 10 como de 5 x 8 puntos. Cada fila de cada matriz se corresponde con una direccin de memoria y cada uno de los cinco bits se corresponde, a su vez, con un punto de la fila, de modo que un 1 indica que el punto est encendido y un 0 que est apagado.

Para direccionar la CGRAM se precisan 6 bits (26 = 64). En el caso de un LCD con matrices de 5 x 10 puntos, la memoria se divide en cuatro bloques de 10 posiciones, correspondiendo cada posicin con una de las 10 filas de la matriz. Los primeros cuatro bits de la direccin CGRAM servirn para determinar la fila de la matriz y los dos bits restantes sern para direccionar cada uno de los cuatro bloques posibles. Si el LCD tiene matrices de 5 x 8, como es el caso que aqu se describe, la memoria se divide en ocho bloques de ocho posiciones, de modo que con los tres bits de menor peso se recorren las filas de cada bloque y con los tres de mayor peso se recorren cada uno de los ocho caracteres de usuario.

Direccin CGRAMDato

CGRAM

0 0 00 0 010001

0 0 101010

0 1 011111

0 1 100100

1 0 011111

1 0 100100

1 1 000100

1 1 100000

0 0 10 0 001110

0 0 101110

0 1 001110

0 1 100100

1 0 011111

1 0 100100

1 1 001010

1 1 110001

1 1 10 0 000100

0 0 101010

0 1 010001

0 1 110001

1 0 010101

1 0 110101

1 1 011111

1 1 100000

Tabla 3 - Creacin de caracteres de usuario.

3.2.4 Seales de control y registros internos

Para el control se dispone de cuatro seales: validacin de datos (E), seleccin de lectura/escritura (R/W), seleccin de registro (RS) e indicador de sistema ocupado (BF). Los registros internos son tres: el contador de direcciones (AC), el registro de instrucciones (IR) y el de datos (DR).

3.2.4.1 Seales de control

Validacin de datos, Enable (E): Cuando no se utiliza el display esta seal debe permanecer a 0. Cuando se desea realizar una transferencia de informacin (lectura o escritura) se ponen los datos y las seales de control deseadas y se valida la operacin con E=1, debiendo permanecer en ese estado lgico durante un tiempo superior a 500 ns., para que se realice correctamente la captura de los datos en el registro. Cuando se devuelve la seal de validacin a su estado de reposo, E=0, la ejecucin de la instruccin se inicia con el flanco de bajada de esta seal. El periodo completo de la seal de validacin, formado por el estado lgico 1 seguido del estado lgico 0, no podr ser inferior a 1 (s. Seleccin de lectura/escritura, Read/Write (R/W): Se selecciona R/W=0 para realizar una operacin de escritura en el display y R/W=1 para la lectura de datos del mismo. Seleccin de registro, Register Select (RS): Con RS=0 se selecciona el registro de instrucciones (IR), y con RS=1 se selecciona el de datos (DR).

Indicador de sistema ocupado, Busy Flag (BF): Es una seal que proporciona el sistema y que, con valor 1 (BF=1), indica que el display est ejecutando una operacin interna y no podr aceptar una nueva instruccin hasta que termine, momento en el cual pasa a valor 0 (BF=0). El BF podr ser ledo en el ltimo bit del registro de instrucciones (IR7) para lo que se deber seleccionar el registro IR en modo lectura (RS=0, R/W=1).

Figura 5 Ejemplo de cronograma de las seales de control. (Extrado del catlogo de Hitachi).

3.2.4.2 Registros internos

Contador de direcciones, Address Counter (AC): Apunta la direccin de memoria DDRAM o CGRAM sobre la que se escribe o se lee un dato. Su valor se incrementa o decrementa automticamente en una unidad despus de cada operacin segn se haya configurado previamente. Para modificar o leer la direccin del AC se utilizan los siete primeros bits del registro IR (IR0-IR6). El valor de este contador es utilizado tambin por el circuito de control del cursor, que lo colocar en la posicin que ste indica.

Registro de instrucciones, Instruction Register (IR): En este registro se escriben las instrucciones que se desea que el display ejecute. Tambin se puede leer el valor del contador de direcciones (AC) en los primeros 7 bits (IR0 - IR6), teniendo disponible en el octavo (IR7) la seal indicadora de sistema ocupado (BF). Registro de datos, Data Register, (DR): Se utiliza para las operaciones de escritura y lectura en la memoria DDRAM o CGRAM.En la tabla 4 se resumen las seales de control asociadas a la seleccin de registro.

RSR/WAccin

00Operacin de escritura en IR (instruccin u operacin interna).

01Operacin de lectura de IR (permite leer el AC (IR0-IR6) y el BF (IR7)).

10Operacin de escritura en DR (escritura del dato en la DDRAM o CGRAM).

11Operacin de lectura de DR (lectura del dato de la DDRAM o CGRAM).

Tabla 4 Seleccin de registro.

3.2.5 Conjunto de instrucciones

El LCD se controla mediante instrucciones que se resumen en la tabla 5. En las lneas siguientes se ofrece una breve descripcin de cada una.

INSTRUCCIONRSR/WDB7DB6DB5DB4DB3DB2DB1DB0Duracin

Borrar display.00000000011.52 ms.

Cursor a inicio.000000001---37 (s.

Establecer modo de trabajo.00000001I/DS37 (s.

Control ON/OFF del display.0000001DCB37 (s.

Desplazamiento del cursor / display.000001S/CR/L------37 (s.

Establecer modo de interfaz.00001DLNF------37 (s.

Fijar direccin de CGRAM.0001ACGACGACGACGACGACG37 (s.

Fijar direccin de DDRAM.001ADDADDADDADDADDADDADD37 (s.

Lectura de BF y AC01BFACACACACACACAC0 (s.

Escritura de datos en CGRAM/DDRAM10Datos a escribir37 (s.

Lectura de datos en CGRAM/DDRAM11Lectura de datos37 (s.

I/D = 1

S = 1

S/C = 1

R/L = 1

DL = 1

N = 1

F = 1

BF = 1Incremento.

Display acompaa al desplazamiento.

Desplazar el display.

Desplazamiento a derecha.

Modo 8 bits.

Dos lneas.

Fuentes de 5 x 10 puntos.

Ocupado internamente.I/D = 0

S = 0

S/C = 0

R/L = 0

DL = 0

N = 0

F = 0

BF = 0Decremento.

Display quieto.

Desplazar el cursor.

Desplazamiento a izquierda.

Modo 4 bits.

Una lnea.

Fuentes de 5 x 8 puntos.

Listo para recibir comandos.

Tabla 5 Resumen de instrucciones.

3.2.5.1 Borrar display, Clear Display

CDIGO: $01

DESCRIPCIN: Esta instruccin escribe el carcter blanco ($20) en todas las posiciones de la DDRAM, pone el contador de direcciones (AC) a cero y devuelve el display a su posicin de inicio si se encuentra desplazado. Tambin lo configura en el modo de incremento (I/D=1).

TIEMPO DE EJECUCIN: 1.52 ms.

3.2.5.2 Cursor a inicio, Return Home

CDIGO: $02 DESCRIPCIN: Enva el cursor a la posicin 0, es decir, carga la direccin 0 en el contador de direcciones (AC) y devuelve el display a la posicin de inicio.

TIEMPO DE EJECUCIN: 37 (s.

3.2.5.3 Establecer modo de trabajo, Entry Mode Set

CDIGO: 0 0 0 0 0 1 I/D S [$0 (4-7)]

DESCRIPCIN: Cada vez que se realiza una lectura o escritura el contador de direcciones (AC) se incrementa o decrementa en funcin del valor del bit I/D.

I/D: Cuando I/D=1, el contador de direcciones se incrementa y el cursor se mueve hacia la derecha y cuando es I/D=0 se decrementa y el cursor se mueve hacia la izquierda.

S: Con el bit S=1 se indica al display real que se desplace junto con el cursor, con lo que da la impresin de que es el display el que se desplaza, ya que cursor y display real mantienen la misma posicin relativa. Si S=0 el display permanece quieto y podemos observar cmo el cursor avanza con cada escritura.

TIEMPO DE EJECUCIN: 37 (s.

3.2.5.4 Control ON/OFF del display CDIGO: 0 0 0 0 1 D C B [$0 (8-F)] (Valor tpico $0E)

DESCRIPCIN: Con este comando se activan y desactivan el display, el cursor y la funcin de parpadeo.

D: Cuando D=0, el display funciona normalmente pero la pantalla LCD est apagada. Todos los caracteres que se escriban permanecern en la DDRAM y se harn visibles en el momento en que hagamos D=1.

C: Con C=1 se activa el cursor y con C=0 se desactiva, es decir, no se ve.

B: Si B=1, el carcter que se halla en la posicin del cursor parpadea. Si B=0, no parpadea.

TIEMPO DE EJECUCIN: 37 (s.

3.2.5.5 Desplazamiento del cursor o display CDIGO: 0 0 0 1 S/C R/L 0 0 DESCRIPCIN: Esta instruccin desplaza el cursor o el display una posicin a derecha o izquierda, segn se indique con los bits S/C y R/L. S/C=1 desplaza el display real y S/C=0 desplaza el cursor. Con R/L=1/0 se indica que el desplazamiento sea a derecha/izquierda.

TIEMPO DE EJECUCIN: 37 (s.

3.2.5.6 Establecer modo de interfaz, Function Set

CDIGO: 0 0 1 DL N F 0 0 DESCRIPCIN: Con esta instruccin se configuran tres aspectos del display: La longitud del bus de datos, el nmero de lneas y el tipo de fuentes.

DL: Si DL=1, se configura un bus de datos de 4 bits, usando slo los de mayor peso del puerto (DB4 a DB7) y, si DL=0, el bus es de ocho bits (DB0 a DB7). En el modo de cuatro bits cada instruccin se enva en dos bloques consecutivos.

N: Si N=1, el controlador trabaja en el modo de dos lneas (slo tiene sentido con un LCD de dos lneas) y si N=0 trabaja en el modo de una lnea.

F: Con F=1 se elige el juego de caracteres de 5 x 10 puntos y si F=0 el juego a utilizar es el de 5 x 8 puntos.

TIEMPO DE EJECUCIN: 37 (s.

3.2.5.7 Fijar direccin de CGRAM

CDIGO: 0 1 A5 A4 A3 A2 A1 A0 CDIGO TPICO: 0 1 0 0 0 0 0 0 (Acceso a la posicin cero de la CGRAM)

DESCRIPCIN: La direccin especificada en A5A0 se copia en el contador de direcciones para el acceso a la CGRAM.

TIEMPO DE EJECUCIN: 37 (s.

3.2.5.8 Fijar direccin de DDRAM

CDIGO: 1 A6 A5 A4 A3 A2 A1 A0 CDIGO TPICO: 1 0 0 0 0 0 0 0 (Acceso a la posicin cero de la DDRAM).

DESCRIPCIN: La direccin (A6-A0) se copia en el contador de direcciones para el acceso a la DDRAM.

TIEMPO DE EJECUCIN: 37 (s.

3.2.5.9 Escritura de datos en la CGRAM o DDRAM

CDIGO: 1 0 D D D D D D D D DESCRIPCIN: Escribe el dato especificado en la DDRAM o CGRAM. La escritura en una u otra memoria viene determinada por la operacin previa. En el caso de iniciarse una escritura nueva, mediante la operacin de fijar una direccin de la CGRAM o DDRAM. Por defecto se trabaja siempre en la DDRAM. No debe olvidarse que tras cada escritura el AC se incrementa o decrementa automticamente.

TIEMPO DE EJECUCIN: 37 (s.

3.2.5.10 Lectura de datos de la CGRAM o DDRAM

CDIGO: 1 1 D D D D D D D D DESCRIPCIN: Esta instruccin funciona de forma idntica a la escritura y permite conocer los datos grabados en estas memorias.

TIEMPO DE EJECUCIN: 37 (s.

3.2.6 Secuencia tpica de inicializacin del LCD

Cuando se va a comenzar a utilizar el display, es necesario configurar previamente el dispositivo. Ello se hace a travs de una secuencia de inicializacin con la que se define, el tamao del bus de datos, el nmero de lneas, el juego de caracteres, etc., tras la cual ya se puede enviar caracteres al display.

Hay que tener en cuenta que el controlador HS44780U dispone de un circuito de reset interno que, al conectar la alimentacin, realiza, durante 10 ms., la siguiente secuencia:

3. Borra display ($01).

4. Establece interfaz de datos de 8 bits, una lnea y fuentes de 5 x 8 puntos ($20).

5. Display, cursor y parpadeo apagados ($08).

6. Modo de incremento con el display real quieto ($06).

Partiendo de esta configuracin inicial parece necesario establecer una secuencia de inicio para configurarlo conforme a la forma de conexin del hardware y a la aplicacin que se le vaya a dar. A continuacin se describe una secuencia tpica, vlida para la operacin en 8 y 4 bits.

7. Interfaz de datos de 8 o 4 bits, una lnea y fuentes de 5 x 8 puntos ($20 o $30).

8. Incrementar contador de direcciones y display quieto ($06).

9. Display y cursor encendidos y sin parpadeo ($0E).

Tras esta secuencia se encuentra listo para imprimir datos.

3.2.7 Formas de conexin a un microcontrolador

A la hora de conectar el display a un microcontrolador existen dos factores que van a determinar la forma de conexin y que son: la longitud del bus de datos y los modos de control del LCD. A su vez, el microcontrolador va a jugar un papel determinante en funcin de los recursos que tenga disponibles, como son la memoria, puertos de entrada, salida o bidireccionales, etc.

3.2.7.1 Longitud del bus de datos

El bus de datos del display es de 8 bits, pero puede configurarse para trabajar con cuatro, multiplexando los bytes en grupos de 4 bits (nibbles). Esto permite ahorrar 4 puntos de conexin (pins) del puerto de entrada/salida de datos, pero tiene el inconveniente de que el software de control es ms complejo, ya que debe controlar adems el proceso de multiplexacin.

3.2.7.2 Modos de control del LCD

Existen dos formas de controlar el LCD dependiendo de si se usa o no el bit indicador de ocupado:

Control en bucle cerrado: En este caso se observa el bit de ocupado (BF) hasta que el display termine la ejecucin de la instruccin en curso. Esto se podr hacer con diferentes tcnicas. Por ejemplo mediante un bucle de observacin hasta que finalice la instruccin en ejecucin (BF=0), o bien, provocando un proceso de interrupcin cuando se cumple esa condicin BF=0, etc. Para realizar el control en bucle cerrado es necesario conectar el pin DB7 del display a un puerto bidireccional que deber configurarse como salida o entrada de forma alternativa, cada vez que se lee el BF o se enva un dato. Control en bucle abierto: De este segundo modo no se realiza comprobacin alguna sobre el estado del display. Se considera a ste como si de un componente pasivo se tratara. Esto se puede hacer si se tienen en cuenta los tiempos mximos de ejecucin de las instrucciones indicados por el fabricante. Despus de enviar una instruccin, se espera un tiempo tal que asegure que la instruccin ha finalizado antes de enviar la siguiente.Si se opta por este control, se puede realizar una segunda simplificacin en el hardware derivada de considerar que no va a ser necesario leer ningn registro del display, con lo que se podra configurar de modo permanente en modo escritura. De este modo no es necesario dedicar una lnea de control para esta funcin (R/W=0) y por tanto slo son necesarias dos seales de control (RS y E).

El control en bucle cerrado goza de una mayor velocidad ya que se establece un dialogo entre el LCD y el micro. Tambin es cierto que la complejidad del software es mucho mayor ya que hay que realizar muchas mas operaciones diferentes para cada instruccin que se enva, pero se pueden evitar los tiempos de espera del control en bucle abierto y dedicarlos a procesar otras tareas. En funcin de la aplicacin que se quiera disear se optar por la velocidad de la primera solucin o la sencillez de la segunda.

Bus de 4 bitsBus de 8 bits

Bucle cerrado3 pins de salida para el control

4 pins E/S3 pins de salida para el control

8 pins de E/S para los datos

Bucle abierto2 pins de salida para el control

4 pins de salida para los datos2 pins de salida para el control

8 pins de salida para los datos

Tabla 6 Puntos de conexin necesarios segn las diferentes opciones.

3.3 Ejemplos de control del LCD con el micro MC68331

La potencia del microcontrolador 68331 y su variedad de puertos permite implementar cualquier control que se desee de forma aislada. La eleccin de la forma de conexin y del tipo de control no es una decisin que se deba tomar a priori, sino que debe ir integrado en el diseo global de la aplicacin que se quiera realizar y de la que forma parte el display como un mdulo de presentacin. La mayor o menor complejidad de la aplicacin, el nmero de seales que es preciso manejar, la memoria disponible, la necesidad de que funcione en tiempo real, etc., son las caractersticas que, de verdad, van a determinar la conexin y el control. Es interesante tener siempre presente que, ante varias soluciones alternativas que cumplen con los objetivos de diseo y fiabilidad, siempre es deseable escoger la ms sencilla.

El objetivo de este ejemplo es ofrecer un punto de partida a aquellos alumnos que necesiten utilizar el display para la presentacin de datos. Por ello se han implementado sendos controles, en bucle abierto y en bucle cerrado, de una forma estructurada, describiendo brevemente cmo se han resuelto algunos de los problemas relativos a su puesta en funcionamiento.

3.3.1 Ejemplo de control en bucle abierto

3.3.1.1 Descripcin de la aplicacin de control

La aplicacin va a consistir en la realizacin de una serie de acciones que se detallan en la lista que se muestra a continuacin:

10. Escribir la frase, PRIMERA PRUEBA. ESCRITURA NORMAL DE TEXTO.

11. Escribir de nuevo, ESPERE UNOS SEGUNDOS DESPUES DE APAGARSE EL DISPLAY.

12. Apagar el display.

13. Escribir en la DDRAM el siguiente prrafo: En un lugar de la Mancha de cuyo nombre no quiero acordarme, no ha mucho ....... sin que aparezca en la pantalla.

14. Encender la pantalla e ir avanzando el display, primero hacia delante y despus hacia detrs un total de tres veces seguidas en cada sentido.

3.3.1.2 Descripcin de la conexin y modo de control

En primer lugar se realizar la conexin de la alimentacin y de la seal de contraste de cualquiera de las formas descritas en 2.1. A continuacin hay que conectar las seales de control y datos al microcontrolador.

En este ejemplo se va a optar por un control en bucle abierto y con ocho bits de datos. Las tres seales de control (E, RS y R/W) se van a conectar a los bits 5 (PC4), 6 (PC5) y 7 (PC6) del puerto C del micro y las de datos al puerto E. Cabe observar que sera posible prescindir de la seal R/W conectndola a masa de forma permanente, economizando as un bit del puerto.

3.3.1.3 Implementacin en cdigo ensamblador del programa de control

A continuacin se adjunta el cdigo en lenguaje ensamblador que realiza las tareas arriba descritas. El inters del programa reside en las secciones INSTRUCCIONES DEL LCD y SERVICIOS DEL DISPLAY. En la primera se han implementado todas las instrucciones que puede ejecutar el LCD y en la segunda algunos servicios de ms alto nivel que permiten realizar acciones de utilidad general ms complejas a partir de las instrucciones de una forma trasparente para el usuario. Para ello los servicios son invocados mediante una excepcin TRAP #n sin la necesidad de conocer cmo funcionan.

******************************************************************************

* REGISTROS SIM *

******************************************************************************

SIMCR EQU $FFFA00 * Controla la configuracin del sistema ($00CF).

SYNCR EQU $FFFA04 * Fija frecuencia y modo de operacin del reloj ($3F08).

RSR EQU $FFFA06 * Guarda la causa de un reset (Ej.-$80, reset hardware).

PORTE EQU $FFFA11 * Registro de lectura y escritura en el puerto E.

PORTE1 EQU $FFFA13 * Tiene exactamente la misma funcin que el anterior.

DDRE EQU $FFFA15 * Determina el sentido del puerto E pin a pin.

PEPAR EQU $FFFA17 * Asignacin del puerto E (Puerto o control de BUS).

PORTF EQU $FFFA19 * Registro de lectura y escritura en el puerto F.

PORTF1 EQU $FFFA1B * Tiene exactamente la misma funcin que el anterior.

DDRF EQU $FFFA1D * Determina el sentido del puerto F pin a pin.

PFPAR EQU $FFFA1F * Asignacin del puerto F (Puerto F o control de BUS).

PICR EQU $FFFA22 * Configuracin de interrupciones peridicas ($000F).

PITR EQU $FFFA24 * Contiene la cuenta del timer peridico ($0000).

SYPCR EQU $FFFA21 * Controla las funciones de monitorizacin del sistema

* como es el caso del Watchdog. ($40 anula watchdog).

SWSR EQU $FFFA27 * Se debe escribir peridicamente si Watchdog activado.

CSPAR0 EQU $FFFA44 * Sirve junto con CSPAR1 para configurar la funcin de

CSPAR1 EQU $FFFA46 * los pins de Chip Select (CS, Port C, etc.).

PORTC EQU $FFFA41 * Registro de escritura en el puerto C.

******************************************************************************

* REGISTROS GPT-PWM *

******************************************************************************

GPTMCR EQU $FFF900 * Configuracin del GPT.

ICR EQU $FFF904 * Configuracin de interrupciones del GPT.

DDRGP EQU $FFF906 * Determina el sentido del puerto GP.

PORTGP EQU $FFF907 * Registro de lectura y escritura del puerto GP.

OC1M EQU $FFF908 * Mscara para asignar los pin de captura de OC.

OC1D EQU $FFF909 * Registro de datos a comparar con el puerto OC.

TCNT EQU $FFF90A * Registro del GPT asociado a las capturas IC, OC y PAI.

PACTL EQU $FFF90C * Configuracin del acumulador de pulsos PAI.

PACNT EQU $FFF90D * Es el contador de registro de eventos del PAI.

TIC1 EQU $FFF90E * Capturan el TCNT cuando se registra un evento en IC1.

TIC2 EQU $FFF910 * Capturan el TCNT cuando se registra un evento en IC2.

TIC3 EQU $FFF912 * Capturan el TCNT cuando se registra un evento en IC3.

TOC1 EQU $FFF914 * Cuando coincide con TCNT causa eventos en los pin OC.

TOC2 EQU $FFF916 * Si el valor coincide con TCNT causa un evento en OC2.

TOC3 EQU $FFF918 * Si el valor coincide con TCNT causa un evento en OC3.

TOC4 EQU $FFF91A * Si el valor coincide con TCNT causa un evento en OC4.

TI4O5 EQU $FFF91C * Pin compartido (Puede realizar una funcin TIC o TOC).

TCTL1 EQU $FFF91E * Configura el modo de comparacin y nivel de salida.

TCTL2 EQU $FFF91F * Configura que flanco provoca la captura en los IC.

TMSK1 EQU $FFF920 * Habilita las interrupciones de IC y OC.

TMSK2 EQU $FFF921 * Habilita las interrupciones del PAI y del TIMER.

TFLG1 EQU $FFF922 * Registro de flags de interrupciones de IC y OC.

TFLG2 EQU $FFF923 * Registro de flags de interrupciones del PAI y TIMER

CFORC EQU $FFF924 * Fuerza una salida en los pin OC y PWM.

PWMC EQU $FFF925 * Configuracin del PWM.

PWMA EQU $FFF926 * Determina el ancho de pulso. ($80 es medio ciclo)

PWMB EQU $FFF927 * Determina el ancho de pulso. ($80 es medio ciclo)

PWMCNT EQU $FFF928 * Registro del contador del PWM.

PWMBUFA EQU $FFF92A * Buffer para prevenir glitches cuando modificamos PWMA.

PWMBUFB EQU $FFF92B * Buffer para prevenir glitches cuando modificamos PWMB.

PRESCL EQU $FFF92C * Guarda el valor del multiplicador del GPT.

******************************************************************************

* TIPOS DE RETARDO *

******************************************************************************

CORTO EQU $03FF * Del orden de 100us.

LARGO EQU $BFFF * Del orden de 5ms.

RETARDO EQU $6FFF * Se usa para el avance de caracteres.

******************************************************************************

* CONSTANTES DE INTERS *

******************************************************************************

INI_DR EQU $00 * Inicio de lnea nica de caracteres.

FIN_DR EQU $4F * Fin lnea nica de caracteres.

L1_INI_DR EQU $00 * Inicio de la primera lnea.

L1_FIN_DR EQU $27 * Fin de la primera lnea.

L2_INI_DR EQU $40 * Inicio de la segunda lnea.

L2_FIN_DR EQU $67 * Fin de la segunda lnea.

LCD_LONG EQU $0F * Longitud de la pantalla del LCD.

******************************************************************************

* PUERTOS DEL DISPLAY *

******************************************************************************

BYTE_DATA EQU PORTE * Puerto de datos.

BYTE_CONTROL EQU PORTC * Puerto de control.

BIT_ENABLE EQU 4 * Se usa para controlar el proceso de comunicacin.

* con el controlador del display.

BIT_RS EQU 5 * Seleccin del tipo de registro al que se escribe:

* 0 - Registro de Instrucciones (IR).

* 1 - Registro de Datos (DR).

BIT_RW EQU 6 * Cambio entre los modos de lectura y escritura.

******************************************************************************

* VECTORES DEL RESET *

******************************************************************************

ORG $0

PILA_RESET DC.L FIN_PILA

PC_RESET DC.L PRINCIPAL

******************************************************************************

* VECTORES DE INTERRUPCIN *

******************************************************************************

ORG $80

VECTOR0 DC.L DRIVER_DISPLAY

******************************************************************************

* PUNTERO DE PILA *

******************************************************************************

ORG $4000

PILA DS.L 200

FIN_PILA:

******************************************************************************

* LISTA DE MENSAJES *

******************************************************************************

ORG $2000

MENSAJES DC.L MENS1,MENS2,MENS3

MENS1 DC.B 'PRIMERA PRUEBA. ESCRITURA NORMAL DE TEXTO.',$00

MENS2 DC.B 'ESPERE UNOS SEGUNDOS DESPUES DE APAGARSE EL DISPLAY.',$00

MENS3 DC.B 'En un lugar de la Mancha de cuyo nombre no quiero acordarme, no ha mucho .......',$00

******************************************************************************

* SUBRUTINAS *

******************************************************************************

ORG $1000

******************************************************************************

* CONFIGURACION DEL HARDWARE DEL MICRO *

******************************************************************************

*************************** INHAB_WDOG ****************************

* Inhabilita el Watchdog que es una funcin de monitoriracin del *

* sistema para detectar la entrada en un bucle infinito. *

*******************************************************************

INHAB_WDOG:

MOVE.B #$40,SYPCR * Inhabilitamos WatchDog

RTS

*----------------------------------------------------------------------------*

************************** PORT_EC_CFG ****************************

* Con esta rutina se configuran los puertos E y C que son los que *

* se usan para controlar el display y el teclado. *

*******************************************************************

PORT_EC_CFG

MOVE.B #$FF,DDRE * PE0..PE7 salidas.

MOVE.B #$00,PEPAR * Configura el registro de control del puerto E.

MOVE.B #$00,CSPAR0 * PC0-PC2 utilizables.

MOVE.W #$0000,CSPAR1 * PC3-PC6 utilizables.

MOVE.B #$00,PORTE

MOVE.B #$0F,PORTC

RTS

*----------------------------------------------------------------------------*

******************************************************************************

* RUTINAS DE CONTROL *

******************************************************************************

***************************** DELAY *******************************

* Produce un retardo cuya duracin viene determinada por el valor *

* almacenado en el registro D1. *

*******************************************************************

DELAY

SUB.L #1,D1

BNE DELAY

RTS

*----------------------------------------------------------------------------*

***************************** TOGGLE ******************************

* Provoca la ejecucin de la instruccin, generando un pulso de *

* duracin determinada por el valor del registro D2 en la lnea *

* Enable del LCD. *

*******************************************************************

TOGGLE

MOVE.L D1,-(A7)

MOVE.L D2,D1

BSET.B #BIT_ENABLE,BYTE_CONTROL

BSR DELAY

MOVE.L D2,D1

BCLR.B #BIT_ENABLE,BYTE_CONTROL

BSR DELAY

MOVE.L (A7)+,D1

RTS

*----------------------------------------------------------------------------*

******************************************************************************

* INSTRUCCIONES LCD *

******************************************************************************

************************** CFG_DISPLAY ****************************

* Configura el modo de funcionamiento del display. Bsicamente se *

* reduce a tres aspectos: *

* 1 - Comunicacin con el display con 8 o 4 bits. *

* 2 - 1 o 2 lneas en pantalla. *

* 3 - Dos tipos de fuentes 5x8 o bien 5x10 puntos. *

* Suprimiendo el asterisco correspondiente se puede modificar la *

* opcin seleccionada por defecto. *

* Retardo necesario CORTO *

*******************************************************************

CFG_DISPLAY

MOVE.B #$30,BYTE_DATA * Modo 8 bits, una lnea, fuentes 5x8 puntos.

* BCLR.B #4,BYTE_DATA * Modo 4 bits.

* BSET.B #3,BYTE_DATA * Habilita 2 lneas.

* BSET.B #2,BYTE_DATA * Fuentes de 5x10 puntos.

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

*************************** MODO_AVC ******************************

* El cursor avanza cuando se escribe un carcter en el registro *

* DR. El display permanece esttico. *

* Retardo necesario CORTO. *

*******************************************************************

MODO_AVC

MOVE.B #$06,BYTE_DATA * Cursor adelante, display no acompaa.

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

*************************** MODO_AVT ******************************

* El cursor y el display avanzan solidariamente cuando se escribe *

* un carcter en el registro DR. *

* Retardo necesario CORTO. *

*******************************************************************

MODO_AVT

MOVE.B #$07,BYTE_DATA * Cursor adelante, display acompaa.

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

*************************** MODO_RTC ******************************

* El cursor retrocede cuando se escribe un carcter en el regis- *

* tro DR. El display permanece esttico. *

* Retardo necesario CORTO. *

*******************************************************************

MODO_RTC

MOVE.B #$04,BYTE_DATA * Cursor atrs, display no acompaa.

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

*************************** MODO_RTT ******************************

* El cursor y el display retroceden solidariamente cuando se es- *

* cribe un carcter en el registro DR. *

* Retardo necesario CORTO. *

*******************************************************************

MODO_RTT

MOVE.B #$05,BYTE_DATA * Cursor atrs, display acompaa.

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

************************** MODO_NORMAL ****************************

* Se configura el modo del display. Por defecto estarn tanto el *

* display como el cursor encendidos y sin parpadear el carcter *

* donde se encuentra el cursor. *

* Retardo necesario CORTO *

*******************************************************************

MODO_NORMAL

MOVE.B #$0E,BYTE_DATA * Display y Cursor ON, blinkin OFF

* BCLR.B #2,BYTE_DATA * Display OFF

* BCLR.B #1,BYTE_DATA * Cursor OFF

* BSET.B #0,BYTE_DATA * Blinking ON

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

**************************** MODO_OFF *****************************

* Produce el apagado de la pantalla del LCD. Se puede seguir en- *

* viando ordenes al display que sern ejecutadas. La nica dife- *

* rencia es que no aparece reflejado hasta que no se enciende de *

* el LCD. *

* Retardo necesario CORTO *

*******************************************************************

MODO_OFF

MOVE.B #$08,BYTE_DATA * Display y Cursor ON, blinkin OFF

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

***************************** CLEAR *******************************

* Borra el contenido del display y situa el cursor a la izquierda *

* Retardo necesario INDEFINIDO *

*******************************************************************

CLEAR

MOVE.B #$01,BYTE_DATA

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

************************** RETURN_HOME *****************************

* Devuelve el cursor a la primera posicin conservando el conteni- *

* de la memoria del display. *

* Retardo necesario LARGO *

********************************************************************

RETURN_HOME

MOVE.B #$02,BYTE_DATA

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

*************************** CURS_IZQ ******************************

* Mueve el cursor a la izquierda sin modificar el texto. *

* Retardo necesario CORTO *

*******************************************************************

CURS_IZQ

MOVE.B #$10,BYTE_DATA

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

*************************** CURS_DCHA *****************************

* Mueve el cursor a la derecha sin modificar el texto. *

* Retardo necesario CORTO *

*******************************************************************

CURS_DCHA

MOVE.B #$14,BYTE_DATA

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

*************************** DISP_IZQ ******************************

* Desplaza la ventana del display hacia la izquierda. *

* Retardo necesario CORTO *

*******************************************************************

DISP_IZQ

MOVE.B #$1C,BYTE_DATA

BSR TOGGLE

RTS

*************************** DISP_DCHA *****************************

* Desplaza la ventana del display hacia la derecha. *

* Retardo necesario CORTO *

*******************************************************************

DISP_DCHA

MOVE.B #$18,BYTE_DATA

BSR TOGGLE

RTS

*----------------------------------------------------------------------------*

************************** CGRAM_ADDR *****************************

* Coloca la direccin indicada en el contador de la Memoria del *

* Generador de Caracteres (CGRAM). Este generador permite definir *

* 8 caracteres de usuario en el modo 5x8 y cuatro en el de 5x10 *

* puntos. Para un correcto uso de la instruccin deberemos escri- *

* bir una de las 64 direcciones posibles (de $00 a $3F) en *

* BYTE_DATA. *

* Retardo necesario CORTO *

*******************************************************************

CGRAM_ADDR

ADD.B #$40,BYTE_DATA

BSET.B #BIT_RS,BYTE_CONTROL

BSR TOGGLE

BCLR.B #BIT_RS,BYTE_CONTROL

RTS

*----------------------------------------------------------------------------*

************************** DDRAM_ADDR *****************************

* Coloca la direccin indicada en el contador de la Memoria de *

* Datos del Display (DDRAM). Existen 80 posiciones disponibles *

* que sern consecutivas cuando el display trabaje en una nica *

* lnea o repartidas en dos grupos de 40 cuando trabaje en el *

* modo de dos lneas. *

* Vase detalle a continuacin: *

* - 80 posiciones x 1 lnea - las direcciones van de $0 a $4F. *

* - 40 posiciones x 2 lneas - las direcciones se reparten: *

* Lnea primera: de $00 a $27. *

* Lnea segunda: de $40 a $67. *

* Retardo necesario CORTO *

*******************************************************************

DDRAM_ADDR

ADD.B #$80,BYTE_DATA

BSET.B #BIT_RS,BYTE_CONTROL

BSR TOGGLE

BCLR.B #BIT_RS,BYTE_CONTROL

RTS

*----------------------------------------------------------------------------*

*************************** ESCRIBIR ******************************

* Esta instruccin permite escribir en el registro de datos (DR) *

* una palabra que puede ir destinada a la memoria del generador *

* de caracteres (CGRAM) o a la de datos del display (DDRAM) de- *

* pendiendo de cual fu la ltima seleccin. El dato a escribir *

* lo pondremos en el puerto de datos (BYTE_DATA). *

* Retardo necesario CORTO. *

*******************************************************************

ESCRIBIR

BSET.B #BIT_RS,BYTE_CONTROL

BSR TOGGLE

BCLR.B #BIT_RS,BYTE_CONTROL

RTS

*----------------------------------------------------------------------------*

******************************************************************************

* RUTINAS DE INICIALIZACIN DE DISPOSITIVOS *

******************************************************************************

**************************** INI_LCD ******************************

* Esta rutina realiza toda la inicializacin del display tras el *

* encendido del mismo. Despus de su ejecucin el display queda *

* preparado para recibir ordenes y caracteres. *

*******************************************************************

INI_LCD

MOVE.L #CORTO,D2 * Fijamos la duracin de retardo.

BSR CFG_DISPLAY

BSR MODO_NORMAL

BSR CLEAR

RTS

*----------------------------------------------------------------------------*

******************************************************************************

* SERVICIOS DE DISPOSITIVOS *

******************************************************************************

******************************************************************************

* SERVICIOS DEL DISPLAY *

******************************************************************************

************************** ESCR_MENSAJE ***************************

* Esta rutina escribe un mensaje completo en el display en el *

* sentido natural de escritura cuya direccin de inicio se la pa- *

* samos a travs del registro A0. El smbolo con que deber ter- *

* minarse el mensaje es $00. Si el mensaje es superior a los 16 *

* caracteres que tiene el LCD, al alcanzar el final de la lnea *

* automticamente se cambia del modo AVC al AVT en el que el dis- *

* play acompaa al cursor dando la sensacin de que el texto se *

* desplaza. *

*******************************************************************

ESCR_MENSAJE

MOVEM.L D0-D2,-(A7)

MOVE.L #LARGO,D2

BSR RETURN_HOME

MOVE.L #CORTO,D2

BSR MODO_AVC

MOVE.B #LCD_LONG,D0 * Cuenta los caracteres escritos en el display.

BUCLE1

TST.B (A0)

BEQ FIN1

MOVE.B (A0)+,BYTE_DATOS

BSR ESCRIBIR

SUB.B #1,D0

BEQ FIN_LIN1

MOVE.L #RETARDO,D1

BSR DELAY

BRA BUCLE1

FIN_LIN1

BSR MODO_AVT * Cambia al modo AVT para que el display acompae al cursor.

BRA BUCLE1

FIN1

MOVEM.L (A7)+,D0-D2

RTS

*************************** DSP_ADELANTE **************************

* Esta rutina desplaza hacia la derecha la pantalla del display *

* recorriendo las 80 posiciones del registro DDRAM. *

*******************************************************************

DSP_ADELANTE

MOVEM.L D0-D1,-(A7)

MOVE.B #FIN_DR,D0 * Cuenta los caracteres escritos en el display.

BUCLE2

BSR DISP_DCHA

MOVE.L #RETARDO,D1

BSR DELAY

SUB.B #1,D0

BNE BUCLE2

MOVEM.L (A7)+,D0-D1

RTS

*----------------------------------------------------------------------------*

**************************** DSP_ATRAS ****************************

* Esta rutina desplaza hacia la izquierda la pantalla del display *

* recorriendo las 80 posiciones del registro DDRAM. *

*******************************************************************

DSP_ATRAS

MOVEM.L D0-D1,-(A7)

MOVE.B #FIN_DR,D0 * Cuenta los caracteres escritos en el display.

BUCLE3

BSR DISP_IZQ

MOVE.L #RETARDO,D1

BSR DELAY

SUB.B #1,D0

BNE BUCLE3

MOVEM.L (A7)+,D0-D1

RTS

*----------------------------------------------------------------------------*

************************** DRIVER_DISPLAY *************************

* Esta rutina realiza el servicio indicado a travs del registro *

* D7 con un nmero ordinal. Para llamar a la rutina de servicio *

* se coloca el nmero de servicio en el registro D7 y se ejecuta *

* un TRAP #0. *

*******************************************************************

DRIVER_DISPLAY

MOVEM.L D0-D1,-(A7)

CMP.B #1,D7

BEQ SERVICIO1

CMP.B #2,D7

BEQ SERVICIO2

CMP.B #3,D7

BEQ SERVICIO3

SERVICIO1

BSR ESCR_MENSAJE

BRA FIN

SERVICIO2

BSR DSP_ADELANTE

BRA FIN

SERVICIO3

BSR DSP_ATRAS

FIN

MOVEM.L (A7)+,D0-D1

RTE

*----------------------------------------------------------------------------*

******************************************************************************

* PRINCIPAL *

******************************************************************************

ORG $400

PRINCIPAL

BSR INHAB_WDOG

BSR PORT_EC_CFG

BSR INI_LCD

MOVEA.L #MENSAJES,A6

MOVEA.L (A6)+,A0

MOVE.L #1,D7

TRAP #0

MOVEA.L (A6)+,A0

MOVE.L #1,D7

TRAP #0

BSR MODO_OFF

MOVEA.L (A6),A0

MOVE.L #1,D7

TRAP #0

BSR MODO_NORMAL

MOVE.B #3,D3

LOOP1

MOVE.L #2,D7

TRAP #0

SUB.B #1,D3

BNE LOOP1

MOVE.B #3,D3

LOOP2

MOVE.L #3,D7

TRAP #0

SUB.B #1,D3

BNE LOOP2

FINAL

BRA FINAL

END

3.3.1.3.1 Observaciones sobre el ajuste de parmetros

Existen ciertos parmetros que ha sido necesario someterlos a un ajuste, como son los retardos.

3.3.1.3.1.1Ajuste de la seal de activacin, Enable.

Esta seal es la que gobierna el proceso de comunicacin con el display. La funcin toggle tiene como objetivo conformar un pulso sobre la lnea de activacin (E). Esta funcin utiliza una subrutina llamada DELAY que introduce el retardo necesario para definir el periodo de esta seal. Cada vez que se llama a la funcin TOGGLE, sta genera un pulso de aspecto ms o menos cuadrado en la seal Enable cuyo periodo depender del valor que se cargue en el contador de retardo DELAY. A continuacin se detallan las dos subrutinas:

***************************** DELAY *******************************

* Produce un retardo cuya duracin viene determinada por el valor *

* almacenado en el registro D1. *

*******************************************************************

DELAY

SUB.L #1,D1

BNE DELAY

RTS

*----------------------------------------------------------------------------*

***************************** TOGGLE ******************************

* Provoca la ejecucin de la instruccin, generando un pulso de *

* duracin determinada en la lnea Enable del LCD. *

*******************************************************************

TOGGLE

MOVE.L D2,D1

BSET.B #BIT_ENABLE,BYTE_CONTROL

BSR DELAY

MOVE.L D2,D1

BCLR.B #BIT_ENABLE,BYTE_CONTROL

BSR DELAY

RTS

El display requiere de 37 (s. para completar la mayora de las instrucciones. Por tanto si se elige un periodo de seal de 100 (s., 50 (s. por ciclo, con toda seguridad siempre habr terminado la instruccin. Para el ajuste de este periodo se ejecuta la rutina TOGGLE en un bucle infinito y se mide con el osciloscopio el periodo de la seal resultante, que iremos ajustando variando el valor de la constante CORTO. Tambin se debe generar esta seal con un retardo superior a los 1.6 ms. que requiere la instruccin cursor a inicio (Return Home). Para ello se proceder de igual forma ajustando el valor de la constante LARGO.

3.3.2 Ejemplo de control en bucle cerrado

3.3.2.1 Descripcin de la aplicacin de control

La aplicacin va a consistir en la repeticin secuencial de un conjunto de mensajes, en particular, los nmeros del uno al nueve ms el cero y la frase siguiente: ES UNA PRUEBA DE MENSAJE LARGO PARA VER QUE PASA, esperndose que si el servicio de escritura de mensajes es lo bastante rpido, slo sean visibles en el display los diecisis caracteres ltimos de la frase, esto es: ARA VER QUE PASA.

3.3.2.2 Descripcin de la conexin y modo de control

El modo de conexin no difiere con respecto al caso anterior, con la salvedad de que en esta ocasin s se utiliza la seal R/W y, por tanto, no se puede prescindir de ella.

3.3.2.3 Implementacin en cdigo ensamblador del programa de control

El inters de este programa reside en la rapidez de ejecucin basada en la comunicacin entre los dos dispositivos.

******************************************************************************

* REGISTROS SIM *

******************************************************************************

SIMCR EQU $FFFA00 * Controla la configuracin del sistema ($00CF).

SYNCR EQU $FFFA04 * Fija frecuencia y modo de operacin del reloj ($3F08).

RSR EQU $FFFA06 * Guarda la causa de un reset (Ej.-$80, reset hardware).

PORTE EQU $FFFA11 * Registro de lectura y escritura en el puerto E.

PORTE1 EQU $FFFA13 * Tiene exactamente la misma funcin que el anterior.

DDRE EQU $FFFA15 * Determina el sentido del puerto E pin a pin.

PEPAR EQU $FFFA17 * Asignacin del puerto E (Puerto o control de BUS).

PORTF EQU $FFFA19 * Registro de lectura y escritura en el puerto F.

PORTF1 EQU $FFFA1B * Tiene exactamente la misma funcin que el anterior.

DDRF EQU $FFFA1D * Determina el sentido del puerto F pin a pin.

PFPAR EQU $FFFA1F * Asignacin del puerto F (Puerto F o control de BUS).

PICR EQU $FFFA22 * Configuracin de interrupciones peridicas ($000F).

PITR EQU $FFFA24 * Contiene la cuenta del timer peridico ($0000).

SYPCR EQU $FFFA21 * Controla las funciones de monitorizacin del sistema

* como es el caso del Watchdog. ($40 anula watchdog).

SWSR EQU $FFFA27 * Se debe escribir peridicamente si Watchdog activado.

CSPAR0 EQU $FFFA44 * Sirve junto con CSPAR1 para configurar la funcin de

CSPAR1 EQU $FFFA46 * los pins de Chip Select (CS, Port C, etc.).

PORTC EQU $FFFA41 * Registro de escritura en el puerto C.

******************************************************************************

* REGISTROS GPT-PWM *

******************************************************************************

GPTMCR EQU $FFF900 * Configuracin del GPT.

ICR EQU $FFF904 * Configuracin de interrupciones del GPT.

DDRGP EQU $FFF906 * Determina el sentido del puerto GP.

PORTGP EQU $FFF907 * Registro de lectura y escritura del puerto GP.

OC1M EQU $FFF908 * Mscara para asignar los pin de captura de OC.

OC1D EQU $FFF909 * Registro de datos a comparar con el puerto OC.

TCNT EQU $FFF90A * Registro del GPT asociado a las capturas IC, OC y PAI.

PACTL EQU $FFF90C * Configuracin del acumulador de pulsos PAI.

PACNT EQU $FFF90D * Es el contador de registro de eventos del PAI.

TIC1 EQU $FFF90E * Capturan el TCNT cuando se registra un evento en IC1.

TIC2 EQU $FFF910 * Capturan el TCNT cuando se registra un evento en IC2.

TIC3 EQU $FFF912 * Capturan el TCNT cuando se registra un evento en IC3.

TOC1 EQU $FFF914 * Cuando coincide con TCNT causa eventos en los pin OC.

TOC2 EQU $FFF916 * Si el valor coincide con TCNT causa un evento en OC2.

TOC3 EQU $FFF918 * Si el valor coincide con TCNT causa un evento en OC3.

TOC4 EQU $FFF91A * Si el valor coincide con TCNT causa un evento en OC4.

TI4O5 EQU $FFF91C * Pin compartido (Puede realizar una funcin TIC o TOC).

TCTL1 EQU $FFF91E * Configura el modo de comparacin y nivel de salida.

TCTL2 EQU $FFF91F * Configura que flanco provoca la captura en los IC.

TMSK1 EQU $FFF920 * Habilita las interrupciones de IC y OC.

TMSK2 EQU $FFF921 * Habilita las interrupciones del PAI y del TIMER.

TFLG1 EQU $FFF922 * Registro de flags de interrupciones de IC y OC.

TFLG2 EQU $FFF923 * Registro de flags de interrupciones del PAI y TIMER

CFORC EQU $FFF924 * Fuerza una salida en los pin OC y PWM.

PWMC EQU $FFF925 * Configuracin del PWM.

PWMA EQU $FFF926 * Determina el ancho de pulso. ($80 es medio ciclo)

PWMB EQU $FFF927 * Determina el ancho de pulso. ($80 es medio ciclo)

PWMCNT EQU $FFF928 * Registro del contador del PWM.

PWMBUFA EQU $FFF92A * Buffer para prevenir glitches cuando modificamos PWMA.

PWMBUFB EQU $FFF92B * Buffer para prevenir glitches cuando modificamos PWMB.

PRESCL EQU $FFF92C * Guarda el valor del multiplicador del GPT.

******************************************************************************

* TIPOS DE RETARDO *

******************************************************************************

CORTO EQU $03FF * Del orden de 100us.

LARGO EQU $BFFF * Del orden de 5ms.

RETARDO EQU $6FFF * Se usa para el avance de caracteres.

******************************************************************************

* CONSTANTES DE INTERS *

******************************************************************************

INI_DR EQU $00 * Inicio de lnea nica de caracteres.

FIN_DR EQU $4F * Fin lnea nica de caracteres.

L1_INI_DR EQU $00 * Inicio de la primera lnea.

L1_FIN_DR EQU $27 * Fin de la primera lnea.

L2_INI_DR EQU $40 * Inicio de la segunda lnea.

L2_FIN_DR EQU $67 * Fin de la segunda lnea.

LCD_LONG EQU $0F * Longitud de la pantalla del LCD.

******************************************************************************

* PUERTOS DEL DISPLAY *

******************************************************************************

BYTE_DATA EQU PORTE * Puerto de datos.

BYTE_CONTROL EQU PORTC * Puerto de control.

BIT_ENABLE EQU 4 * Se usa para controlar el proceso de comunicacin.

* con el controlador del display.

BIT_RS EQU 5 * Seleccin del tipo de registro al que se escribe:

* 0 - Registro de Instrucciones (IR).

* 1 - Registro de Datos (DR).

BIT_RW EQU 6 * Cambio entre los modos de lectura y escritura.

FLAG EQU 7 * Posicin del flag de datos en el puerto.

******************************************************************************

* VECTORES DEL RESET *

******************************************************************************

ORG $0

PILA_RESET DC.L FIN_PILA

PC_RESET DC.L PRINCIPAL

******************************************************************************

* VECTORES DE INTERRUPCIN *

******************************************************************************

ORG $80

VECTOR1 DC.L DRIVER_DISPLAY

******************************************************************************

* PUNTERO DE PILA *

******************************************************************************

ORG $4000

PILA DS.L 200

FIN_PILA:

******************************************************************************

* LISTA DE MENSAJES *

******************************************************************************

ORG $2000

MENSAJES DC.L MENS1,MENS2,MENS3,MENS4,MENS5,MENS6,MENS7,MENS8,MENS9,MENS0,MENSLARGO

MENS1 DC.B 'UNO',$00

MENS2 DC.B 'DOS',$00

MENS3 DC.B 'TRES',$00

MENS4 DC.B 'CUATRO',$00

MENS5 DC.B 'CINCO',$00

MENS6 DC.B 'SEIS',$00

MENS7 DC.B 'SIETE',$00

MENS8 DC.B 'OCHO',$00

MENS9 DC.B 'NUEVE',$00

MENS0 DC.B 'CERO',$00

MENSLARGO DC.B 'ES UNA PRUEBA DE MENSAJE LARGO PARA VER QUE PASA',$00

******************************************************************************

* SUBRUTINAS *

******************************************************************************

ORG $1000

******************************************************************************

* CONFIGURACION DEL HARDWARE DEL MICRO *

******************************************************************************

*************************** INHAB_WDOG ****************************

* Inhabilita el Watchdog que es una funcin de monitoriracin del *

* sistema para detectar la entrada en un bucle infinito. *

*******************************************************************

INHAB_WDOG:

MOVE.B #$40,SYPCR * Inhabilitamos WatchDog

RTS

*----------------------------------------------------------------------------*

************************** PORT_EC_CFG ****************************

* Con esta rutina se configuran los puertos E y C que son los que *

* se usan para controlar el display y el teclado. *

*******************************************************************

PORT_EC_CFG

MOVE.B #$FF,DDRE * PE0..PE7 salidas.

MOVE.B #$00,PEPAR * Configura el registro de control del puerto E.

MOVE.B #$00,CSPAR0 * PC0-PC2 utilizables.

MOVE.W #$0000,CSPAR1 * PC3-PC6 utilizables.

MOVE.B #$00,PORTE

MOVE.B #$0F,PORTC

RTS

*----------------------------------------------------------------------------*

******************************************************************************

* RUTINAS DE CONTROL *

******************************************************************************

***************************** DELAY *******************************

* Produce un retardo cuya duracin viene determinada por el valor *

* almacenado en el registro D1. *

*******************************************************************

DELAY

SUB.L #1,D1

BNE DELAY

RTS

*----------------------------------------------------------------------------*

************************* FLAG_ESPERAR ****************************

* Espera a que se baje el flag de ocupado. *

*******************************************************************

FLAG_ESPERAR

MOVE.B #$7F,DDRE

BSET.B #BIT_RW,BYTE_CONTROL

BSET.B #BIT_ENABLE,BYTE_CONTROL

OCUPADO

BTST.B #FLAG,BYTE_DATA

BNE OCUPADO

BCLR.B #BIT_ENABLE,BYTE_CONTROL

BCLR.B #BIT_RW,BYTE_CONTROL

MOVE.B #$FF,DDRE

RTS

*----------------------------------------------------------------------------*

*************************** ENABLE_LCD ****************************

* Provoca la ejecucin de la instruccin, generando un pulso en *

* la lnea Enable del LCD. *

*******************************************************************

ENABLE_LCD

BSET.B #BIT_ENABLE,BYTE_CONTROL

BCLR.B #BIT_ENABLE,BYTE_CONTROL

RTS

*----------------------------------------------------------------------------*

******************************************************************************

* INSTRUCCIONES LCD *

******************************************************************************

************************** CFG_DISPLAY ****************************

* Configura el modo de funcionamiento del display. Bsicamente se *

* reduce a tres aspectos: *

* 1 - Comunicacin con el display con 8 o 4 bits. *

* 2 - 1 o 2 lneas en pantalla. *

* 3 - Dos tipos de fuentes 5x8 o bien 5x10 puntos. *

* Suprimiendo el asterisco correspondiente se puede modificar la *

* opcin seleccionada por defecto. *

*******************************************************************

CFG_DISPLAY

BSR FLAG_ESPERAR

MOVE.B #$30,BYTE_DATA * Modo 8 bits, una lnea, fuentes 5x8 puntos.

* BCLR.B #4,BYTE_DATA * Modo 4 bits.

* BSET.B #3,BYTE_DATA * Habilita 2 lneas.

* BSET.B #2,BYTE_DATA * Fuentes de 5x10 puntos.

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

*************************** MODO_AVC ******************************

* El cursor avanza cuando se escribe un carcter en el registro *

* DR. El display permanece esttico. *

*******************************************************************

MODO_AVC

BSR FLAG_ESPERAR

MOVE.B #$06,BYTE_DATA * Cursor adelante, display no acompaa.

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

*************************** MODO_AVT ******************************

* El cursor y el display avanzan solidariamente cuando se escribe *

* un carcter en el registro DR. *

*******************************************************************

MODO_AVT

BSR FLAG_ESPERAR

MOVE.B #$07,BYTE_DATA * Cursor adelante, display acompaa.

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

*************************** MODO_RTC ******************************

* El cursor retrocede cuando se escribe un carcter en el regis- *

* tro DR. El display permanece esttico. *

*******************************************************************

MODO_RTC

BSR FLAG_ESPERAR

MOVE.B #$04,BYTE_DATA * Cursor atrs, display no acompaa.

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

*************************** MODO_RTT ******************************

* El cursor y el display retroceden solidariamente cuando se es- *

* cribe un carcter en el registro DR. *

*******************************************************************

MODO_RTT

BSR FLAG_ESPERAR

MOVE.B #$05,BYTE_DATA * Cursor atrs, display acompaa.

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

************************** MODO_NORMAL ****************************

* Se configura el modo del display. Por defecto estarn tanto el *

* display como el cursor encendidos y sin parpadear el carcter *

* donde se encuentra el cursor. *

*******************************************************************

MODO_NORMAL

BSR FLAG_ESPERAR

MOVE.B #$0E,BYTE_DATA * Display y Cursor ON, blinkin OFF

* BCLR.B #2,BYTE_DATA * Display OFF

* BCLR.B #1,BYTE_DATA * Cursor OFF

* BSET.B #0,BYTE_DATA * Blinking ON

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

**************************** MODO_OFF *****************************

* Produce el apagado de la pantalla del LCD. Se puede seguir en- *

* viando ordenes al display que sern ejecutadas. La nica dife- *

* rencia es que no aparece reflejado hasta que no se enciende de *

* el LCD. *

*******************************************************************

MODO_OFF

BSR FLAG_ESPERAR

MOVE.B #$08,BYTE_DATA * Display y Cursor ON, blinkin OFF

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

***************************** CLEAR *******************************

* Borra el contenido del display y situa el cursor a la izquierda *

*******************************************************************

CLEAR

BSR FLAG_ESPERAR

MOVE.B #$01,BYTE_DATA

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

************************** RETURN_HOME *****************************

* Devuelve el cursor a la primera posicin conservando el conteni- *

* de la memoria del display. *

********************************************************************

RETURN_HOME

BSR FLAG_ESPERAR

MOVE.B #$02,BYTE_DATA

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

*************************** CURS_IZQ ******************************

* Mueve el cursor a la izquierda sin modificar el texto. *

*******************************************************************

CURS_IZQ

BSR FLAG_ESPERAR

MOVE.B #$10,BYTE_DATA

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

*************************** CURS_DCHA *****************************

* Mueve el cursor a la derecha sin modificar el texto. *

*******************************************************************

CURS_DCHA

BSR FLAG_ESPERAR

MOVE.B #$14,BYTE_DATA

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

*************************** DISP_IZQ ******************************

* Desplaza la ventana del display hacia la izquierda. *

*******************************************************************

DISP_IZQ

BSR FLAG_ESPERAR

MOVE.B #$1C,BYTE_DATA

BSR ENABLE_LCD

RTS

*************************** DISP_DCHA *****************************

* Desplaza la ventana del display hacia la derecha. *

*******************************************************************

DISP_DCHA

BSR FLAG_ESPERAR

MOVE.B #$18,BYTE_DATA

BSR ENABLE_LCD

RTS

*----------------------------------------------------------------------------*

************************** CGRAM_ADDR *****************************

* Coloca la direccin indicada en D0 en el contador de la Memoria *

* del Generador de Caracteres (CGRAM). Este generador permite de- *

* finir 8 caracteres de usuario en el modo 5x8 y cuatro en el de *

* 5x10 puntos. Para un correcto uso de la instruccin deberemos *

* escribir una de las 64 direcciones posibles (de $00 a $3F)en D0 *

*******************************************************************

CGRAM_ADDR

BSR FLAG_ESPERAR

ADD.B #$40,D0

MOVE.B D0,BYTE_DATA

BSET.B #BIT_RS,BYTE_CONTROL

BSR ENABLE_LCD

BCLR.B #BIT_RS,BYTE_CONTROL

RTS

*----------------------------------------------------------------------------*

************************** DDRAM_ADDR *****************************

* Coloca la direccin indicada en D0 en el contador de la Memoria *

* de Datos del Display (DDRAM). Existen 80 posiciones disponibles *

* que sern consecutivas cuando el display trabaje en una nica *

* lnea o repartidas en dos grupos de 40 cuando trabaje en el *

* modo de dos lneas. *

* Vase detalle a continuacin: *

* - 80 posiciones x 1 lnea - las direcciones van de $0 a $4F. *

* - 40 posiciones x 2 lneas - las direcciones se reparten: *

* Lnea primera: de $00 a $27. *

* Lnea segunda: de $40 a $67. *

*******************************************************************

DDRAM_ADDR

BSR FLAG_ESPERAR

ADD.B #$80,D0

MOVE.B D0,BYTE_DATA

BSET.B #BIT_RS,BYTE_CONTROL

BSR ENABLE_LCD

BCLR.B #BIT_RS,BYTE_CONTROL

RTS

*----------------------------------------------------------------------------*

*************************** ESCRIBIR ******************************

* Esta instruccin permite escribir en el registro de datos (DR) *

* una palabra destinada al generador de caracteres (CGRAM) o al *

* de datos del display (DDRAM) dependiendo de cual fue la ltima *

* seleccin. El dato a escribir lo pondremos en el registro D0. *

*******************************************************************

ESCRIBIR

BSR FLAG_ESPERAR

MOVE.B D0,BYTE_DATA

BSET.B #BIT_RS,BYTE_CONTROL

BSR ENABLE_LCD

BCLR.B #BIT_RS,BYTE_CONTROL

RTS

*----------------------------------------------------------------------------*

******************************************************************************

* RUTINAS DE INICIALIZACIN DE DISPOSITIVOS *

******************************************************************************

**************************** INI_LCD ******************************

* Esta rutina realiza toda la inicializacin del display tras el *

* encendido del mismo. Despus de su ejecucin el display queda *

* preparado para recibir instrucciones y caracteres. *

*******************************************************************

INI_LCD:

BSR CFG_DISPLAY

BSR MODO_NORMAL

BSR CLEAR

RTS

*----------------------------------------------------------------------------*

******************************************************************************

* SERVICIOS DE DISPOSITIVOS *

******************************************************************************

******************************************************************************

* SERVICIOS DEL DISPLAY *

******************************************************************************

************************** ESCR_MENSAJE ***************************

* Esta rutina escribe un mensaje completo en el display cuya di- *

* reccin de inicio se indica a travs del registro A0, debiendo *

* terminar el mensaje con $00. Si es superior a los 16 caracteres *

* que tiene el LCD, al alcanzar el final de la lnea automtica- *

* mente se cambia del modo AVC al AVT en el que el display acom- *

* paa al cursor dando la sensacin de que el texto se desplaza. *

*******************************************************************

ESCR_MENSAJE

MOVEM.L D0-D1,-(A7)

BSR RETURN_HOME

BSR MODO_AVC

MOVE.B #LCD_LONG,D1 * Cuenta los caracteres escritos en el display.

BUCLE1

TST.B (A0)

BEQ FIN1

MOVE.B (A0)+,D0

BSR ESCRIBIR

SUB.B #1,D1

BEQ FIN_LIN1

BRA BUCLE1

FIN_LIN1

BSR MODO_AVT * Cambia al modo AVT para que el display acompae al cursor.

BRA BUCLE1

FIN1

MOVEM.L (A7)+,D0-D1

RTS

*----------------------------------------------------------------------------*

*************************** DSP_ADELANTE **************************

* Esta rutina desplaza hacia la derecha la pantalla del display *

* recorriendo las 80 posiciones del registro DDRAM. *

*******************************************************************

DSP_ADELANTE

MOVEM.L D0-D1,-(A7)

MOVE.B #FIN_DR,D0 * Cuenta los caracteres escritos en el display.

BUCLE2

BSR DISP_DCHA

MOVE.L #RETARDO,D1

BSR DELAY

SUB.B #1,D0

BNE BUCLE2

MOVEM.L (A7)+,D0-D1

RTS

*----------------------------------------------------------------------------*

**************************** DSP_ATRAS ****************************

* Esta rutina desplaza hacia la izquierda la pantalla del display *

* recorriendo las 80 posiciones del registro DDRAM. *

*******************************************************************

DSP_ATRAS

MOVEM.L D0-D1,-(A7)

MOVE.B #FIN_DR,D0 * Cuenta los caracteres escritos en el display.

BUCLE3

BSR DISP_IZQ

MOVE.L #RETARDO,D1

BSR DELAY

SUB.B #1,D0

BNE BUCLE3

MOVEM.L (A7)+,D0-D1

RTS

*----------------------------------------------------------------------------*

************************** DRIVER_DISPLAY *************************

* Esta rutina realiza el servicio indicado a travs del registro *

* D7 con un nmero ordinal. Para llamar a la rutina de servicio *

* se coloca el nmero de servicio en el registro D7 y se ejecuta *

* un TRAP #0. *

*******************************************************************

DRIVER_DISPLAY

MOVEM.L D0-D1,-(A7)

CMP.B #1,D7

BEQ SERVICIO1

CMP.B #2,D7

BEQ SERVICIO2

CMP.B #3,D7

BEQ SERVICIO3

BRA FIN

SERVICIO1

BSR ESCR_MENSAJE

BRA FIN

SERVICIO2

BSR DSP_ADELANTE

BRA FIN

SERVICIO3

BSR DSP_ATRAS

FIN

MOVEM.L (A7)+,D0-D1

RTE

*----------------------------------------------------------------------------*

******************************** PRINCIPAL ***********************************

* El programa en cuestin muestra en el display de forma secuencial la lista *

* de mensajes definidos. Para la escritura utiliza el servicio de escritura *

* de mensajes del driver a travs de TRAP #0. *

******************************************************************************

ORG $400

PRINCIPAL

BSR INHAB_WDOG

BSR PORT_EC_CFG

BSR INI_LCD

INIC_D0

MOVEA.W #MENSAJES,A6

MOVE.L #$B,D0

LOOP1

BSR CLEAR

MOVEA.L (A6)+,A0

MOVE.L #1,D7

TRAP #0

MOVE.L #LARGO,D1

BSR DELAY

SUBI.B #1,D0

BEQ INIC_D0

BRA LOOP1

END

3.4 Anexo I

A continuacin se adjuntan copias de los juegos de caracteres predefinidos extrados del catalogo original del controlador HD44780U de Hitachi.

Esta primera tabla contiene patrones de caracteres de 5 x10 puntos.

Figura 6 Correspondencia entre cdigos y caracteres (Extrado del catlogo de HITACHI).

Esta otra contiene los patrones de caracteres de 5 x 8 puntos, que es adems la que se usar en el ejemplo de estas pginas.

Figura 7 Correspondencia entre cdigos y caracteres (Extrado del catlogo de HITACHI).

ndice de contenido

3.control de un display lcd de modo texto1

3.1Descripcin general13.2Funcionamiento del display23.2.1Alimentacin y control de contraste33.2.2La pantalla y los caracteres33.2.3La memoria del display43.2.3.1Display Data RAM (DDRAM)43.2.3.2Character Generator RAM (CGRAM)53.2.4Seales de control y registros internos73.2.4.1Seales de control73.2.4.2Registros internos83.2.5Conjunto de instrucciones93.2.5.1Borrar display, Clear Display93.2.5.2Cursor a inicio, Return Home93.2.5.3Establecer modo de trabajo, Entry Mode Set103.2.5.4Control ON/OFF del display103.2.5.5Desplazamiento del cursor o display103.2.5.6Establecer modo de interfaz, Function Set113.2.5.7Fijar direccin de CGRAM113.2.5.8Fijar direccin de DDRAM123.2.5.9Escritura de datos en la CGRAM o DDRAM123.2.5.10Lectura de datos de la CGRAM o DDRAM123.2.6Secuencia tpica de inicializacin del LCD123.2.7Formas de conexin a un microcontrolador133.2.7.1Longitud del bus de datos133.2.7.2Modos de control del LCD143.3Ejemplos de control del LCD con el micro MC68331153.3.1Ejemplo de control en bucle abierto153.3.1.1Descripcin de la aplicacin de control153.3.1.2Descripcin de la conexin y modo de control163.3.1.3Implementacin en cdigo ensamblador del programa de control163.3.1.3.1Observaciones sobre el ajuste de parmetros303.3.1.3.1.1Ajuste de la seal de activacin, Enable.303.3.2Ejemplo de control en bucle cerrado313.3.2.1Descripcin de la aplicacin de control313.3.2.2Descripcin de la conexin y modo de control313.3.2.3Implementacin en cdigo ensamblador del programa de control323.4Anexo I46

1I