Você está na página 1de 21

DEPARTAMENTO DE ELECTRICA Y ELECTRONICA

Abril 2016 Agosto 2016

REA DE SISTEMAS DIGITALES


ASIGNATURA: MICROCONTROLADORES NRC: 2579
Prctica 2.3
Tema: Manejo de LCD
Docente: Ing. Danny Sotomayor
Equipo #: 6

Base

3.5

Informe

Integrantes:

1. Cinthya Caldern
2. William Ibarra

Aspectos de evaluacin
Fundamento terico
0.25
(Cdigos para inicializacin LCD )
0.25 Diagrama de bloques
0.50 Tabla de asignacin de variables
Diagrama de flujo
0.75
(Programa estructurado)
0.75 Clculo de retardo por timer 2
0.50 Programa

Calificacin

0.25 Conclusiones
0.25 Diagrama electrnico
0.50 Presentacin del circuito

4.5

Funcionamiento

2.0

Defensa

10

0.50 Inicializacin del LCD


Visualizacin de la temporizacin en LCD
1.00
(HH:MM:SS)
1.50 Error de temporizacin.
Asignacin de funciones del teclado
1.00
(Inicio, pausa, reestablecer)

Total

Sangolqu 4 de julio de 2016

FECHA - CIUDAD

DEPARTAMENTO DE ELECTRICA Y ELECTRONICA

UNIDAD N2
Informe de prctica No. 2.3
1. Tema:

MANEJO DE LCD

2. Fecha de entrega: 04 Julio 2016


3. Documentacin a entregar:
Informe de prctica impreso por grupo, presentado el da de la prctica
Subir al foro correspondiente en un archivo comprimido
(Practica_2.3_LCD_Uc_Equipo_#_NRC.zip), la siguiente informacin:
a. Informe de la prctica
b. Proyecto en MPLABX
c. Circuito en Proteus.
4. Objetivos:
- Programar el Uc para que envie mensajes a un LCD.
- Utilizar timers para generar temporizaciones.
5. Materiales
-

Microcontrolador PIC 16F877A.


Microcontrolador PIC 16F62X
Teclado matricial 4x4.
LCD 16x2
Fuente de alimentacin.
Protoboard
Multmetro
Cristal 4Mhz
Capacitores, resistencias, dipswitch, leds. Cables.
Computador
Grabador de PICs

6. Procedimiento
En base al Pic 16F877A, disear un cronmetro ascendente utilizando el TMR0 y que se pueda
visualizar en un LCD las HH: Horas, MM: Minutos y SS: Segundos en el siguiente formato:

HH:MM:SS
El cronmetro tiene tres funciones ingresadas por teclado:
1. INICIO: Permite iniciar la cuenta o continuar la cuenta luego de una pausa.
2. PAUSA: Permite pausar la cuenta
3. REESTABLECER: Permite resetear la cuenta.
NOTA:
Se presenta las siguientes condiciones y CI para el desarrollo:
- La programacin ser en lenguaje ensamblador.
- La temporizacin se la realizar en base a retardo por el Timer 2 a una frecuencia
de 4Mhz.
- Se utilizara un LCD 16x2
- En el LCD se visualizar la funcin que se encuentra el cronmetro
7. Contenido

Fundamento terico

Gestin de LCD.
Un LCD 16x2 (Liquid Crystal Display) se encuentra compuesto por dos lneas de 16 caracteres cada
una. Los LCD ms comunes, disponen de una interface ideada por Hitachi y adoptada como estndar
por otros fabricantes. Esta interface hace que el LCD pueda ser conectado al micro a travs de un
bus de 4 u 8 lneas ms tres lneas de control y las de alimentacin.

Para reducir al mximo las conexiones entre el micro y el LCD, se usar la modalidad de
interconexin de datos a 4 bit, usando slo las lneas DB4, DB5, DB6, DB7. Las lneas DB0, DB1,
DB2 y DB3 no sern usadas y sern conectadas a masa.
Segn la operacin que se desee realizar en el mdulo LCD, los pines de control E, RS#, RW# deben
tener un estado determinado. Adems debe tener en el bus de datos un cdigo que indique un
carcter para mostrar en la pantalla o una instruccin de control para el display.

Los mdulos LCD responden a un conjunto especial de instrucciones, estas deben ser enviadas por
el microcontrolador o sistema de control al display, segn la operacin que se requiera. Se muestran
a continuacin el conjunto de instrucciones del mdulo LCD.

Se debe tener en cuenta que el pin RS# debe tomar el valor 0(cero) cuando lo que se va a enviar
es una instruccin de control y debe tomar el valor 1(uno) cuando lo que se va a enviar es un dato.
La interface entre el microcontrolador y el LCD se puede hacer con el bus de datos del pic trabajando
a 4 u 8 bits. Las seales de control trabajan de la misma forma en cualquiera de los dos casos, la
Diferencia se establece en el momento de iniciar el display, ya que existe una instruccin que permite
establecer dicha configuracin. Es decir se tiene que avisar al LCD que se va a operar en 8 o a 4
bits.
Los caracteres que se envan al display se almacenan en la memoria RAM del mdulo. Existen
posiciones de memoria RAM, cuyos datos son visibles en la pantalla y otras que no son visibles,
estas ltimas se pueden utilizar para guardar caracteres que luego se desplazan a la zona visible.

Es importante anotar que solo se pueden mostrar


caracteres ASCII de 7bits, por lo tanto algunos caracteres
especiales no se pueden ver (es aconsejable tener a mano
una tabla de caracteres ASCII para conocer los datos que
son prohibidos). Tambin se tiene la opcin de mostrar
caracteres especiales creados por el programador y
almacenarlos en la memoria RAM que posee el mdulo.
Manejo del LCD con Interfaz de 4 bits.
Estas enviaran primero los 4bit MSB y luego los 4 bits LSB.
A continuacin se muestra el conexionado para manejar
un display LCD con interfaz de 4 bit y se transcribe un
programa que presenta mensajes en el LCD con interfaz
de 4 bits.
Para poder visualizar una frase en el LCD, el PIC debe enviar una serie de comandos a travs del
bus de datos (lneas DB4 a DB7). Para hacer esto, son utilizadas dos lneas de control con las que
se comunica al LCD la operacin de transferencia que realizar el bus.
Las dos lneas de control son Register Select (pin 4) y Enable (pin 6) del LCD, las cuales se describen
a continuacin:
Lnea Register Select, el PIC indica al display que el dato presente en el bus es un comando (RS=0)
o un dato a ser visualizado ( RS=1 ). A travs de los comandos, el PIC puede indicar al LCD el tipo
de operacin a realizar, como por ejemplo "limpiar pantalla". Con los datos, el PIC puede enviar
directamente los caracteres ASCII a ser visualizados.
Lnea Enable habilita al LCD para leer el comando o el dato enviado en el bus por el PIC. El PIC
debe ocuparse de haber enviado en el bus de datos el comando o el dato correcto antes de poner a
1 la seal Enable.
Cdigos de inicializacin
Retorno a casa
b'00000010'
Modo de entrada
b'00000110'
Disposicin del display
b'00001100'
Inicializacin de dos lneas y disposicin de 8 u 4 bits
b'00101000'
Limpia pantalla
b'00000001'
Caractersticas del cursor y de la resolucin
b'00001110'
Cada uno de los caracteres tiene su representacin binaria de 8 bits. Para visualizar un carcter
debe recibir por el bus de datos el cdigo correspondiente.

Tabla. Cdigo binario correspondiente a cada carcter

Timer 2.
El Timer 2 es un reloj interno del PIC de 8 bits bastante preciso y con el cual podemos temporizar
con ms o menos exactitud rutinas que necesitan de tiempo. Solo puede ser utilizado como
temporizador, ms no como contador.
El registro TMR2 es en si el timer2 PIC, este registro tiene asociado un registro llamado PR2 de 8
bits, en este registro se cargar el nmero de veces que se quiere que el registro TMR2 aumente de
valor, cuando el valor del registro TMR2 llegue a ser igual al valor cargado en el registro PR2 el
registro TMR2 se pondr a 0, por ejemplo si el registro PR2=150, entonces el registro TMR2
aumentar su valor en cada ciclo de instruccin hasta que se haga igual a 150, momento en el que
el registro TMR2 se pondr a 0 y volver a aumentar sus valores hasta llegar nuevamente a 150
tras lo cual se volver a reiniciar a 0.
La frecuencia que incrementa al registro TMR2 puede ser dividida por un preescalador por un factor
de 1/1, 1/4 o 1/16, seleccionable por los bits T2CKPS1:T2CKPS0 (T2CON<1:0>).
En operacin, el contenido del registro TMR2 se compara continuamente con un registro de
periodo denominado PR2 (92h) cuyo valor podemos establecer por software. Cada vez que la cuenta

de TMR2 es igual a PR2, se reinicia el conteo en TMR2 desde cero, y adems se genera una seal
de salida, la cual es tratada por un postescalador, para poder generar una seal TMR2IF (PIR1<1>)
que puede ser usada para solicitar una interrupcin, o para ser leda por poleo.
El postescalador divide la frecuencia con que ocurre una activacin de la bandera
TMR2IF, es decir, si el valor del postescalador es 1/1, esta bandera se activar cada vez que TMR2
se reinicie, en cambio, si es 1/16 (por ejemplo), TMR2IF se activar cada 16 reinicios de TMR2. En
forma similar a los otros dos Timers, esta bandera debe ser limpiada previamente, si se quiere
detectar su activacin, esto puede ser hecho en la rutina de atencin a la interrupcin, o bien en la
rutina que la detecta por poleo.
El valor de divisin del postescalador puede establecerse por software mediante los bits
T2OUPS3:T2OUPS0 (T2CON<6:3>).

Diagrama de bloques

Clculo de retardo (Timer2)

Se debe considerar los retardos establecidos durante el envo de cada carcter, para desplegar
un carcter se debe ubicar la posicin y enviarlo, ese proceso dura alrededor 0.192s.
Al r e st ar de un seg un do , se te n dr el val or de 1-0.192=0.808 dicho tiempo va hacer el
tiempo que contara el timer 2. Al trabajar con un Pre escalador=16, Post escalador = 16, se obtiene
el valor que inicial adecuado que se deber asignar al registro PR2.
2 =
2 =

( )
4

(0.808 4)
= 3156.25
4 16 16

El valor anterior no puede ser asignado a PR2 ya que solo puede obtenerse valores entre 0 y 255.
Para esto se realizar un cambio al dividir los 0.808seg entre 20, para obtener un valor de PR2.
Para el nuevo tiempo de retardo se tendr: 0.0404 seg.
2 =

(0.0404 4)
= 157.81
4 16 16

Entonces el valor de PR2 ser 158.

Tabla de asignacin de variables

Decodificador de Teclado PIC16F628A


N

DESCRIPCIN

REGISTRO

VALOR

CW

DIRECCI
N
2007H

Registro de configuracin

Registro de lectura y escritura, en este caso


utilizado para activar las resistencias pull up
del puerto B
Configuracin Puerto A como entrada y
salida
Configuracin Puerto B como salida

OPTION_REG

81H

0x00

TRISA

85H

F0H

TRISB

86H

00H

Lectura de datos

PORTA

05H

--

Escritura de datos

PORTB

06H

--

Registro usado para la comprobacin de que


una tecla esta activada
Variable asignada con el valor de la tecla
pulsada
Variable asignada para el valor de tiempo de
retardo.

COMPARADOR

20H

--

RESPALDO

21H

--

RETARDO1

24H

--

Variable asignada para el valor de tiempo de


retardo.

RETARDO2

25H

--

3
4

8
9
10

0x3f71

Manejo de LCD, PIC16F877A


N

DESCRIPCIN

REGISTRO

DIRECCIN

VALOR

CW

2007H

0x3f71

Registro de configuracin

Configuracin Puerto B como entrada

TRISB

86H

FFH

4
5

Configuracin Puerto C como salida


Lectura de datos

TRISC
PORTB

87H
06H

00H
--

Escritura de datos

PORTC

07H

--

Configuracin Timer 2, con valores de post


escalador y pre escalador, habilitacin del
Timer 2.
Registro que contiene bandera de
desbordamiento Timer 2.
Registro de 8 bits que contiene el valor mximo
que puede alcanzar la cuenta del Timer 2.
Registro que almacena el nibble ms alto al
ingresar por las entradas multiplexadas del
LCD
Registro que almacena el nibble ms bajo al
ingresar por las entradas multiplexadas del
LCD
Almacena el retardo del ciclo ms
corto
Almacena el retardo del segundo ciclo
Almacena el retardo del ciclo ms
largo

T2CON

12H

0x7F

PIR1

0CH

--

PR2

0CH

0x9E

Num1

0x20H

--

Num2

0x21H

--

Conta_1

0x222H

--

Conta_2
Conta_3

0x23H
0x24H

---

8
9
10

11

12
13
14

14
16
18
19
20
21
22

Almacena el dato para condicionar si es dato


o instruccion
Registro que guardar el valor de los segundos
Registro que guarda el valor de la decena
recorrida en los minutos.
Registro que guarda el valor de la unidad
recorrida en los minutos.
Registro que guarda el valor de la decena
recorrida en las horas.
Registro que guarda el valor de la decena
recorrida en las horas.
Registro que guarda el nmero de veces que el
timer realiza la temporizacin.

Diagrama de flujo

cond

0x25H

--

segu
minu

0x26H
0x27H

---

mind

0x29H

--

horau

0x30H

--

horad

0x31H

--

timer

0x32H

--

Programa

Gestin de LCD.
list p=16F877a
include "P16F877A.Inc"
__CONFIG(0x3f71)
cblock 0x20
Num1
Num2
Conta_1
Conta_2
Conta_3
cond
segu
segd
minu
mind
horau
horad
timer
endc
ORG 00
goto INICIO
INICIO

bsf
movlw
movwf
movlw
movwf
bcf

; tipo de procesador
;Librerias de registros del Pic
;habilita y configura los recurso especiales

STATUS,RP0
00
TRISC
.255
TRISB
STATUS,RP0

bcf
PIR1,TMR2IF
movlw 0x7F
movwf T2CON

ini

;volvemos al bloque 0

;limpia bandera de sobreflujo


;dato de configuracin para el timer 2
;modo temporizador, preescalador 1/16, postescalador 1/16

movlw d'1'
movwf segu
clrf segd
movwf minu
clrf mind
movwf horau
clrf horad
clrf timer
goto INI_LCD

continua

goto

ENTRADA

SEGU

MOVLW .10
MOVWF cond
MOVLW b'00001111'
ANDWF PORTB,0
subwf cond,1

btfsc STATUS,Z
goto continuasegu
bcf STATUS,Z
MOVLW .11
MOVWF cond
MOVLW b'00001111'
ANDWF PORTB,0
subwf cond,1
btfsc STATUS,Z
GOTO SEGU
bcf STATUS,Z
MOVLW .12
MOVWF cond
MOVLW b'00001111'
ANDWF PORTB,0
subwf cond,1
btfss STATUS,Z
GOTO SEGU
goto INICIO
continuasegu CALL TIMER
movlw 0x86
CALL PROCESO
movf segd,0
call ENVIA
movf segu,0
call ENVIA
movlw d'9'
subwf segu,0
btfsc STATUS,Z
goto $+.3
incf segu,1
goto SEGU
clrf segu
incf segd
movlw d'6'
subwf segd,0
btfsc STATUS,Z
goto $+.2
GOTO SEGU
clrf segd
MINU

movlw 0x83
CALL PROCESO
movf mind,0
call ENVIA
movf minu,0
call ENVIA
movlw d'9'
subwf minu,0
btfsc STATUS,Z
goto $+.4
incf minu,1
goto SEGU
clrf minu
incf mind

movlw d'6'
subwf mind,0
btfsc STATUS,Z
goto $+.2
GOTO SEGU
clrf mind
HORA

movlw 0x80
CALL PROCESO
movf horad,0
call ENVIA
movf horau,0
call ENVIA
movlw d'9'
subwf horau,0
btfsc STATUS,Z
goto $+.4
incf horau,1
goto SEGU
clrf horau
incf horad
movlw d'6'
subwf horad,0
btfsc STATUS,Z
goto $+.2
GOTO SEGU
clrf horad
goto MINU

ENTRADA

clrf PORTC
btfss PORTB,4
goto ENTRADA

TECLA

movf
andlw
CALL
goto

PROCESO

clrf PORTC
call SEPARA
call D_I
call SALIDA
return

SEPARA

ENVIA

movwf
movwf
swapf
movlw
andwf
andwf
return

PORTB,0
b'00001111'
ENVIA
ENTRADA

NUM1
NUM2
NUM1,1
b'00001111'
NUM1,1
NUM2,1

call DECOD_TECLA
call PROCESO
return

TIMER
incf
movlw
bsf
movwf
bcf

timer,1
.158
STATUS, RPO
PR2
STATUS,RP0

repite

btfss
goto
bcf
movlw
subwf
btfss
goto
clrf
return

PIR1,TMR2IF
repite
PIR1,TMR2IF
.20
timer,0
STATUS,Z
TIMER
timer

INI_LCD

movlw b'00000010'
call PROCESO
movlw b'00000110'
call PROCESO
movlw b'00001100'
call PROCESO
movlw b'00101000'
call PROCESO
movlw b'00000001'
call PROCESO
movlw b'00001110'
call PROCESO
call CEROS
call CEROS
call DOSP
call CEROS
call CEROS
call DOSP
call CEROS
call CEROS
movlw 0x0E
CALL ENVIA
movlw 0x11
call ENVIA
movlw 0x11
CALL ENVIA
Call DOSP
movlw 0x12
CALL ENVIA
movlw 0x12
CALL ENVIA
call DOSP
movlw 0x13
call DECOD_TECLA
call PROCESO
movlw 0x13
CALL ENVIA

;igualdad entre PR2 y Timer2


;si no se activa espera.
;si se activ, la desactiva.

goto

continua

CEROS

movlw 0x00
CALL ENVIA
return

DOSP

movlw 0x10
CALL ENVIA
return

SALIDA

movf NUM1,0
movwf PORTC
call ENA
movlw b'10000'
andwf PORTC,1
movlw d'2'
call RETARDO
movf NUM2,0
movwf PORTC
call ENA
clrf PORTC
return

ENA

movlw d'10' ;Activacion del enable


call RETARDO ;Tiempo de espera
bsf PORTC,5
movlw d'20'
call RETARDO
bcf PORTC,5 ;Desactiva enable
return

D_I

movlw d'3'
subwf NUM1,0
btfss STATUS,C
goto $+.8
;tiene que ir al cero
movlw d'7'
movwf cond
movf NUM1,0
subwf cond,0
btfss STATUS,C
goto $+.2
goto $+.3
movlw b'00000000'
goto $+.2
movlw b'00010000'
iorwf NUM1,1
iorwf NUM2,1
return

Retardo

movwf CONTA_2
;el contenido de w lo ubicamos en CONTA_3
movlw d'250'
;movemos a w el valor de 250
movwf CONTA_1
;el contenido de w lo ubicamos en CONTA_3
nop
;no opera se lo utiliza para tener un retardo extra
decfsz CONTA_1,1 ;decrementamos el valor de CONTA_1 hasta que sea cero
goto $-.2
;hacemos un salto dos lineas arriba

decfsz CONTA_2,1 ;decrementamos el valor de CONTA_2 hasta que sea cero


goto $-.6
;hacemos un salto 6 lineas arriba
return
;retorna al programa
DECOD_TECLA
addwf PCL,f
retlw d'48'
retlw d'49'
retlw d'50'
retlw d'51'
retlw d'52'
retlw d'53'
retlw d'54'
retlw d'55'
retlw d'56'
retlw d'57'
goto SEGU
goto ENTRADA
goto INI_LCD
retlw 0x01 ;13
retlw 0xc0
retlw 0x86 ;regresa
retlw 0x3A ;16 dp
retlw 0x48 ;h
retlw 0x4D ;m
retlw 0x53 ;s
retlw 0x87
return
END

Conclusiones

El uso de retardos permite ajustar el tiempo en que se enva el bit de control junto al dato, este tiempo
debe ser ajustado de tal forma que ni se detecten pulsaciones falsas ni resulte lento el manejo del
teclado.
Se implement el PIC 16F877A para el funcionamiento del LCD16x2 con una codificacin basada
en los comandos del LCD y se realiz una multiplexacin de 4bits para l envi de datos e
instrucciones del PIC al LCD. Para lograr la multiplexacin se debe enviar los 4bits ms significativos
y luego los 4bits menos significativos, y en cada envo de datos tambin se debe enviar un pulso en
alto (E) para que los datos sean aceptados por el LCD, con el fin de optimizar los recursos
Se recomienda conectar un potencimetro en el pin 3 de la pantalla LCD para as poder regular el
brillo de la pantalla lcd.
8. Bibliografa
Fernando E.
Valds Prez,
Ramn Palls
Areny
Programacin de microcontroladores Ibrahim Dogan
PIC

PRIMERA

2007

Espaol

Marcombo

PRIMERA

2006

Espaol

Marcombo

Microcontroladores: fundamentos y
aplicaciones con PIC

Diagrama Electrnico

Você também pode gostar