You are on page 1of 13

Instituto Tecnolgico de Quertaro.

Microcontroladores
[Proyecto Final]
CRONMETRO
_________________________________________________
Aguilar Hernandez Arturo Giovanni.
Robles Robles Mario.
- Equipo Gris -






Junio de 2014.
1 INFORME - PROYECTO FINAL
Introduccin.

En esta practica estudiamos la implementacin de un cronometro mediante
programacin realizada en lenguaje ensamblador sobre el PIC16F84A, compilado en
MPLAB 8.1, mediante 4 displays de siete segmentos nodo comn multiplexados, y
controlado por un botn de detencin / reinicializacin.
Este tipo de dispositivos (cronmetros), son de bastante uso, tanto en la industria, como
en la vidas diaria y los hogares de las personas, los podemos encontrar a la hora de controlar
tiempos de produccin en una fabrica, en muchos de los relojes digitales que hay en los
hogares, incluso en letreros en los que se requiera llevar el tempo (ej. Llevar el tiempo en un
partido de ftbol).



Objetivo.

Implementar en el microcontrolador un programa que resuelva el problema planteado
que al encender el cronmetro se visualicen los displays en cero, luego al presionar por
primera vez comience a contar, al presionar por segunda vez se detenga la cuenta mostrando
estticamente la misma llevada a cabo, y que al pulsar nuevamente se vuelva a cero y
arranque nuevamente la cuenta.

El programa se logra bajo la utilizacin bsicamente de interrupciones, la programacin en
MPLAB 8.1, en lenguaje ensamblador , la grabacin del programa mediante Pickit2 clnico
(MiniProg) y la implementacin del mismo sobre el PIC16F84A.





2 INFORME - PROYECTO FINAL
Marco Terico.

La tcnica utilizada para controlar el cronometro se resume en el siguiente diagrama de
ujo/bloques.
3 INFORME - PROYECTO FINAL

Desarrollo.

En un principio, se muestran todos los displays en cero, al presionar el botn por primera vez
comienza a contar, al presionar por segunda vez se detiene quedando el numero al que se
llego, luego se presiona y se pone en cero y cuenta, as continua sucesivamente, para ello el
programa se basa en las interrupciones y el botn se logra con interrupcin por RB0.

La multiplexacin de los 4 displays se har por puerto A que tiene 5 pines, congurado con
todos sus pines como salidas. La informacin de tabla que forma los nmeros en los displays
de siete segmentos se har por puerto B que tiene 8 pines, que conguraremos de 7 salidas y
una de entrada que es RB0

Al iniciar el programa denimos de los distintos registros, cuatro de ellos son cent', dec, seg
y seg 2 que son los utilizados para almacenar los nmeros del cronometro, cent' representa
a las centsimas, dec' representa a las dcimas, seg a los segundos y seg2 a las decenas de
segundos.
Se dene la interrupcin y se prueba si es por RB0 o TMR0, si fuese por RB0 que es el pin 7
del PIC o bit 0 del puerto B, vamos a la subrutina botn donde vemos si la cuenta debe parar
y mostrar el tiempo exacto en el que fue parado o borrar los registros y comenzar a contar si
se presiono por segunda vez, para ello se prueba al comenzar a incrementar si la bandera
controlada por RB0 esta activada o no.
En el programa principal denimos el inicio, donde se ingresa al banco uno y se dene puerto
A, B y C, luego se dene los bits del OPTION_REG se asigna prescaler al timer 0, el numero
elegido para el prescaler es 1:8.

Al tener 1:8, signica que si el tiempo es de 1 ms, eso equivale a 1000 "s, al dividir por 8 se
tiene 125 "s, ahora el TMRO debe llegar a 255, la diferencia entre 255 y 125, es 130, sea
cargamos 0x82 al TMR0

Al pasar al banco 0 vemos TMR0 cargado con 0x82 y los puertos congurados
4 INFORME - PROYECTO FINAL
Se congura el registro INTCON, donde Habilitamos GIE e interrupciones por overow del
TMR0.

Asignamos 10 para cont, que se decrementa dentro de la interrupcin, la idea es que dada la
forma en que se deni el TMRO para tener 1 milisegundo, poder lograr 10 milisegundo
para mantener encendido cada display. Logramos la multiplexacin de los displays mediante
la asignacin de un registro llamado display

Siempre primero multiplexamos los displays por puerto A cada 10ms, y luego incrementamos
los registros cent, dec', seg y seg2 mostrndolos por puerto B.

Si la bandera del pulsador esta borrada, no llega a incrementar sino que vuelve al bucle de
multiplexacin dejando esttica la cuenta para poder mostrar de todas formas los nmeros
que hay en el cronometro y no permite que avance la cuenta.

Ahora se supone que no se apret el botn, entonces decrementa los registros.
Dentro de botn lo primero limpiar el bit1 de INTCON, que indica la interrupcin por
RBO. Se prueba el bit 0 de bandera, si esta en 1 borro la bandera para que no cuente mas,
sino la reseteo y borro los registros para que vuelva a contar

La cuenta consiste en incrementar deniendo cent con 10 y comparando con XOR y
probando status,z si esta en 1, si llega a 10 status,z esta seteado entonces pasa a incrementar el
registro siguiente que en este caso es dec que se le asigna 10, si no llega a 10 vuelve a la
interrupcin y no incrementa los otros registros, luego seg de igual manera y seg2 que se le
asigna 6 para contar hasta 59:99 segundos.

El valor de W que corresponde a la ubicacin del registro, luego se suma al PCL de esa forma
se puede ingresar a la tabla que muestra los nmeros en los displays de siete segmentos
siguiendo esta secuencia A, B, C, D, E, F, G, RB0




5 INFORME - PROYECTO FINAL











Figura 1.1 Tabla para la visualizacin de los nmeros en displays y disposicin de pines.

A, B, C, D, E, F, G representan los 7 segmentos usados en el display, y el ultimo bit es RB0,
como es de nodo comn, prendemos por 0 y apagamos por 1. Al devolverla tabla el nmero
se muestra a travs del puerto B representando cada pata del mismo un bit del nmero.

El display ser mostrado la misma posicin 10 ms, luego avanza y muestra otro y as
sucesivamente, resultando imperceptible al ojo humano.

La multiplexacin que se realiza por tabla se hace por puerto A 4 transistores PNP.
Prendiendo por 0 el display a mostrar

En los pines 15 y 16 conectamos el Cristal de 4 MHz en serie con capacitores de 22 pF los
cuales van a tierra. En el pin 4 ponemos una resistencia de 10K # para el MCLR.
Para los 4 displays de nodo comn, las resistencias empleadas son de 220# en el colector del
transistor que sern colocadas en serie entre puerto B de pin 7 a 13 y diodos led de los
displays y de 2k# para la base en serie entre el puerto A de pin 1,2,3,17,18 y pata de nodo
comn de cada display, por lo que la corriente en los LED del display est en el orden de los
15mA, los transistores son del tipo PNP 32725.

Para el pulsador se emplea una resistencia de 1K #, y un capacitor de 10nF para lograr un
anti rebote por hardware en el pin RB0.

6 INFORME - PROYECTO FINAL
Calculo de Resistencias para los transistores del nodo.












Diagrama de circuito.
Figura 2 Diagrama de circuito de displays multiplexados y botn de inicio/paro.
7 INFORME - PROYECTO FINAL
Material Utilizado.

Figura 3 Tabla de materiales utilizados.


Resultados.
Figura 4 Estados del Cronmetro.


Microcontrolador
PIC16F84A
Resistencias
7X220# / 4X2.2 K# / 8X 120 #
Cristal
4 MHz
Capacitores
2X 22pF / 1X10nF
Displays
4 Anodo comun
Transistores
4X BC32725 PNP
Pulsador
1X Push Button
Programador
Mini Prog +
1 2
3 4
8 INFORME - PROYECTO FINAL






Conclusiones.

El principio de este proyecto se basa en el diseo propuesto en la practica de
multiplexado de displays de 7 segmentos hecha durante este curso de microcontroladores,
haciendo una variante al programa para realizar las secuencias de tiempo que se necesitaba
para el proyecto. Adicionalmente se hace uso de retardos e interrupciones para realizar las
pausas y llevar el control de los tiempos del cronometro.

Este curso de microcontroladores nos abre el amplio panorama de las tecnologas con
base en el funcionamiento de los primeros dispositivos programables de cualquier sistema
mecatrnico y electrnico moderno, de uso domestico, personal, e industrial, brindndonos la
posibilidad de desarrollarnos en una rama mas de la mecatrnica.









9 INFORME - PROYECTO FINAL









Bibliografa

Microcontrolador PIC16F84 - Desarrollo de proyectos
Enrique Palacios Municio
Fernando Ramiro Dominguez
Lucas J. Lpez Prez














10 INFORME - PROYECTO FINAL
Anexo 1
Cdigo fuente en lenguaje ensamblador.
11 INFORME - PROYECTO FINAL
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC


; DEFINICIN DE VARIABLES
CONT EQU 0X23 ; CONTADOR PARA RETARDO DE 10MS
CENT EQU 0X27 ; CENT PARA CENTSIMAS DE SEGUNDOS
DEC EQU 0X26 ; DEC PARA LAS DCIMAS DE SEGUNDOS
SEG EQU 0X25 ; SEG PARA LOS SEGUNDOS
SEG2 EQU 0X24 ; SEG2 PARA LAS DECENAS DE SEGUNDOS
FLAG EQU 0X28 ; BANDERA PARA EL CONTROL DEL TIEMPO
W_AUX EQU 0X29 ; AUXILIAR PARA GUARDAR W
ST_AUX EQU 0X30 ; AUXILIAR PARA GUARDAR STATUS
BANDERA EQU 0X32 ; BANDERA QUE TESTEA RB0
DISPLAY EQU 0X31 ; AUXILIAR QUE INDICA DISPLAY
ORG 0X00
GOTO INICIO
ORG 0X04


;************INTERRUPCION 1MS**************
MOVWF W_AUX
MOVF STATUS,W
MOVWF ST_AUX
BTFSC INTCON,INTF ;TESTEO SI INTERRUPCION VIENE POR RBO
CALL BOTON ;SI ES POR RB0 VOY A BOTON
BTFSS INTCON,T0IF ;TESTEO SI VIENE POR TMR0
RETFIE
MOVLW 0X82 ;CARGO TMR0 255-125=130
MOVWF TMR0
BCF INTCON,T0IF ;LIMPIAMOS BIT QUE INDICA INTERRUPCION X TMR0
BSF FLAG,0 ;SETEO BANDERA DE CONTROL DE TIEMPO
MOVF ST_AUX,W
MOVWF STATUS
MOVF W_AUX,W
RETFIE

;*********** BOTON **************
BOTON BCF INTCON,INTF ;LIMPIAMOS BIT DE INTERRUPCION X RBO
BTFSC BANDERA,0
GOTO LOOP ;SI ES = 1 BORRO BANDERA PARA QUE NO CUENTE
BSF BANDERA,0 ;ENCIENDE EL CRONOMETRO Y BORRA REGISTROS
CLRF CENT
CLRF DEC
CLRF SEG
CLRF SEG2
12 INFORME - PROYECTO FINAL
BCF BANDERA,1
RETURN
LOOP BCF BANDERA,0
RETURN

;********************************************** PROGRAMA
PRINCIPAL******************************************************
INICIO BCF STATUS,6 ; INGRESO AL BANCO 1
BSF STATUS, 5
MOVLW 0X01
MOVWF TRISB ;PUERTO B 7 0UT/ 1 IN
CLRF TRISA ;PUERTO A 5 OUT
MOVLW 0X92
MOVWF OPTION_REG
BCF STATUS,5
MOVLW 0XB0
MOVWF INTCON
BCF FLAG,0
CLRF DISPLAY

;***************************DEMORAS ****************************
BUCLE1 MOVLW 0X0A ;CARGO CONT CON 10 PARA RETARDO DE 10MS
MOVWF CONT
BUCLE BTFSS FLAG,0 ;RETARDO DE 1MS (TESTEO BANDERA DE PASO 1 MS)
GOTO BUCLE
BCF FLAG,0

;***********************BARRIDO DE DISPLAYS*********************
MOVF DISPLAY,0
CALL POSICION ;SACO POR PUERTO A LA POSICION DEL DISPLAY
MOVWF PORTA
MOVLW SEG2
ADDWF DISPLAY,0 ;SUMO SEG2 CON DISPLAY
MOVWF FSR
MOVF INDF,0
CALL TABLA ;SACO POR PUERTO B LOS DIGITOS A REPRESENTAR
MOVWF PORTB
INCF DISPLAY,0
ANDLW 0X03
MOVWF DISPLAY
DECFSZ CONT
GOTO BUCLE

;**************INCREMENTO DE CENT,DEC,SEG1 Y SEG2*****************
BTFSS BANDERA,0 ;TESTEO LA BANDERA DEL BOTON, SI ESTA EN 1
INCREMENTA
GOTO BUCLE1 ;SINO, NO INCREMENTA MAS DEJANDO ESTATICO
TODO
INCF CENT,F ;INCREMENTA CENTESIMA DE SEGUNDO
MOVLW 0X0A
XORWF CENT,W
BTFSS STATUS,Z
GOTO BUCLE1
CLRF CENT
INCF DEC,F ;INCREMENTA DECIMAS DE SEGUNDOS
MOVLW 0X0A
XORWF DEC,W
BTFSS STATUS,Z
GOTO BUCLE1
CLRF DEC
INCF SEG,F ;INCREMENTA SEGUNDOS
MOVLW 0X0A
XORWF SEG,W
BTFSS STATUS,Z
GOTO BUCLE1
CLRF SEG
INCF SEG2,F ;INCREMENTA DECENAS DE SEGUNDOS
MOVLW 0X06
XORWF SEG2,W
BTFSC STATUS,Z
CLRF SEG2
GOTO BUCLE1

;*********************TABLA DE LEDS************************
TABLA ADDWF PCL,F
RETLW B'10000001' ;
RETLW B'11110011' ;
RETLW B'01001001' ;
RETLW B'01100001' ;
RETLW B'00110011' ;
RETLW B'00100101' ;
RETLW B'00000101' ;
RETLW B'11110001' ;
RETLW B'00000001' ;
RETLW B'00100001' ;

;****************TABLA DE POSICION DE DISPLAYS*************
POSICION ADDWF PCL,F
RETLW B'0111'
RETLW B'1110'
RETLW B'1101'
RETLW B'1011'
END

INFORME - PROYECTO FINAL 13

You might also like