Manejo de Display LCD Con Micro Control Ad or HC08
Manejo de Display LCD Con Micro Control Ad or HC08
Manejo de Display LCD Con Micro Control Ad or HC08
(Eduardo Ortiz) Este documento es una gua bsica para trabajar con un display LCD alfanumrico utilizando un micro Freescale de la familia HC08, para aquellos que se estn iniciando en el uso de estos microcontroladores. Se muestra el conexionado fundamental, y se ver un ejemplo de programa como rutina de prueba del display. Se asume que el lector est iniciado en ste tipo de micros (arquitectura, set de instrucciones, etc.) y tiene al menos una idea del funcionamiento de los display LCD. En este ejemplo, usaremos un display LCD alfanumrico de 2 lneas con 16 caracteres cada una. Trabajaremos con envo de datos de 8 bits (paralelo), ya que es ms simple para comprender el manejo del display al principio. El objetivo es, entonces, escribir algunos caracteres en ambas lneas del display, para comprender el funcionamiento y constatar la correcta comunicacin entre micro y LCD. Con sta base, luego se podrn hacer programas de mayor complejidad. Tendremos, entonces, los siguientes pines para manejo del display: Datos (D0 a D7) Pin E (habilita el display) Pin RS (le dice al display si le estamos enviando un dato o una instruccin de control).
El Pin del display R/W no ser utilizado ahora, y debemos conectarlo a masa del circuito. El ejemplo servir para usar un microcontrolador de Freescale de cualquier tipo de la familia HC08, siempre que tenga al menos un puerto entero (con sus ocho bits disponibles). Por ejemplo: MC68HC908JL3, de 28 pines, 4K de flash, 128 bytes de RAM. MC68HC908JK3, de 20 pines, 4K de flash, 128 bytes de RAM. MC68HC908JK1, de 20 pines, 1,5K de flash, 128 bytes de RAM.
Cualquiera de stos micros tiene el puerto PTB completo disponible. Para ste ejemplo usaremos el JK1, ya que es el ms econmico para empezar.
Es importante contar con la hoja de datos del micro que utilicemos, antes de iniciar cualquier tarea, y estudiarla atentamente. El circuito propuesto es el de la siguiente figura:
Podemos utilizar otro cristal, ya que el de la figura es solo una propuesta. En el pin 20 vemos un simple circuito de reset, si bien podemos dejar sin conectar este pin para que acte el Power On Reset del micro. Es muy importante colocar los capacitores C3 y C5 lo ms cerca posible de los pines de alimentacin del micro, lo que nos evitar problemas en su funcionamiento por ruidos o perturbaciones en la alimentacin. Como se ve, todo est alimentado con 5 Volt. Vemos que el PTB se usa completo para el envo de datos al display, y se a elegido PTD2 para el pin E y PTD5 para el pin RS. R/W se deja a masa, ya que solo enviaremos datos a la RAM del display, pero no leeremos nada de la misma. Los pines de Backlite no estn conectados, pues eso depender del tipo de display a ser usado. Para una prueba bsica, se puede conectar el backlite a +5V a travs de una resistencia de 10 ohm (pin +BCKL) y a masa (pin BCKL), si es que el display que usamos tiene backlite (iluminacin posterior). Por ltimo, el pin Vo (contraste) est conectado a un preset (resistencia variable) para dar a ese pin la tensin ms conveniente, segn el tipo de display, que nos proporcione la mejor definicin visual en los caracteres.
Procedimiento Bsico
En este sencillo programa, debemos realizar los siguientes pasos: 1- Inicializar el microcontrolador y sus variables. 2- Inicializar el display LCD 3- Enviar cuatro caracteres a escribirse en la lnea superior del display, y cuatro caracteres en la lnea inferior.
MOV #$0C,DDRD ;PortD(2-5) COMO SALIDA MOV #$FF,DDRB ;PortB COMPLETO COMO SALIDA *INICIALIZACION DE TIMER MOV #$30,TSC ;stop y reset timer. Prescaler=1 MOV #$00,TSC ;libera timer, con prescaler=1 ***********************************************************
;%00111000 ;Function Set- 8-bit,2-line,5X7 ;%00111000 ;Function Set- 8-bit,2-line,5X7 ;%00111000 ;Function Set- 8-bit,2-line,5X7
JSR DELAY50 LDA #$0C JSR WCTRL ;Display on, Cursor off LDA #$06 JSR WCTRL ;Entry mode- Inc addr, no shift LDA #$01 ;Clear Display JSR WCTRL *Fin de inicializacin del Display Como se ve, el primer comando se enva tres veces (ver hoja de datos para ms detalles) y luego de cada envo se llama una rutina delay de 50mS. Este tiempo supera ampliamente el especificado por cualquier fabricante, y lo haremos de sta manera para seguridad en sta prueba. En desarrollos posteriores ser conveniente optimizar este retardo al valor necesario. Tambin se llama la DELAY50 antes de mandar la primera instruccin, para permitir que se estabilice todo el hardware antes de comenzar este proceso. Segn los comentarios, con la primera instruccin (repetida tres veces) le estamos diciendo al display que trabajaremos con palabra de ocho bits, en display de dos lneas, y con tamao de carcter de 5x7 puntos. La siguiente instruccin enviada ($0C) enciende el display e inhabilita la muestra del cursor, que no usaremos ahora. La instruccin siguiente ($06) ordena al display que incremente la direccin de muestra. Esto es, luego de escribir un carcter, el display automticamente apuntar a la direccin siguiente para que escribamos el que sigue. Por lo tanto, los caracteres de datos que enviemos se irn escribiendo uno detrs del otro, de izquierda a derecha. Por ltimo, enviamos el comando de borrado ($01) que limpia la DDRAM y por lo tanto toda muestra que hubiere en la pantalla. De esta forma, ya estamos listos para enviar datos (letras, nmeros, smbolos) al display, y probar su funcionamiento. Cabe acotar que existen otros mtodos de retardo ms ptimos que el uso de una rutina delay, pero ste sirve a nuestro propsito actual.
WCTRL
STA PTB BSET ED,PTD ;E-> 1 NOP BCLR ED,PTD ;E-> 0 RTS ************************************************** WCTRL toma lo que viene en el ACC y lo saca por el Puerto PTB. Luego habilita el display haciendo ED=1, espera sin hacer nada (instruccin NOP del micro: no operacin) y vuelve a inhabilitar el display con ED=0. El paso siguiente (RTS) es el retorno de esta rutina. La demora que da el NOP, depender del cristal utilizado. Eventualmente debemos colocar en ese lugar varios NOP para ensanchar el pulso de habilitacin, si la frecuencia del clock es alta (conviene remitirse a la hoja de datos del display para ver su tiempo de habilitacin mnimo), pero si usamos un cristal de 4,00 Mhz no tendremos ningn problema. Veamos ahora la WDAT: ************************************************* *Rutina que escribe un caracter de dato en el display. El *dato viene en el acumulador. ************************************************* WDAT STA PTB BSET RS,PTD ;RS->1 BSET ED,PTD ;ED->1 NOP BCLR ED,PTD ;ED->0 BCLR RS,PTD ;RS->0 RTS ************************************************** WDAT es muy similar a WCTRL. La diferencia radica en que avisamos al display que el carcter enviado ser un dato y no una instruccin, haciendo RS=1 antes de habilitar, y RS=0 luego de inhabilitar.
Tenemos entonces que la primera lnea se inicia en la direccin $00, y la segunda en la direccin $40. Si queremos escribir un dato en la primera lnea, tercer carcter, debemos antes decirle al display que coloque su direccin de 6
escritura all Cmo lo hacemos? Bien, enviando como instruccin esa direccin, con el bit 7 en alto, es decir: LDA #$03 ORA #$80 JSR WCTRL ;Toma la direccin deseada ;ACC=10000011 (aade bit7=1) ;Enva la instruccin (direccin DDRAM a escribir)
Luego, enviamos el dato mediante la rutina WDAT, y se escribir en el lugar propuesto. Supongamos que deseamos escribir la letra M: LDA #`M JSR WDAT ;Esto indica M en ASCII ;Enva el dato
Tendremos as la letra M mostrndose en el tercer carcter de la L1. Como en la inicializacin del display le ordenamos auto incrementar la direccin de la DDRAM, si queremos escribir varios caracteres seguidos solo tenemos que enviar una sola vez la direccin de inicio de esa cadena de caracteres. As, si queremos escribir TODO BIEN usando ambas lneas, podemos listar la rutina como sigue: ******************************************************* *CARTEL1 es una rutina que escribe un cartel de prueba. ******************************************************* CARTEL1 LDA #$00 ;Direc. primer carcter L1 ORA #$80 JSR WCTRL LDA #'T' JSR WDAT ;Enva letra T LDA #'O' JSR WDAT ;Enva letra O LDA #'D' JSR WDAT ;Enva letra D LDA #'O' JSR WDAT ;Enva letra O LDA #$40 ;Direc. Primer carcter L2 ORA #$80 JSR WCTRL LDA #'B' JSR WDAT ;Enva letra B LDA #'I' JSR WDAT ;Enva letra I LDA #'E' JSR WDAT ;Enva letra E LDA #'N' JSR WDAT ;Enva letra N RTS *Fin de CARTEL1 *******************************************************
El resultado debera verse similar a la figura siguiente (se han dejado las direcciones para una mejor comprensin del proceso):
00$ T 40$ B 01$ O 41$ I 02$ D 42$ E 03$ 04$ 05$ 06$ 07$ 08$ 09$ 0A$ 0B$ 0C$ 0D$ 0E$ 0F$ O 43$ 44$ 45$ 46$ 47$ 48$ 49$ 4A$ 4B$ 4C$ 4D$ 4E$ 4F$ N
JSR WCTRL ;Function Set- 8-bit,2-line,5X7 JSR DELAY50 LDA #$38 ;%00111000 JSR WCTRL ;Function Set- 8-bit,2-line,5X7 JSR DELAY50 LDA #$0C JSR WCTRL ;Display on, Cursor off LDA #$06 JSR WCTRL ;Entry mode- Inc addr, no shift LDA #$01 ;Clear Display JSR WCTRL *Fin de inicializacin del Display ******************************************************** JSR CARTEL1 LOOP1 STA COPCTL ;reset del COP BRA LOOP1 ********************************************* ;Escribir aqu las rutinas WCTRL, WDAT, CARTEL1, DELAY50 ******************************************** *AREA DE VECTORES ORG VectorStart FDB start ; ADC Conversion Complete Vector FDB start ; Keyboard Vector FDB 0,0,0,0,0,0,0,0 ; (No Vectors Assigned $FFE2-$FFF1) FDB start ; TIM1 Overflow Vector FDB start ; TIM1 Channel 1 Vector FDB start ; TIM1 Channel 0 Vector FDB start ; (No Vector Assigned $FFF8-$FFF9) FDB start ; ~IRQ1 FDB start ; SWI Vector FDB start ; Reset Vector *********************************************
Conclusin
Esta es una muy bsica explicacin de cmo hacer funcionar un display mediante un microcontrolador Freescale. Existen formas de escribir los datos aprovechando muchas ventajas de sta familia, como el uso del par H:X para indexar cadenas de caracteres, y otras mejoras adicionales. Tambin es posible comunicarse con el display usando solo cuatro bits de dato, con lo cual ahorramos puertos del micro para otras aplicaciones. Lo importante es comprender el concepto y siempre trabajar desde lo ms sencillo a lo ms complicado, e ir probado las rutinas y listados de programa paso a paso. Es la nica manera de avanzar sobre seguro. Autor: Eduardo Ortiz (usuario de e-magister, del grupo de Electricidad y Electrnica). Acepto y espero preguntas, comentarios, correcciones y sugerencias! Espero haber sido til, y poder seguir enviando documentos acerca de los nobles microcontroladores Freescale.