Manejo del Timer y las Interrupciones
COMPETENCIA ESPECIFICA DE LA SESIÓN
- Conocer el funcionamiento y la configuración de las Interrupciones
- Conocer el funcionamiento y la configuración del Timer cero
- Aplicar estos conocimientos en la realización de un cronómetro.
- Interrupciones
- Timer cero.
- CCS Compiler instalado.
- Entrenador de PICS
- Pantalla LCD
- PIC16F877A
- Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
- PC con Software de simulación.
MARCO TEÓRICO:
Timers:
Un timer no es más que un contador cuya entrada está conectada al reloj del sistema. De hecho, la mayoría de los timers pueden reconfigurarse como contadores. En ese caso, en lugar de contar pulsos de reloj cuentan los pulsos que llegan a un determinado pin.
Uso de TIMERS con interrupciones (timer)
Tras verificar que los TIMERS funcionan pasemos a usarlos en combinación con las interrupciones para poder establecer tareas a intervalos regulares. Por descontado, para poder usar interrupciones tenemos que habilitar las interrupciones globales y la interrupción del TMR0 en particular (aunque esto también se puede en la función OpenTimer con la máscara TIMER_INT_ON/OFF. Como vimos en el tutorial de interrupciones es conveniente trabajar con macros para no tener que recordar que bits habilitaban que interrupciones.
Ciertos timers están considerados periféricos, por lo que también tendríamos que habilitar las interrupciones periféricas, aunque no es el caso del TMR0.
El fundamento del proceso es sencillo. La interrupción del TMR0 se producirá cuando el contador del timer pase por cero (cada 256 o 65536 ciclos dependiendo de si estamos en 8 o 16 bits). La idea es arrancar con un valor del contador tal que en el tiempo deseado alcance el valor máximo (256 o 65536).
Consideremos el modo 8 bits (sin divisor) y arranquemos con un valor 156 en TMR0L. Necesitaremos 100 ciclos (256-156) para rebosar el contador y provocar la interrupción. Al cabo de 100 x 0.2 usec = 20 usec se producirá la primera interrupción.
Entrenador en Proteus:
En los CCS tambien se dan interrupciones, pero de la siguiente manera:
- Interrupciones en CCS CCS dispone de directivas para el manejo de interrupciones por ejemplo: #int_XXXX. La directiva especifica que la función que la sigue es la función de interrupción correspondiente.
Sus funciones CCS 8 se ven validadas en una pantalla, donde se ven reflejados los diferentes tipos de conectores ( valores de recepción del PIC 16F876A).
En el CCS vemos algunas funciones anexadas para la interrupción:
Para facilitar el manejo de interrupciones en C, el compilador incluye funciones
- enable_interrupts(level) Activa las interrupciones indicadas por level.
- disable_interrupts(level) desactiva las interrupciones indicadas por level.
- clear_interrupts(level) Borra el flag de interrupción indicado
Partiendo de estas especificacions obtenemos un variable que debemos reconocer el LEVEL
- Level es una constante definida en el fichero de cabecera (#include) generando el código necesario para activar las interrupciones correspondientes modificando los registros ITCON, PIE1 y PIE2. Debemos activa el “global mente” cuando se activamos alguna interrupción .
Definiciones de cada registro de level
Para estos registros se muestra un ejemplo general del código de registro
A partir del código mostrado, realice los cambios necesarios para realizar un programa que
CUENTE EN FORMA DESCENDENTE, (temporizador regresivo), bajo las siguientes
condiciones:
a. Al presionar pulsador en D0, incrementar MINUTOS. el temporizador aún no debe estar
contando el tiempo. (sirve para configurar tiempo de cuenta).
b. Al presionar pulsador en D1, iniciar CUENTA REGRESIVA desde los minutos
previamente configurados.
c. Si la cuenta llega a 00:00, congelar la cuenta y sonar BIP 3 veces.
EVIDENCIAS:
A) Video de Jilmar Nuñez Zegarra
B) Video de Jean Carlo Andia Jimenez
JUEGO:
A) Juego de Jilmar Nuñez Zegarra
B) juego de Jean Carlo Andia Jimenez
OBSERVACIONES:
(Jilmar Nuñez Zegarra)
- Para generar los segundos, minutos y centésimas, debemos usar 3 variables de tipo entero
- Si queremos saber el tiempo de un segundo real debemos usar el timer 0 el cual es de 8 bits
- Si queremos parar el cronómetro, usamos la sentencia: “disable_interrups” y el pulsador en el pin A5 el cual también aumenta los minutos y para iniciarlo de nuevo: “enable_interrups” y el pulsador en el pin D0.
CONCLUSIONES:
(Jilmar Nuñez Zegarra)
· Hemos creado una función que hemos llamado BIP para emitir 3 pitidos una vez el temporizador llegue a 0.
Creamos una variable que llamada encendido la cual con una función AND se activa con los minutos y segundos en cero, para que cuando iniciemos el contador os bips no produzcan sonido
· Para el caso de realizar un cronómetro con cuenta hacia atrás. Fue necesario asignar a la variable segundos 59 y terminarla en -1, igualmente con minutos.
· Aprendimos el uso correcto de las interrupciones para programas un temporizador





















