CIRCUITOS DIGITALES Cronometro con PIC16F874A Lipuma Daniel F.
RESUMEN
En este practico estudiamos la implementación de un cronometro mediante programación realizada en lenguaje Assembler sobre el PIC 16!"A# compilado en MP$A% !&1# mediante " displa's de siete segmentos (nodo com)n con pulsador de stop*reset&
Cronometro P(gina
+ ,igitales III
-
INTRODUCCION
A continuación se mostrara como se realizara el cronometro con pulsador de stop*reset# para ello se emplear(n " displa's de siete segmentos para cent.simas# d.cimas# unidades ' decenas de segundos respecti/amente El problema planteado es ue al encender el cronometro se /isualicen los displa's en cero# luego al presionar por primera /ez ue comience a contar# al presionar por segunda /ez se detenga la cuenta mostrando est(ticamente la misma lle/ada a cabo# ' ue al pulsar nue/amente se /uel/a a cero ' arranue El programa se logra bajo la utilización b(sicamente de interrupciones para realizar el mismo# la programación en MP$A% !&1# en lenguaje Assembler # la grabación del programa mediante Picit- ' la implementación del mismo sobre el PIC 16!"A&
Cronometro P(gina
+ ,igitales III
2
DIAGRAMA EN BLOQUE Inicio
Inicialización de /ariables
,e3ino Puertos Con3iguro 4PTI45RE e I5TC45 %orro %andera de Control de 1ms
Interrupción
Testeo si es por R%0 o TMR0
R%0
TMR0
Cargo TMR0708!9eteo %andera de Control de 1ms
Testeo bandera del pulsador 1
0
Cargo contador de 10ms para displa's
%ucle de control de 1ms
Incremento cent# dec# seg# ' seg,ecremento contadores
%orro displa's
Muestro displa's ' decremento contadores
Cronometro P(gina
+ ,igitales III
"
IMPLEMENTACION
En un principio# se muestran todos los displa's en cero# al presionar el botón por primera /ez comienza a contar# al presionar por segunda /ez se detiene uedando el numero al ue se llego# luego se presiona ' se pone en cero ' cuenta# as: continua sucesi/amente# para ello el programa se basa en las interrupciones ' el botón se logra con interrupción por R%4& $a multiple8ación de los " displa's se ;ar( por puerto A ue tiene < pines# con3igurado con todos sus pines como salidas& $a in3ormación de tabla ue 3orma los n)meros en los displa's de siete segmentos se ;ar( por puerto % ue tiene ! pines# ue con3iguraremos de = salidas ' una de entrada ue es R%0 Al iniciar el programa de3inimos de los distintos registros# cuatro de ellos son cent# dec# seg ' seg - ue son los utilizados para almacenar los n)meros del cronometro# cent representa a las cent.simas# dec representa a las d.cimas# seg a los segundos ' seg- a las decenas de segundos& 9e de3ine la interrupción ' se testea si es por R%0 o TMR0# si 3uese por R%0 ue es el pin = del PIC o bit 0 del puerto %# /amos a la subrutina botón donde /emos si la cuenta debe parar ' mostrar el tiempo e8acto en el ue 3ue parado o borrar los registros ' comenzar a contar si se presiono por segunda /ez# para ello se testea al comenzar a incrementar si la bandera controlada por R%0 esta acti/ada o no& En el programa principal de3inimos el inicio# donde se ingresa al banco uno ' se de3ine puerto A# % ' C# luego se de3ine los bits del 4PTI45>RE se asigna prescaler al timer 0# el numero elegido para el prescaler es 1?!& Al tener 1?!# signi3ica ue si el tiempo es de 1 ms# eso eui/ale a 1000 @s# al di/idir por ! se tiene 1-< @s# a;ora el TMR4 debe llegar a -<<# la di3erencia entre -<< ' 1-<# es 120# ósea cargamos 08!- al TMR0 Al pasar al banco 0 /emos TMR0 cargado con 08!- ' los puertos con3igurados 9e con3igura el registro I5TC45# donde abilitamos IE e interrupciones por o/er3loB del TMR0 Asignamos 10 para cont# ue se decrementa dentro de la interrupción# la idea es ue dada la 3orma en ue se de3inió el TMR4 para tener 1 milisegundo# poder lograr 10 milisegundo para mantener encendido cada displa'& Cronometro P(gina
+ ,igitales III
<
logramos la multiple8ación de los displa's mediante la asignación de un puntero llamado displa' 9iempre primero multiple8amos los displa's por puerto A cada 10ms# ' luego incrementamos los registros cent# dec# seg ' seg- mostr(ndolos por puerto % 9i la bandera del pulsador esta borrada# no llega a incrementar sino ue /uel/e al bucle de multiple8ación dejando est(tica la cuenta para poder mostrar de todas 3ormas los n)meros ue ;a' en el cronometro ' no permite ue a/ance la cuenta A;ora se supone ue no se apretó el botón# entonces decrementa los registros ,entro de botón lo primero limpiar el bit1 de I5TC45# ue indica la interrupción por R%4& 9e testea el bit 0 de bandera# si esta en 1 borro la bandera para ue no cuente mas# sino la 9eteo ' borro los registros para ue /uel/a a contar $a cuenta consiste en incrementar de3iniendo cent con 10 ' comparando con D4R ' testeando status#z si esta en 1#si llega a 10 status#z esta seteado entonces pasa a incrementar el registro siguiente ue en este caso es dec ue se le asigna 10# si no llega a 10 /uel/e a la interrupción ' no incrementa los otros registros# luego seg de igual manera ' seg- ue se le asigna 6 para contar ;asta <? segundos entonces# al saltar entre registro ' registro se limpia el ultimo para /ol/er a El /alor de F ue corresponde a la ubicación del registro# luego se suma al PC$ de esa 3orma se puede ingresar a la tabla ue muestra los n)meros en los displa's de siete segmentos siguiendo esta secuencia A# %# C# ,# E# # # R%0 0000+0011 G0G 1001+1111 G1G 0010+0101 G-G 0000+1101 G2G 1001+1001 G"G 0100+1001 G
+ ,igitales III
6
El displa' ser( mostrado la misma posición 10 ms# luego a/anza ' muestra otro ' as: sucesi/amente# resultando imperceptible al ojo ;umano& $a multiple8ación ue se realiza por tabla se ;ace por puerto A " transistores P5P& Prendiendo por 0 el displa' a mostrar 0000+1110 0000+1101 0000+1011 0000+0111 Hna /ez obtenido el n)mero sale de la tabla ' se muestra a tra/.s del puerto A
DESCRIPCION DEL CIRCUITO Micro controlador PIC16F8A
iendo el diagrama de pines En los pines 1< ' 16 conectaremos el Cristal de " Mz en serie con capacitores de -- p los cuales /an a masa& En el pin " ponemos una resistencia de 10J K para el MC$R Para los " displa's de (nodo com)n# las resistencias empleadas son de --0K en el colector del transistor ue ser(n colocadas en serie entre puerto % de pin = a 12 ' diodos led de los displa's ' de -L para la base en serie entre el puerto A de pin 1#-#2#1=#1! ' pata de (nodo com)n de cada displa'# por lo ue la corriente en los $E, del displa' est( en el orden de los 1
+ ,igitales III
=
Para el pulsador se emplea una resistencia de 1J K# ' un capacitor de 10n para lograr un anti rebote por ;ardBare en el pin R%0
Calculo de resistencias En corte? Resistencia de Colector
En saturación? Resistencia de %ase
Cronometro P(gina
+ ,igitales III
!
DIAGRAMA DEL CIRCUITO
,iagrama del circuito para simulacion
,iagrama esuem(tico para realización del PC%
Cronometro P(gina
+ ,igitales III
,iagrama para realización del PC%
PC% terminado ista in3eriorN
Circuito terminado ista superiorN
Cronometro P(gina
+ ,igitales III
10
Circuito completo con " displa's = segmentos a su salida
igura A + Cronometro corriendo# se puede /er claramente el e3ecto de numero 3antasma en los posiciones ue corren r(pidamente por ue la 3oto no es instant(nea
igura A
igura % + Cronometro parado# se puede /er claramente ue los n)meros se /en bien porue no est( incrementando el contador por presionar el botón de stop*reset
igura %
Cronometro P(gina
+ ,igitales III
11
!ARD"ARE UTILI#ADO
Resistencias
=8 --0K * "8 -J K* 18 <60 K* !81-0 K
Micro controlador
PIC16!"A
Cristal
" Mz
Capacitores
-8 --p* 18 100u*1810n*18100n
Programador
T4R
,ispla's
" 8 Onodo Com)n <1-1%+5
Transistores
"8 2-=-< P5P&
Pulsador
- Tipo Araa
Regulador
=!0<
CONCLUSION
Aprendimos a usar# ' comprender el uso de los puertos como salidas ' entradas# el uso de las interrupciones e8ternas e internas# conjug(ndolo con el uso de tablas ' subrutinas para lograr satis3actoriamente un pro'ecto ue 3unciona& $os problemas ' los obst(culos ue presento la implementación 3ueron muc;os# pero 3ueron sobrelle/ados ' 3ueron )tiles para conocer m(s nuestro PIC# no se obtiene un error perceptible por minuto del cronometro# ser:a interesante poder incrementar un puntero ' poder mostrar minutos para poder /er si e8iste alg)n error grosero al pasar el tiempo& El botón de stop# reset presentaba un rebote pero 3ue eliminado por prueba ' error cambiando la con3iguración de capacitor ' resistencia ;asta lograr un buen pulsador&
Cronometro P(gina
+ ,igitales III
1-
PROGRAMA
$I9T P7PIC16!"A QI5C$H,E P16!"A&I5C RA,ID ED
C45T CE5T ,EC 9E 9E$A F>AHD 9T>AHD %A5,ERA ,I9P$A
EH EH EH EH EH EH EH EH EH EH
4R 4T4 4R
0D00
0D-2 0D-= 0D-6 0D-< 0D-" 0D-! 0D- 0D20 0D20D21
,EI5ICIS5 ,E ARIA%$E9 C45TA,4R PARA RETAR,4 ,E 10M9 CE5T PARA CE5TU9IMA9 ,E 9EH5,49 ,EC PARA $A9 ,UCIMA9 ,E 9EH5,49 9E PARA $49 9EH5,49 9E- PARA $A9 ,ECE5A9 ,E 9EH5,49 %A5,ERA PARA E$ C45TR4$ ,E$ TIEMP4 AHDI$IAR PARA HAR,AR F AHDI$IAR PARA HAR,AR 9TATH9 %A5,ERA HE TE9TEA R%0 AHDI$IAR HE I5,ICA ,I9P$A
I5ICI4 0D0"
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVI5TERRHPCI45 1M9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV M4F M4 M4F
F>AHD 9TATH9#F 9T>AHD
%T9C CA$$ %T99 RETIE M4$F M4F %C %9
I5TC45#I5T %4T45 I5TC45#T0I
TE9TE4 9I I5TERRHPCI45 IE5E P4R R%4 9I E9 P4R R%0 4 A %4T45 TE9TE4 9I IE5E P4R TMR0
0D!TMR0 I5TC45#T0I $A#0
CAR4 TMR0 -<<+1-<7120
M4 M4F M4 RETIE
9T>AHD#F 9TATH9 F>AHD#F
$IMPIAM49 %IT HE I5,ICA I5TERRHPCI45 D TMR0 9ETE4 %A5,ERA ,E C45TR4$ ,E TIEMP4
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %4T45 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %4T45
$44P
%C %T9C 4T4 %9 C$R C$R C$R C$R %C
I5TC45#I5T %A5,ERA#0 $44P %A5,ERA#0 CE5T ,EC 9E 9E%A5,ERA#1
RETHR5 %C RETHR5
%A5,ERA#0
$IMPIAM49 %IT ,E I5TERRHPCI45 D R%4 9I E9 7 1 %4RR4 %A5,ERA PARA HE 54 CHE5TE E5CIE5,E E$ CR454METR4 %4RRA REI9TR49
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV PR4RAMA PRI5CIPA$VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV I5ICI4
Cronometro P(gina
%C %9 M4$F M4F
+ ,igitales III
9TATH9#6 9TATH9# < 0D01 TRI9%
I5RE94 A$ %A5C4 1
PHERT4 % = 0HT* 1 I5
12
C$R M4$F M4F %C M4$F M4F %C C$R
TRI9A 0D4PTI45>RE 9TATH9#< 0D%0 I5TC45 $A#0 ,I9P$A
PHERT4 A < 4HT
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV,EM4RA9 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %HC$E1
M4$F M4F %T99 4T4 %C
%HC$E
0D0A C45T $A#0 %HC$E $A#0
CAR4 C45T C45 10 PARA RETAR,4 ,E 10M9 RETAR,4 ,E 1M9 TE9TE4 %A5,ERA ,E PA94 1 M9N
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV%ARRI,4 ,E ,I9P$A9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
M4 CA$$ M4F M4$F A,,F M4F M4
,I9P$A#0 P49ICI45 P4RTA 9E,I9P$A#0 9R I5,#0
CA$$ M4F I5C A5,$F M4F ,EC9W 4T4
TA%$A P4RT% ,I9P$A#0 0D02 ,I9P$A C45T %HC$E
9AC4 P4R PHERT4 A $A P49ICI45 ,E$ ,I9P$A
9HM4 9E- C45 ,I9P$A
9AC4 P4R PHERT4 % $49 ,IIT49 A REPRE9E5TAR
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVI5CREME5T4 ,E CE5T#,EC#9E1 9E-VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %T99
%A5,ERA#0
TE9TE4 $A %A5,ERA ,E$ %4T45# 9I E9TA E5 1
4T4
%HC$E1
9I54# 54 I5CREME5TA MA9 ,EXA5,4 E9TATIC4
I5C M4$F D4RF %T99 4T4 C$R I5C M4$F D4RF %T99 4T4 C$R
CE5T# 0D0A CE5T#F 9TATH9#W %HC$E1 CE5T ,EC# 0D0A ,EC#F 9TATH9#W %HC$E1 ,EC
I5CREME5TA CE5TE9IMA ,E 9EH5,4
I5C M4$F D4RF %T99 4T4 C$R
9E# 0D0A 9E#F 9TATH9#W %HC$E1 9E
I5CREME5TA 9EH5,49
I5C M4$F D4RF
9E-# 0D06 9E-#F
I5CREME5TA ,ECE5A9 ,E 9EH5,49
I5CREME5TA T4,4
Cronometro P(gina
+ ,igitales III
I5CREME5TA ,ECIMA9 ,E 9EH5,49
1"
%T9C C$R 4T4
9TATH9#W 9E%HC$E1
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTA%$A ,E $E,9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV TA%$A
A,,F
RET$F RET$F RET$F RET$F RET$F RET$F RET$F RET$F RET$F RET$F
PC$#
%Y1 0000001Y %Y11110011Y %Y01001001Y %Y01100001Y %Y00110011Y %Y00100101Y %Y0 0000101Y %Y11110001Y %Y0 0000001Y %Y0 0100001Y
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTA%$A ,E P49ICI45 ,E ,I9P$A9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV P49ICI45
A,,F RET$F RET$F RET$F RET$F
PC$# %Y0111Y %Y1110Y %Y1101Y %Y1011Y
E5,
Cronometro P(gina
+ ,igitales III
1<