CIRCUITOS DIGITALES
CIRCUITOS DIGITALES
Cronometro con PIC16F874A
Cronometro con PIC16F874A
Lipuma Daniel F. 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&
-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&
Inicialización de /ariables Inicio ,e3ino Puertos Con3iguro 4PTI45RE e I5TC45 %orro %andera de Control de 1ms Interrupción TMR0 R%0 Testeo si es por R%0 o TMR0 Cargo TMR0708!-9eteo %andera de Control de
1ms Cargo contador de 10ms para displa's Muestro displa's ' decremento contadores Testeo bandera del pulsador
Incremento cent# dec# seg# ' seg-,ecremento contadores 1 0 %orro displa's %ucle de control de 1ms DIAGRAMA EN BLOQUE
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'&
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<G 0100+0001 G6G 0001+1111 G=G 0000+0001 G!G 0000+1011 GG
A# %# C# ,# E# # representan los = segmentos usados en el displa'# ' el ultimo bit es R%0# como es de (nodo com)n# prendemos por 0 ' apagamos por 1& Al de/ol/erla tabla el n)mero se muestra a tra/.s del puerto % representando cada pata del mismo un bit del n)mero&
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<mA# los
transistores son del tipo P5P 2-=-<&
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
DIAGRAMA DEL CIRCUITO
,iagrama del circuito para simulacion
,iagrama esuem(tico para realización del PC%
,iagrama para realización del PC% PC% terminado ista in3eriorN
Circuito terminado ista superiorN
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 %
!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&
1-PROGRAMA
$I9T P7PIC16!"A
QI5C$H,E P16!"A&I5C
RA,ID ED
,EI5ICIS5 ,E ARIA%$E9
C45T EH 0D-2 C45TA,4R PARA RETAR,4 ,E 10M9 CE5T EH 0D-= CE5T PARA CE5TU9IMA9 ,E 9EH5,49 ,EC EH 0D-6 ,EC PARA $A9 ,UCIMA9 ,E 9EH5,49 9E EH 0D-< 9E PARA $49 9EH5,49
9E- EH 0D-" 9E- PARA $A9 ,ECE5A9 ,E 9EH5,49 $A EH 0D-! %A5,ERA PARA E$ C45TR4$ ,E$ TIEMP4 F>AHD EH 0D- AHDI$IAR PARA HAR,AR F
9T>AHD EH 0D20 AHDI$IAR PARA HAR,AR 9TATH9 %A5,ERA EH 0D2- %A5,ERA HE TE9TEA R%0
,I9P$A EH 0D21 AHDI$IAR HE I5,ICA ,I9P$A
4R 0D00 4T4 I5ICI4 4R 0D0" VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVI5TERRHPCI45 1M9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV M4F F>AHD M4 9TATH9#F M4F 9T>AHD
%T9C I5TC45#I5T TE9TE4 9I I5TERRHPCI45 IE5E P4R R%4 CA$$ %4T45 9I E9 P4R R%0 4 A %4T45
%T99 I5TC45#T0I TE9TE4 9I IE5E P4R TMR0 RETIE
M4$F 0D!- CAR4 TMR0 -<<+1-<7120
M4F TMR0
%C I5TC45#T0I $IMPIAM49 %IT HE I5,ICA I5TERRHPCI45 D TMR0 %9 $A#0 9ETE4 %A5,ERA ,E C45TR4$ ,E TIEMP4
M4 9T>AHD#F
M4F 9TATH9
M4 F>AHD#F RETIE
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %4T45 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
%4T45 %C I5TC45#I5T $IMPIAM49 %IT ,E I5TERRHPCI45 D R%4 %T9C %A5,ERA#0
4T4 $44P 9I E9 7 1 %4RR4 %A5,ERA PARA HE 54 CHE5TE %9 %A5,ERA#0 E5CIE5,E E$ CR454METR4 %4RRA REI9TR49
C$R CE5T C$R ,EC C$R 9E C$R 9E-%C %A5,ERA#1 RETHR5 $44P %C %A5,ERA#0 RETHR5 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV PR4RAMA PRI5CIPA$VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV I5ICI4 %C 9TATH9#6 I5RE94 A$ %A5C4 1
%9 9TATH9# <
M4$F 0D01
M4F TRI9% PHERT4 % = 0HT* 1 I5
C$R TRI9A PHERT4 A < 4HT M4$F 0D-M4F 4PTI45>RE %C 9TATH9#< M4$F 0D%0 M4F I5TC45 %C $A#0 C$R ,I9P$A VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV,EM4RA9 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %HC$E1 M4$F 0D0A CAR4 C45T C45 10 PARA RETAR,4 ,E 10M9
M4F C45T
%HC$E %T99 $A#0 RETAR,4 ,E 1M9 TE9TE4 %A5,ERA ,E PA94 1 M9N
4T4 %HC$E
%C $A#0
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV%ARRI,4 ,E ,I9P$A9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
M4 ,I9P$A#0
CA$$ P49ICI45 9AC4 P4R PHERT4 A $A P49ICI45 ,E$ ,I9P$A M4F P4RTA
M4$F
9E-A,,F ,I9P$A#0 9HM4 9E- C45 ,I9P$A
M4F 9R
M4 I5,#0
CA$$ TA%$A 9AC4 P4R PHERT4 % $49 ,IIT49 A REPRE9E5TAR
M4F P4RT% I5C ,I9P$A#0 A5,$F 0D02 M4F ,I9P$A ,EC9W C45T 4T4 %HC$E
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVI5CREME5T4 ,E CE5T#,EC#9E1 9E-VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV %T99 %A5,ERA#0 TE9TE4 $A %A5,ERA ,E$ %4T45# 9I E9TA E5 1 I5CREME5TA
4T4 %HC$E1 9I54# 54 I5CREME5TA MA9 ,EXA5,4 E9TATIC4 T4,4
I5C CE5T# I5CREME5TA CE5TE9IMA ,E 9EH5,4
M4$F 0D0A
D4RF CE5T#F
%T99 9TATH9#W
4T4 %HC$E1
C$R CE5T
I5C ,EC# I5CREME5TA ,ECIMA9 ,E 9EH5,49
M4$F 0D0A
D4RF ,EC#F
%T99 9TATH9#W
4T4 %HC$E1
C$R ,EC
I5C 9E# I5CREME5TA 9EH5,49
M4$F 0D0A
D4RF 9E#F
%T99 9TATH9#W
4T4 %HC$E1
C$R 9E
I5C 9E-# I5CREME5TA ,ECE5A9 ,E 9EH5,49
M4$F 0D06
D4RF 9E-#F
%T9C 9TATH9#W C$R 9E- 4T4 %HC$E1 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTA%$A ,E $E,9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV TA%$A A,,F PC$# RET$F %Y10000001Y RET$F %Y11110011Y RET$F %Y01001001Y RET$F %Y01100001Y RET$F %Y00110011Y RET$F %Y00100101Y RET$F %Y00000101Y RET$F %Y11110001Y RET$F %Y00000001Y RET$F %Y00100001Y
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTA%$A ,E P49ICI45 ,E ,I9P$A9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV P49ICI45 A,,F PC$# RET$F %Y0111Y RET$F %Y1110Y RET$F %Y1101Y RET$F %Y1011Y E5,