UNIVERSIDAD POLITÉCNICA SALESIANA
LABORATORIO DE SISTEMAS MICROPROCESADOS I
Fecha: 30/01/2017
MANEJO DE TEMPORIZADORES PARA LA IMPLEMENTACION DE UN CRONÓMETRO INFORME N°9 1.- Caiza Quishpe Paul Segundo
[email protected] 2.- Cóndor Guaygua Mesias Miguel
[email protected]
Lunes 30 de Enero del 2017 07:00h a 09:00h Grupo 2 Sistemas Microprocesador I Nivel Sexto
2. MARCOTEÓRICO
RESUMEN:
El en presente informe se da a conocer el manejo de los temporizadores que tiene el PIC 16F877A para Familiarizar al estudiante con el uso y la forma de operación de los temporizadores para generar bases de tiempo, a través de la implementación de un cronometro convencional (minutos: segundos: milisegundos).
2.1- MANEJO DE TEMPORIZADORES → Un temporizador o minutero es un dispositivo, con
frecuencia programable, que permite medir el tiempo. La primera generación fueron los relojes de arena, que fueron sustituidos por relojes convencionales y más tarde por un dispositivo íntegramente electrónico. Cuando trascurre el tiempo configurado se hace saltar una alarma o alguna otra función a modo de advertencia.
ABSTRACT: The present report discloses the timer handling of the PIC 16F877A 16F877A to familiarize the student with the use and the way of operation of the timers to generate time bases, through the implementation of a conventional timer (minutes: Seconds: milliseconds).
→ En este caso se verá el uso del timer0 PIC como
contador y temporizador, en lo que sigue se comentará para el caso del PIC16F877A por lo que es muy importante que se tenga a mano la hoja de datos del PIC16F877A, para el caso de utilizar algún otro microcontrolador AVR el procedimiento será muy similar a lo aquí comentado. [1] comentado. [1]
. PALABRAS CLAVE: CLAVE: Manejo de Temporizadores, Cronometro convencional, Timer 0, Timer 1, Timer 2.
1. OBJETIVOS
Familiarizar al estudiante con el uso y la forma forma de operación de los temporizadores para generar bases de tiempo.
1.2 OBJETIVOS ESPECIFICOS
Estudiar el funcionamiento de los temporizadores y hacer uso de interrupciones para implementar un temporizador digital.
Implementar un cronometro convencional mediante el uso de los Timer del PIC 16F877A. Figura 1.1.- Timer0 del PIC 16F877A ubicado en el pin 6.
1
UNIVERSIDAD POLITÉCNICA SALESIANA
LABORATORIO DE SISTEMAS MICROPROCESADOS I
Fecha: 30/01/2017
2.2.- USO DEL TIMER 0 DEL PIC 16F877A. → El Timer cero del Microcontrolador 16F877A, es un
Temporizador/Contador de 8-bit. Para trabajar con este Timer hay varios parámetros de configuración como lo son (abajo):
Fuente de conteo o tiempo, interna o externa Prescaler 1:2, 1:4, 1:8 hasta 1:256 Uso de las interrupciones del timer cada desbordamiento Transiciones, (0 a 1) o (1 a 0)
Figura 3.-Diagrama de bloques del Timer1 como temporizador.
→ El prescaler es como un contador más, es decir si no
usáramos prescaler la interrupción o desbordamiento del timer tiene lugar cada vez que el r egistro de conteo pase de FFh a 00h. Pero con el uso de prescaler a por e j. 1:256, estaríamos hablando de una interrupción cada vez que el timer se desborde 256 veces (FFh*FFh).
2.3.- USO DEL TIMER 1 DEL PIC 16F877A. → El timer 1 PIC es un temporizador contador de 16 bits,
el registro TMR1 es el temporizador contador timer 1 PIC en sí, es donde se guardan los valores del timer 1 PIC, cuando es utilizado como temporizador, sus valores aumentaran de uno en uno entre 0 y 65535 con cada 4 ciclos de reloj, no olvidar que cada ciclo de instrucción del microcontrolador PIC es realizado en 4 ciclos de r eloj, por ejemplo si el oscilador con el que está funcionando el microcontrolador PIC es de 4MHz, entonces el registro TMR1 aumentará en una unidad cada 1us, si el registro TMR1 se incrementa en 100 unidades habrán transcurrido 100us.
→ En el programa presentado hoy, se usan dos fuentes
de interrupción la del timer y la interrupción externa por lo cual el programa debe identificar cual es la rutina adecuada para cada una de las interrupciones, eso se logra comparando las banderas de cada interrupción. Adicionalmente las banderas deben ser borradas en Software para evitar falsos disparos de rutina. → En la etiqueta INICIO del programa, se observa que
simplemente siempre está poniendo en 1 y en 0 a dos pines del Puerto B, pero cada vez que hay interrupción del timer, pondrá en 0 al pin que estaba en 1 y en 1 al que estaba en 0, de esa manera se crea una forma de onda y es complementaria por ser simétrica una de la otra.
→ Cuando es utilizado como contador el temporizador
timer 1 PIC ya no aumenta su valor de uno en uno en cada 4 ciclos de reloj, sino que lo hará mediante el flanco de subida o el flanco de bajada de alguna señal que llegue a un pin especial del PIC conectado al timer1 PIC, este pin es identificado como T1CKI que en el PIC16F877A es el pin15 o RC0, esto puede variar de acuerdo al microcontrolador PIC utilizado, pero siempre se llamará T1CKI. [3]
→ La función de la interrupción externa es simplemente
cambiar la velocidad del conteo, ¿cómo se logra? cambiando el prescaler del Timer 0. → En el video de arriba se puede observar el cambio de
velocidad al presionar el SW de interrupción.
2.3.1.- TIMER1 PIC COMO CONTADORE EJEMPLO
→ Este es el Esquemático, el programa ASM lo
encuentras aquí, y el HEX está más abajo. [2]
→ El circuito utilizado es el que se muestra en la siguiente
imagen, la señal que ingresa por el pin T1CKI se genera con la ayuda de un fotorresistor, cada vez que el fotorresistor disminuya su valor al pin T1CKI le llegará un alto, esto es un flanco de subida, lo que provocará que el registro TMR1 aumente en una unidad, la cuenta del timer1 PIC irá desde 0 hasta 65535, se verá de forma indirecta los valores del timer1, se hará que cada vez que el timer1 aumente en 8000 unidades se encienda un led del puerto b, se empezará con los leds del puerto b totalmente apagados. → Se utilizará un led más conectado al pin RD1 se hará
que este led esté en contacto con el fotorresistor para que sea este el que genere los altos y bajos que llegarán al pin T1CKI, con lo que en cada flanco de subida se incremente el valor del registro TMR1, el led se hará parpadear cada 20ms. [4]
Figura 2.- Temporizador/Contador de 8-bit.
2
UNIVERSIDAD POLITÉCNICA SALESIANA
LABORATORIO DE SISTEMAS MICROPROCESADOS I
Fecha: 30/01/2017
Figura 4.- Circuito de señal que ingresa por el pin T1CKI.
Figura 6.- Valores que hay que dar a estos bits para obtener los diferentes valores de los p rescaler y el postcale para el timer 2 PIC.
2.4.- USO DEL TIMER 2 DEL PIC 16F877A.
2.5.- CRONOMETRO
Timer2 PIC como temporizador T2CON es el registro de control del timer2 PIC
La palabra cronómetro proviene de la mitología griega, el nombre se le dio por el Dios griego Cronos que era el Dios del tiempo.
Es un reloj o una función de reloj que sirve para medir fracciones de tiempo, normalmente cortos y con exactitud. [1]
→ El temporizador timer 2 PIC cuenta con lo que se
conoce como prescaler y también con un postcaler pero el postcaler solo hace su trabajo cuando el timer 2 PIC es utilizado con interrupciones esto se ve en la sección de interrupciones con el PIC,
Temporizador:
→ Por ahora se comentará como utilizar tanto el prescaler
como el postcaler, lo que hacen es que la frecuencia de trabajo FOSC se divida por este prescaler y a la vez por el postcaler si se utilizan ambos a la vez se logra que el temporizador timer 2 PIC tarde un poco más en aumentar su valor en una unidad. [4]
Sistema de control de tiempo que se utiliza para abrir o cerrar un circuito en uno o más momentos determinados, y que conectado a un dispositivo lo pone en acción. [1]
Reloj:
Se denomina reloj a un instrumento que permite medir el tiempo. Existen diversos por Ejemplo: Reloj de pulso, reloj de bolsillo, reloj de salón ó pared. Lo más importante y esencial de las funciones de un reloj común es proporcionar la hora. [1]
Figura 5.- Control de registro del Timer 2. 1.- El bit7 no se utiliza por lo que se le pone a 0. 2.- Los bits de 6 al 3 mediante las combinaciones de estos bits se elige el postcaler, el poscaler puede tener los valores del 1 al 16. 3.- El bit2 al poner este bit a 1 se habilita el uso del timer2 PIC, si se pone a 0 el timer2 PIC estará deshabilitado. 4.- Los bits 1 y 0 mediante las combinaciones de estos bits se elige el prescaler, el prescaler puede tener los valores del 1, 4 y 16 Figura 7.- Cronometro digital armado en placa.
3
UNIVERSIDAD POLITÉCNICA SALESIANA
LABORATORIO DE SISTEMAS MICROPROCESADOS I
Fecha: 30/01/2017
3. MATERIALES Y EQUIPO 3.1.- EQUIPO DE PROTECCION.
Mandil.
3.2.- EQUIPO DEL LABORATORIO.
Computadora. Software PIC C. Software Proteus. Mesa de Trabajo.
Figura 6. Circuito simulado en el software proteus del cronometro.
3.3.- MATERIALES PARA LA IMPLEMENTACION DE LOS CIRCUITOS.
4.1.2.- Realice el diagrama de flujo para el algoritmo que implementará para el enunciado 1 “CRONOMETRO ”.
PIC16F877A Resistencias de 330Ω
1 Capacitor de 10uF 4 Pulsador. Protoboard. Tarjeta Programadora de Pic`s. Cristal 4MHz 2 Capacitores (22Pf) Diodos de propósito general. LCD(2x16) Fuente DC(5V) Potenciómetro de 100k Ω Cables de conexiones.
4. DESARROLLO Y PROCEDIMIENTO
MARCO PROCENDENCIAL: 4.1.1.- Diseñe el diagrama electrónico para cumplir con el primer enunciado propuesto, cumpliendo al pie de la letra lo allí solicitado.
Enunciado 1: Figura 7. Diagrama de flujo del programa de un cronometro
Realizar un cronometro el cual conste de milisegundos, segundos y minutos en la siguiente posición (minutos, segundos, milisegundos) en la segunda línea de la LCD. La primera línea de la LCD tiene que visualizar la palabra “CRONOMETRO”. Además se tiene 3 pulsadores los cuales son:
4.1.3.- Desarrolle en el compilador C la programación necesaria en base de su diagrama de flujo, para cumplir con el enunciado 1 “CRONOMETRO ”. #include <16F877a.h> #fuses XT,NOWDT #use delay(clock=4M) #use standard_io(B) #define LCD_ENABLE_PIN PIN_D0 #define LCD_RS_PIN PIN_D1 #define LCD_RW_PIN PIN_D2
Botón 1.- Inicio/Reinicio Botón 2.- Pausa Botón 3.- Reseteo
4
UNIVERSIDAD POLITÉCNICA SALESIANA
LABORATORIO DE SISTEMAS MICROPROCESADOS I
Fecha: 30/01/2017 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include
int cont=0,seg=0,min=0,b=0,c=0,i=0,y=0,comp,comp1; int32 a=0,as=0; #INT_TIMER1 void TIMER1_isr(void){ if(y==0){ if(cont==1){ seg++; if(seg==60){ seg=0; min++; if(min==60){ seg=0; min=0; }} cont=0; }else{ cont++;} set_timer1(15536); }} void main(){ lcd_init(); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); lcd_gotoxy(4,1); printf(lcd_putc,"CRONOMETRO"); lcd_gotoxy(5,2); printf(lcd_putc,"%u ",min); lcd_gotoxy(7,2); printf(lcd_putc,":%u ",seg); lcd_gotoxy(11,2); printf(lcd_putc,":%Lu ",a);
comp1=1; while(comp==1){ set_timer1(15536); enable_interrupts(INT_TIMER1); enable_interrupts(global); while(comp1==1){ lcd_gotoxy(4,1); printf(lcd_putc,"CRONOMETRO"); lcd_gotoxy(5,2); printf(lcd_putc,"%u ",min); lcd_gotoxy(7,2); printf(lcd_putc,":%u ",seg); lcd_gotoxy(11,2); a=get_timer1()*0.001525; printf(lcd_putc,":%Lu ",a); if(input(PIN_B5)==0){ comp=0; comp1=0; i=0; y=1; } if(input(PIN_B6)==0){ comp=0; comp1=0; y=1; min=0; seg=0; a=0; i=0; ////////////////////////////////// lcd_gotoxy(4,1); printf(lcd_putc,"CRONOMETRO"); lcd_gotoxy(5,2); printf(lcd_putc,"%u ",min); lcd_gotoxy(7,2); printf(lcd_putc,":%u ",seg); lcd_gotoxy(11,2); printf(lcd_putc,":%Lu ",a); //////////////////////////////////// }} }}} }
while(1){ //////////reset////////////////// if(input(PIN_B6)==0){ comp=0; comp1=0; y=1; min=0; seg=0; a=0; i=0; lcd_gotoxy(4,1); printf(lcd_putc,"CRONOMETRO"); lcd_gotoxy(5,2); printf(lcd_putc,"%u ",min); lcd_gotoxy(7,2); printf(lcd_putc,":%u ",seg); lcd_gotoxy(11,2); printf(lcd_putc,":%Lu ",a);
4.1.4.- Arme el circuito electrónico diseñado, programe su microcontrolador y realice las pruebas de funcionamiento del “CRONOMETRO ”.
} /////////////////fin///////////////// if(input(PIN_B4)==0){ i=1; } if(i==1){ y=0; comp=1;
Figura 8. Circuito implementado del CRONOMETRO.
5
UNIVERSIDAD POLITÉCNICA SALESIANA
LABORATORIO DE SISTEMAS MICROPROCESADOS I
Fecha: 30/01/2017
5. ANÁLISIS Y RESULTADOS. 5.1.- Botones de mando para el “CRONOMETRO”.
Figura 12. Cronómetro puesto en marcha.
6. CONCLUSIONES
Figura 9. Circuito implementado de los botones de mando (Inicio/Reinicio-Pausa-Reseteo).
Por medio de la práctica realizada pudimos observar el proceso que toma el manejo de los temporizadores del PIC 16F877A los cuales pueden funcionar como contadores o temporizadores los cuales nos ayudan a
generar bases de tiempo, para poder implementar un reloj o también un cronometro. Mediante la práctica se logró aprender que el PIC 16F877A consta de 3 TIMER (timer0, Timer1, Timer2) los cuales tiene diferente capacidad de memoria ya que el Timer0 es un contador ascendente de 8 bits y el Timer1 es un contador ascendente de 16bits y para lograr la implementación del cronometro se tuvo cuidado con este tipo de capacidad para que no genere errores en el conteo del cronometro.
7. RECOMENDACIONES. Figura 10. Circuito implementado del cronometro.
Tomar en cuenta los diferentes tipos Temporizadores que posee el PIC y capacidad de memoria que tiene cada uno ellos para no tener errores en desbordamiento.
de la de el
Al instante de la implementación de los circuitos tomar muy en cuenta si los pulsadores están conectados para enviar un 1L ó 0L ya que esto influye en la programación.
Polarizar de forma correcta el PIC así como la LCD para no tener ningún problema en la demás arquitectura del circuito.
8. REFERENCIAS [1] Cronometro http://www.cenam.mx/eventos/enme/docs/38%20Funcio namiento%20y%20Tipos%20de%20cronometros%2 0[Modo%20de%20compatibilidad].pdf
Figura 11. Primera visualización del cronómetro puesto en cero.
6
UNIVERSIDAD POLITÉCNICA SALESIANA
LABORATORIO DE SISTEMAS MICROPROCESADOS I
Fecha: 30/01/2017
[2] Cronómetro Funcionamiento https://www.youtube.com/watch?v=9Vv4rbRltpc [3] Timer0 del PIC 16F877A http://microcontroladores-mrelberni.com/timer0-pic/ [4] Timer1 del PIC 16F877A http://microcontroladores-mrelberni.com/timer1-pic/ [5] Timer2 del PIC 16F877A http://microcontroladores-mrelberni.com/timer2-pic/
7