UN MICROCONTROLADOR
ALUMNOS:
1
INDICE
1-Introducción
2-¿Qué es un LCD?
2.1-Los caracteres del LCD
2.2-Diversidad de módulos LCD
2
1-Introducción
2-¿Qué es un LCD?
La definición mas clara de un LCD es: una pantalla de cristal liquido que
visualiza unos ciertos caracteres. Para poder hacer funcionar un LCD, debe de estar
conectado a un circuito impreso en el que estén integrados los controladores del display
y los pines para la conexión del display. Sobre el circuito impreso se encuentra el LCD
en sí, rodeado por una estructura metálica que lo protege.
En total se pueden visualizar 2 líneas de 16 caracteres cada una, es decir,
2x16=32 caracteres. A pesar de que el display sólo puede visualizar 16 caracteres por
línea, puede almacenar en total 40 por línea. Es el usuario el que especifica qué
16 caracteres son los que se van a visualizar.
Tiene un consumo de energía de menos de 5mA y son ideales para dispositivos
que requieran una visualización pequeña o media.
3
2.1-Los caracteres del LCD
El LCD dispone de una matriz de 5x8 puntos para representar cada carácter. En
total se pueden representar 256 caracteres diferentes. 240 caracteres están grabados
dentro del LCD y representan las letras mayúsculas, minúsculas, signos de puntuación,
números, etc... Existen 8 caracteres que pueden ser
definidos por el usuario.
Código Carac. Código Carac. Código Carac. Código Carac. Código Carac. Código Carac.
$20 Espacio $30 0 $40 $50 P $60 ` $70 p
$21 ! $31 1 $41 A $51 Q $61 a $71 q
$22 “ $32 2 $42 B $52 R $62 b $72 r
$23 # $33 3 $43 C $53 S $63 c $73 s
$24 $ $34 4 $44 D $54 T $64 d $74 t
$25 % $35 5 $45 E $55 U $65 e $75 u
$26 & $36 6 $46 F $56 V $66 f $76 v
$27 ‘ $37 7 $47 G $57 W $67 g $77 w
$28 ) $38 8 $48 H $58 X $68 h $78 x
$29 ( $39 9 $49 I $59 Y $69 I $79 y
$2A * $3A : $4A J $5A Z $6A j $7A z
$2B + $3B ; $4B K $5B [ $6B k $7B {
$2C , $3C < $4C L $5C $6C l $7C |
$2D - $3D = $4D M $5D ] $6D m $7D }
$2E . $3E > $4E N $5E ^ $6E n $7E
$2F / $3F ? $4F O $5F - $6F o $7F
4
2.2-Diversidad de módulos LCD
5
valor vertical comprendido entre 1 y 2 (valor de línea) y X el valor horizontal (1-40) que
indicara el carácter.
En el ejemplo de arriba, vemos la frase ”ALUMNOS DE TELEMATICA
EPSA”, pero en el display solo se visualizaria “TELEMÁTICA EPSA “ que
corresponderia a los 16 caracteres visibles. Para visualizar toda la información
almacenada en el display, podremos tratar al recuadro de 2 líneas por 16 caracteres
como si se tratara de una ventana móvil. Cuando inicializamos el LCD la pantalla
tendría un aspecto como el de la siguiente figura.
6
3.2-CG RAM (carácter generator RAM)
La CG RAM contiene los caracteres qque pueden ser definidos por el usuario, es
decir que pueden ser personalizados. Está formada por 64 posiciones, con direcciones
$00-$3F. Cada posición es de 5 bits.
7
Cada carácter esta constituido por una matriz de 5 columnas por 8 filas. De este
modo un 1 indica un punto de la matriz encendido, y un 0 apagado como se ve en lea
siguiente figura.
4.1-Asignación de pines
8
A continuación podemos ver la asignación de pines en una pantalla LCD
Los pines 1 y 2, son los utilizados para la alimentacón del módulo LCD. La
tensión utilizada es de 5 voltios.
9
Las conexiones entre un microcontrolador y una pantalla LCD, serán la del bus
de datos de 8 bits y las de los pines de control, es decir, E, RS y R/W. Debido a esto, el
microcontrolador deberá utilizar 11 bits para controlar la pantalla.
Esta formado por las señales RS, R/W y E. Su función se explica en el punto 4.1
sobre el funcionamiento de los pines.
10
Seguidamente vamos a ver como utilizar un modulo LCD con un
microcontrolador modelo PIC16F84.
Declaración de constantes
DECLARACION DE CONSTANTES.
CODIGO COMENTARIO
PORTB EQU 0X06 Dirección del puerto B
TRISB EQU 0X06 Configurador del puerto B para I/O.
PORTA EQU 0X05 Dirección del puerto A
TRISA EQU 0X05 Configurador del puerto A para I/O.
STATUS EQU 0X03 Dirección del registro STATUS.
LCD_E EQU 2 Bit del puerto A para control de E.
LCD_RW EQU 1 Bit del puerto A para control de R/W.
LCD_RS EQU 0 Bit del puerto A para control de RS.
RETARDO1 EQU 0X0D Constante del temporizador 1
RETARDO2 EQU 0X00 Constante del temporizador 2
11
La instrucción ORG le indica al ensamblador donde debe comenzar a
reservar la memoria RAM que a continuación declaramos.
MOVLW b'00000000'
MOVWF TRISB Configura todo el puerto B como salida
BCF STATUS,5 Cambio al banco 0
12
Programa Principal
PROGRAMA PRINCIPAL
CODIGO COMENTARIO
Llamada de subrutina de tiempo de 15
milisegundos. Esta Subrutina es solicitada
CALL TEMPO2 en el momento que se enciende el circuito
para esperar que el modulo LCD estabilice
sus voltajes internos.
Este comando carga en el acumulador del
PIC16F84 el número binario que representa
el comando en el modulo LCD para trabajar
con un bus de datos de 8 Bits.
Posteriormente a esta instrucción se ejecuta
MOVLW b'00110000'
una subrutina llamada LCDI ( LCD
INSTRUCCION) que estará encargada de
colocar el dato en el modulo LCD ( Bus de
datos ) y ejecuta la secuencia requerida para
el bus de control del modulo LCD.
Llamada de una subrutina que estará
encargada de colocar el dato en el modulo
CALL LCDI LCD ( Bus de datos ) y ejecuta la secuencia
requerida para el bus de control del modulo
LCD.
Este comando carga en el acumulador del
PIC16F84 el numero binario que representa
el comando en el modulo LCD para trabajar
con Activación de dos líneas en el modulo
MOVLW b'00111000'
LCD. Posteriormente a esta instrucción se
ejecuta una subrutina llamada LCDI que
fue explicada en la instrucción numero 2 de
esta misma tabla.
Llamada de una subrutina que estará
encargada de colocar el dato en el modulo
CALL LCDI LCD ( Bus de datos ) y ejecuta la secuencia
requerida para el bus de control del modulo
LCD.
Este comando carga en el acumulador del
PIC16F84 el numero binario que representa
el comando en el modulo LCD para trabajar
con encendido de la pantalla y el cursor en
MOVLW b'00001110'
el modulo LCD. Posteriormente a esta
instrucción se ejecuta una subrutina
llamada LCDI que fue explicada en la
instrucción numero 2 de esta misma tabla.
Llamada de una subrutina que estará
CALL LCDI encargada de colocar el dato en el modulo
LCD ( Bus de datos ) y ejecuta la secuencia
13
requerida para el bus de control del modulo
LCD.
Este comando carga en el acumulador del
PIC16F84 el numero binario que representa
el comando en el modulo LCD para trabajar
con el desplazamiento del cursor a la
MOVLW b'00000110'
derecha Posteriormente a esta instrucción
se ejecuta una subrutina llamada LCDI que
fue explicada en la instrucción numero 2 de
esta misma tabla.
Llamada de una subrutina que estará
encargada de colocar el dato en el modulo
CALL LCDI LCD ( Bus de datos ) y ejecuta la secuencia
requerida para el bus de control del modulo
LCD.
MOVLW "I" Coloca el carácter ASCII en W
CALL LCDC Rutina para escribir un carácter en el LCD.
MOVLW "R" Coloca el carácter ASCII en W
CALL LCDC Rutina para escribir un carácter en el LCD.
MOVLW "L" Coloca el carácter ASCII en W
CALL LCDC Rutina para escribir un carácter en el LCD.
MOVLW "A " Coloca el carácter ASCII en W
CALL LCDC Rutina para escribir un carácter en el LCD.
MOVLW "N" Coloca el carácter ASCII en W
CALL LCDC Rutina para escribir un carácter en el LCD.
MOVLW "D" Coloca el carácter ASCII en W
CALL LCDC Rutina para escribir un carácter en el LCD.
MOVLW "E" Coloca el carácter ASCII en W
CALL LCDC Rutina para escribir un carácter en el LCD.
MOVLW "S" Coloca el carácter ASCII en W
CICLO GOTO CICLO
Subrutinas
14
BSF PORTA,LCD_E Coloca "1" en el Pin E
Coloca el contenido de "W" en el
MOVWF PORTB
bus de datos del modulo LCD.
BCF PORTA,LCD_E Coloca "0" en el Pin E
Llamada de una subrutina de
CALL TEMPO1
tiempo de 40 micro segundos.
RETURN Finaliza la Rutina de tiempo.
Esta subrutina configura el bus de control del modulo LCD para escribir
un dato que esta presente en el bus de datos del modulo LCD . El dato se escribe
en la pantalla inmediatamente cuando se activa el ENABLE. Esta subrutina es
utilizada por el programa principal solamente cuando se quiere escribir un
carácter en el modulo LCD.
Subrutina de 58 microsegundos.
15
Subrutina de 15.37 milisegundos.
16
4.6-Secuencia de inicialización del modulo LCD
La secuencia de inicialización para cualquier módulo LCD es imprescindible, y
debe ser operada en la pantalla del módulo. La inicialización se basa en una serie de
instrucciones introducidas por nosotros y posteriormente procesadas por el módulo
LCD para su funcionamiento normal. Las instrucciones que están dentro de la
inicialización solamente se ejecutan después que se enciende el modulo LCD y no
podrán ser cambiadas posteriormente.
El tiempo mínimo que tarda en estabilizarse la tensión entre 0,2 y 4,5 voltios
debe estar comprendido entre 0,1 y 10 milisegundos.
Por otro lado el tiempo mínimo de desconexión debe ser de 0,1 milisegundos
antes de volver a conectar.
17
La secuencia de inicio ejecutada es la siguiente:
18
4.7-Tiempos mínimos requeridos para que una instrucción o un
dato puedan ser ejecutados.
19
Diagrama de tiempo para una Instrucción:
20
Seguidamente cambiamos el Pin E a 1, debiendo permanecer en dicho
estado al menos durante 450 ns. De no ser así el módulo LCD no podrá aceptar
la instrucción.
Notas comunes
- Cuando el Pin "E" del modulo LCD tiene el flanco de bajada, se ejecuta la
instrucción o el dato presente en el bus de control.
21
DIAGRAMA DE MONITORIZACIÓN DE UNA LCD
22
5-Comandos del LCD y ejemplo de programa
La forma de controlar un el LCD es a traves de comandos que se envian al
registro de control del a LCD, seleccinado al poner la señal RS (Register Select,
selecciona el registro interno que se va a leer o escribir) a nivel bajo(0). Cuando lo que
se quiere es imprimir caracteres en el display o enviar información a la CG RAM para
definir caracteres se selecciona el registro de datos poniendo RS a nivel alto (1).
Al LCD le lleva cierto tiempo procesar cada comando enviado. Por ello, para que se
ejecute el comando especificado es necesario asegurarse de que el comando anterior ha
finalizado. Existen 2 estrategias para realizar esto:
-La primera se basa en leer del display el bit ocupado. Si este bit se encuentra a 1
quiere decir que el LCD esta ocupado procesando el comando anterior y por tanto
no puede procesar nuevos comandos.
Los tiempos maximos que tarda el display en procesar los comandos estan
especificados por el fabricante y tienen un valor tipico de 40µs. Si se realiza una pausa
23
mayor o igual a esta se tiene la garantia de que el display ha terminadote ejecutar el
comando.
RESUMEN DE COMANDOS:
-Borrar display: Este comando borra todas las posiciones del display virtual y se
situa el display real en la posición inicial, en la que se visualizan las posiciones
desde la (1,1) hasta la (16,1) y desde la (1,2) hasta la (16,2). El cursor se situa en
la posición (1,1). El comando seria “$01” y su tiempo de ejecución 1.64 ms.
24
debe de permanecer ‘quieto’al imprimir. El comando es “0 0 0 0 0 1 I/D S” y su
T.E.=40µs
Para trabajar con el bus de datos de 8 bits no hay ningun problema. Pero para un
bus de datos de 4 bits es un poco mas complejo. Despues de encender el LCD aparecera
la linea superior un poco mas oscura que la inferior. Esto quiere decir que el display no
ha sido inicializado todavía. En el caso de 4 bits solo se conectan 4 bits mas
significativos del LCD, dejando los otros 4 al aire. Al enviar el codigo 2 (bits 0 0 1 0)
el display se configura para trabajar a 4 bits. Se puede observar como la linea superior
deja de estar mas oscura que la inferior. A partir de ese momento las tranferencias hay
que realizarlas en dos partes: primero se envian 4 bits mas significativos y después los 4
bits menos significativos. Para confirmar que la transferencia es a 4 bits hay que enviar
el codigo $28 ; primero los bits 0 0 1 0 y después los bits 1 0 0 0. De aquí en adelante la
inicializacion es igual tanto para 8 bits como para 4, con la salvedad de que en el
segundo caso hay que enviar los datos multiplexados.
25
26
Ejemplo de programa
27
28
29
30