otros conceptos de programación:...
TRANSCRIPT
1
Tema 10
Otros conceptos de programación: LCD
2
Tema 10. Otros conceptos de programación: LCD
Programación de un LCD CAP. 13
3
Tema 10. Otros conceptos de programación: LCD
En muchos proyectos es necesario visualizar información a través de una pantalla de bajo coste. La forma más utilizada es mediante
un display LCD tal como se explica en este tema.
4
Tema 10. Otros conceptos de programación: LCD
Las pantallas de cristal líquido LCD o display LCD para mensajes (Liquid Cristal Display) tienen la capacidad de mostrar cualquier carácter alfanumérico, permitiendo representar la información que genera cualquier equipo electrónico de una forma fácil y económica.
La pantalla consta de una matriz de caracteres (normalmente de 5x7 o 5x8 puntos) distribuidos en una, dos, tres o cuatrolíneas de 16 hasta 40 caracteres cada línea.
El proceso de visualización es gobernado por un microcontrolador incorporado a la pantalla, siendo el Hitachi 44780 el modelo de controlador más utilizado.
5
Tema 10. Otros conceptos de programación: LCD
LCD 2x16: está compuesto por 2 líneas de 16 caracteres
6
Tema 10. Otros conceptos de programación: LCD
LCD 4x40: está compuesto por 4 líneas de 40 caracteres
7
Tema 10. Otros conceptos de programación: LCD
La tarjeta EasyPIC dispone de un módulo LCD tipo 16x2.Las características generales de un módulo LCD 16x2 son las siguientes:
•Consumo muy reducido, del orden de 7.5mW•Pantalla de caracteres ASCII, además de los caracteres japoneses Kanji, caracteres griegos y símbolos matemáticos.•Desplazamiento de los caracteres hacia la izquierda o a la derecha•Memoria de 40 caracteres por línea de pantalla, visualizándose 16 caracteres por línea•Movimiento del cursor y cambio de su aspecto•Permite que el usuario pueda programar 8 caracteres nuevos
CARACTERÍSTICAS
8
Tema 10. Otros conceptos de programación: LCD
El módulo LCD tipo 16x2 puede ser gobernados de 2 formas principales:
•Conexión con bus de 4 bits•Conexión con bus de 8 bits
CARACTERÍSTICAS
9
Tema 10. Otros conceptos de programación: LCD
PATILLAJE
10
Tema 10. Otros conceptos de programación: LCD
El módulo LCD posee una zona de memoria RAM llamada DDRAM (Data Display RAM) donde se almacenan los caracteres que se van a mostrar en la pantalla.
Tiene una capacidad de 80 bytes, 40 por cada línea, de los cuales sólo 32 se pueden visualizar a la vez (16 bytes por línea).
De las 80 posibles, las dos direcciones más importantes de la DDRAM son:
•Dirección 00h, que es el comienzo de la primera línea•Dirección 40h, que el comienzo de la segunda línea
DDRAM
11
Tema 10. Otros conceptos de programación: LCD
El LCD dispone de una zona de memoria interna no volátil llamada CGROM donde se almacena una tabla con los 192 caracteres que pueden ser visualizados.
Cada uno de los caracteres tiene su representación binaria de 8 bits. Para visualizar un carácter debe recibir por el bus de datos el código correspondiente.
Por ejemplo:“A” à b’01000001’
CARACTERES DEFINIDOS EN LA CGROM
12
CARACTERES
DEFINIDOS
EN LA
CGROM
13
Tema 10. Otros conceptos de programación: LCD
También permite definir 8 nuevos caracteres de usuario que se guardan en una zona de RAM denominada CGRAM (Character Generator RAM)
CARACTERES DEFINIDOS EN LA CGRAM
14
Tema 10. Otros conceptos de programación: LCD
El LCD tiene 3 modos de funcionamiento principales:
•Modo Comando
•Modo Carácter o Dato
•Modo de lectura del Busy Flag o LCD Ocupada
MODOS DE FUNCIONAMIENTO
15
Tema 10. Otros conceptos de programación: LCD
Consisten en diferentes códigos que se introducen a través del bus de datos del módulo LCD:
•Clear display•Home•Entry mode set•Display on/off control•Cursor or display shift•Function set•Set the cg ram address •Set the dd address•Read busy flag et address•Write data to cg or dd ram•Read data from cg or dd ram
COMANDOS DE CONTROL
16
Tema 10. Otros conceptos de programación: LCD
COMANDOS DE CONTROL
Clear displayBorra el módulo LCD y coloca el cursor en la primera posición (dirección 0). Pone el bit I/D a " 1 " por defecto.
Código:
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 0 0 1
Tiempo de ejecución: 1.64 µs
17
Tema 10. Otros conceptos de programación: LCD
COMANDOS DE CONTROL
HomeColoca el cursor en la posición de inicio (dirección 0) y hace que el display comience a desplazarse desde la posición original. El contenido de la memoria RAM de datos de visualización (DD RAM) permanecen invariables. La dirección de la memoria RAM de datos para la visualización (DD RAM) es puesta a 0.
Código:
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
0 0 0 0 0 0 0 0 1 X
Tiempo de ejecución: 1.64 µs
18
Tema 10. Otros conceptos de programación: LCD
COMANDOS DE CONTROL
Entry mode set
Establece la dirección de movimiento del cursor y especifica si la visualización se va desplazando a la siguiente posición de la pantalla o no. Estas operaciones se ejecutan durante la lectura o escritura de la DD RAM o CG RAM. Para visualizar normalmente poner el bit S a '0".
Código:
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 1 1/D S
Tiempo de ejecución: 40 µs
19
Tema 10. Otros conceptos de programación: LCD
COMANDOS DE CONTROL
.................etc, etc.
Todos los comandos de control están detallados en la práctica 7
20
Tema 10. Otros conceptos de programación: LCD
Conexión de LCD mediante 4 bits
En la tarjeta EasyPIC, el visualizador LCD está conectado al Puerto D del PIC 16F877A mediante un bus de 4 bits.
Las conexiones son:
•Las 4 líneas superiores del módulo LCD, pines <DB7:DB4> se conectan a las 4 líneas superiores del Puerto D del PIC, pines <RD7:RD4>.•Pin RS del LCD a la línea RD2 del PIC.•Pin R/W del LCD a la línea RD1 del PIC.•Pin Enable del LCD a la línea RD3 del PIC.
21
Tema 10. Otros conceptos de programación: LCD
Conexión de LCD mediante 4 bits
22
Tema 10. Otros conceptos de programación: LCD
Librería de SUBRUTINAS para el manejo del LCD
La librería LCD_EASY.INC contiene las subrutinas de control que permiten realizar las tareas básicas de control de un módulo LCD conectado según el circuito de la figura anterior.
La librería LCD_EASY.INC es una versión de la librería LCD_4BIT.INC (descrita en el libro) modificada según laconexión del módulo LCD con el microcontrolador PIC16F877A en la EasyPIC.
ATENCIÓN: La librería LCD_4BIT.INC está diseñada para funcionar con un PIC16F84A y la LCD_EASY.INC para el PIC16F877A
23
Tema 10. Otros conceptos de programación: LCD
Librería de SUBRUTINAS para el manejo del LCD
La librería LCD_EASY.INC hace uso de las subrutinas de retardo incluidas en la librería RETARDOS.INC.
Recordad que las subrutinas de retardo de la librería RETARDOS.INC están diseñadas suponiendo que la frecuencia del oscilador es de 4 MHz. Como en la tarjeta EasyPIC, el reloj es de 8 MHz, habrá que duplicar las llamadas a las subrutinas de temporización para lograr los tiempos deseados. Así, por ejemplo, si se desea una espera de 500ms, el código a utilizar será:
call Retardo_500mscall Retardo_500ms
24
Tema 10. Otros conceptos de programación: LCD
SUBRUTINAS en la librería LCD_EASY.INC
LCD_Inicializa Inicialización del módulo LCD: Configura funciones del LCD, produce reset por software, borra memoria y enciende pantalla. Es necesario ejecutar esta subrutina siempre al principio de losprogramas que vayan a utilizar la visualización mediante LCD.
LCD_EnviaComando. Escribe un comando en el registro del módulo LCD. La palabra de comando ha sido entregada a través del registro W. Trabaja en Modo Comando.
LCD_Caracter.Escribe en la memoria DDRAM del LCD el carácter ASCII introducido a a través del registro W. Trabaja en Modo Dato.
LCD_BorraBorra toda la pantalla
25
Tema 10. Otros conceptos de programación: LCDSUBRUTINAS en la librería LCD_EASY.INC
LCD_Linea1Cursor al principio de la Línea 1.
LCD_Linea2Cursor al principio de la Línea 2.
LCD_PosicionLinea1Cursor a posición de la Línea 1
LCD_PosicionLinea2Cursor a posición de la Línea 2
LCD_OFFPantalla apagada.
LCD_CursorONPantalla encendida y cursor
LCD_CursorOFFPantalla encendida y cursor apagado
26
EJEMPLO: LCD_01.asm à se visualiza el mensaje “Hola”.
;************************************** LCD_01.asm *********************************; PARA LA EASYPIC; El módulo LCD visualiza el mensaje "Hola".;; ZONA DE DATOS ******************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSCLIST P=16F877AINCLUDE <P16F877A.INC>
CBLOCK 0x20ENDC
; ZONA DE CÓDIGOS *****************************************************************ORG 0
Iniciocall LCD_Inicializamovlw 'H'call LCD_Caractermovlw 'o'call LCD_Caractermovlw 'l'call LCD_Caractermovlw 'a'call LCD_Caractersleep ; Entra en modo de bajo consumo.
INCLUDE <LCD_EASY.INC> ; Subrutinas de control del módulo LCD.INCLUDE <RETARDOS.INC> ; Subrutinas de retardo.END ; Fin del programa.
27
ZONA DE DATOS **********************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSCLIST P=16F877AINCLUDE <P16F877A.INC>
CBLOCK 0x20Contador ; El contador a visualizar.ENDC
#DEFINE Pulsador PORTA,4 ; Línea donde se conecta el pulsador.
; ZONA DE CÓDIGOS ********************************************************************
ORG 0Inicio
call LCD_Inicializabsf STATUS,RP0bsf Pulsador ;Línea del pulsador se configura como entrada. bcf STATUS,RP0clrf Contador ; Inicializa contador y los visualiza por 1ª vez,call Visualiza
Principalbtfsc Pulsador ; Lee el pulsador.call IncrementaVisualiza ; Si pulsa salta a incrementar y visualizar elgoto Principal ; contador
28
EJEMPLO: LCD_05.asm à Cada vez que se presiona el pulsador conectado al pin RA4 se incrementa un contador y es visualizado en el centro de la primera línea de la pantalla LCD.
; Subrutina "IncrementaVisualiza" ----------------------------------;IncrementaVisualiza
call Retardo_20ms ; Espera a que se estabilicen los niveles de tensión.call Retardo_20ms ; Espera a que se estabilicen los niveles de tensión.btfss Pulsador ; Vuelve a leer el pulsador.goto Fin_Incrementaincf Contador,F ; Incrementa el contador y después lo visualiza.
Visualizamovlw .7 ; Se sitúa en el centro de la línea 1.call LCD_PosicionLinea1movf Contador,Wcall BIN_a_BCD ; Se debe visualizar en decimal.call LCD_Byte
EsperaDejePulsarbtfsc Pulsadorgoto EsperaDejePulsar
Fin_Incrementareturn
INCLUDE <RETARDOS.INC>INCLUDE <BIN_BCD.INC>INCLUDE <LCD_EASY.INC>END
29
Tema 10. Otros conceptos de programación: LCD
VISUALIZACIÓN DE MENSAJES FIJOS Y EN MOVIMIENTO
Muchos proyectos requieren visualizar mensajes más o menos largos en la pantalla de un LCD.
La librería LCD_MENS.INC describe dos subrutinas para realizar esta tarea de forma muy sencilla:
•Subrutina “LCD Mensaje” que visualiza mensajes fijos•Subrutina “LCD_Movimiento” que visualiza mensajes en movimiento.
30
EJEMPLO: Mensaje_02.asm à En la pantalla del módulo LCD se visualiza un mensaje de menos de 16 caracteres grabado en la memoria ROM mediante la directiva DT. Utiliza la subrutina LCD_Mensaje de la librería LCD_MENS.INC.
ZONA DE DATOS **********************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSCLIST P=16F877AINCLUDE <P16F877A.INC>
CBLOCK 0x20ENDC
; ZONA DE CÓDIGOS ********************************************************************
ORG 0Inicio
call LCD_Inicializamovlw Mensaje0 ; Apunta dónde se encuentra el mensaje.call LCD_Mensaje ; Visualiza el mensaje.sleep ; Pasa a modo bajo consumo.
; Mensajes ---------------------------------------------------------------------------;Mensajes
addwf PCL,FMensaje0
DT "Hola!!, que tal? ", 0x00
INCLUDE <LCD_EASY.INC>INCLUDE <LCD_MENS.INC>INCLUDE <RETARDOS.INC>END
31
EJEMPLO: Mensaje_07.asm à El módulo LCD visualiza un mensaje largo (más de 16 caracteres) que se desplaza a lo largo de la pantalla. Se utiliza la subrutina LCD_MensajeMovimiento de la librería LCD_MENS.INC.
; ZONA DE DATOS ******************************************************************__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSCLIST P=16F877AINCLUDE <P16F877A.INC>
CBLOCK 0x20ENDC
; ZONA DE CÓDIGOS *****************************************************************
ORG 0Inicio
call LCD_Inicializa ; Prepara la pantalla.Principal
movlw Mensaje0 ; Apunta al mensaje.call LCD_MensajeMovimientogoto Principal ; Repite la visualización.
; "Mensajes" -------------------------------------------------------------------------;Mensajes
addwf PCL,FMensaje0 ; Posición inicial del mensaje.
DT " " ; Espacios en blanco al principio para mejorDT "Estudia Ingeniería Industrial en la UMH!! " ; visualización.DT " ", 0x0 ; Espacios en blanco al final.
;INCLUDE <LCD_MENS.INC> ; Subrutina LCD_MensajeMovimiento.INCLUDE <LCD_EASY.INC> ; Subrutinas de control del LCD.INCLUDE <RETARDOS.INC> ; Subrutinas de retardos.END ; Fin del programa.
32
BIBLIOGRAFÍA
"Microcontrolador PIC16F84, Desarrollo de proyectos" E. Palacios, F. Remiro, L.J. López. Ra-Ma, 2004
Podéis encontrar más información sobre el módulo LCD en el
CAPÍTULO 13
y en las
PRÁCTICAS 7 y 8