Beruflich Dokumente
Kultur Dokumente
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
Total
FECHA - CIUDAD
UNIDAD N2
Informe de prctica No. 2.3
1. Tema:
MANEJO DE LCD
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.
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
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
DESCRIPCIN
REGISTRO
VALOR
CW
DIRECCI
N
2007H
Registro de configuracin
OPTION_REG
81H
0x00
TRISA
85H
F0H
TRISB
86H
00H
Lectura de datos
PORTA
05H
--
Escritura de datos
PORTB
06H
--
COMPARADOR
20H
--
RESPALDO
21H
--
RETARDO1
24H
--
RETARDO2
25H
--
3
4
8
9
10
0x3f71
DESCRIPCIN
REGISTRO
DIRECCIN
VALOR
CW
2007H
0x3f71
Registro de configuracin
TRISB
86H
FFH
4
5
TRISC
PORTB
87H
06H
00H
--
Escritura de datos
PORTC
07H
--
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
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
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
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
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
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