MICROCONTROLADORES
Laboratorio Nº 12
(Manejo del timer y las interrupciones)
1. CAPACIDAD TERMINAL:
- Utilizar al microcontrolador en aplicaciones de control electrónico.
- Desarrollar y ejecutar programas en un microcontrolador PIC
- Programar y configurar interfaces básicas del microcontrolador.
2. COMPETENCIA ESPECÍFICA 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.
3. CONTENIDOS A TRATAR:
- Interrupciones
- Timer cero.
4. RESULTADOS:
- Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.
5. MATERIALES Y EQUIPO
- CCS Compiler instalado.
- Entrenador de PICS
- PIC16F877A
- Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
- PC con Software de simulación.
6. FUNDAMENTO TEÓRICO
-
- Manejo de las interrupciones en un PIC
- Manejo y configuración del Timer
Las interrupciones PIC son desviaciones de flujo de control del programa originadas asincrónicamente por diversos sucesos que no dependen del programador, es decir, ocurren en cualquier momento.
Las interrupciones PIC ocurren por sucesos externos como la generación de una interrupción por flanco PIC, una interrupción externa PIC cambiando el nivel en un PIN del microcontrolador o eventos internos tales como el desbordamiento de un contador, terminación del conversor análogo a digital, entre otras.
El comportamiento del microcontrolador ante la interrupción es similar al procedimiento que se sigue al llamar una función desde el programa principal. En ambos casos se detiene la ejecución del programa en curso, se guarda la dirección a donde debe retornar cuando termine de ejecutar la interrupción, atiende o ejecuta el programa correspondiente a la interrupción y luego continua ejecutando el programa principal, desde donde lo dejo cuando fue interrumpido.
1. CAPACIDAD TERMINAL:
- Utilizar al microcontrolador en aplicaciones de control electrónico.
- Desarrollar y ejecutar programas en un microcontrolador PIC
- Programar y configurar interfaces básicas del microcontrolador.
2. COMPETENCIA ESPECÍFICA 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.
3. CONTENIDOS A TRATAR:
- Interrupciones
- Timer cero.
4. RESULTADOS:
- Diseñan y optimizan sistemas y procesos para cumplir con las condiciones establecidas y gestionando adecuadamente los recursos materiales y humanos.
- CCS Compiler instalado.
- Entrenador de PICS
- PIC16F877A
- Guía de Laboratorio. El trabajo se desarrolla de manera GRUPAL.
- PC con Software de simulación.
6. FUNDAMENTO TEÓRICO
- Manejo de las interrupciones en un PIC
- Manejo y configuración del Timer
Las interrupciones PIC son desviaciones de flujo de control del programa originadas asincrónicamente por diversos sucesos que no dependen del programador, es decir, ocurren en cualquier momento.
Las interrupciones PIC ocurren por sucesos externos como la generación de una interrupción por flanco PIC, una interrupción externa PIC cambiando el nivel en un PIN del microcontrolador o eventos internos tales como el desbordamiento de un contador, terminación del conversor análogo a digital, entre otras.
El comportamiento del microcontrolador ante la interrupción es similar al procedimiento que se sigue al llamar una función desde el programa principal. En ambos casos se detiene la ejecución del programa en curso, se guarda la dirección a donde debe retornar cuando termine de ejecutar la interrupción, atiende o ejecuta el programa correspondiente a la interrupción y luego continua ejecutando el programa principal, desde donde lo dejo cuando fue interrumpido.
Tipos de Interrupciones PIC
Aqui nombramos 10 diferentes causas que producen una interrupción PIC, por lo tanto el primer paso de la rutina de interrupción será identificar la causa de la interrupción.
- Interrupción externa PIC RB0/INT
- Interrupción por cambio lógico en el puerto B (pines RB7 a RB4)
- Interrupción por desborde del timer 0 (TMR0)
- Interrupción por desborde del timer 1 (TMR1)
- Interrupción por comparación exitosa exitosa en TMR2
- Interrupción del comparador
- Interrupción del transmisor del USART
- Interrupción del receptor del USART
- Interrupción del módulo CCP
- Interrupción del EEPROM
Aqui nombramos 10 diferentes causas que producen una interrupción PIC, por lo tanto el primer paso de la rutina de interrupción será identificar la causa de la interrupción.
- Interrupción externa PIC RB0/INT
- Interrupción por cambio lógico en el puerto B (pines RB7 a RB4)
- Interrupción por desborde del timer 0 (TMR0)
- Interrupción por desborde del timer 1 (TMR1)
- Interrupción por comparación exitosa exitosa en TMR2
- Interrupción del comparador
- Interrupción del transmisor del USART
- Interrupción del receptor del USART
- Interrupción del módulo CCP
- Interrupción del EEPROM
Interrupciones PIC en CCS
Vamos a ver como podemos utilizar las interrupciones en un PIC utilizando el PIC C Compiler CCS. Lo que veremos aqui puedes aplicarlo en cualquier microcontrolador de Microchip, por ejemplo esto sirve para las interrupciones PIC 18F4550 CCS, Interrupciones PIC 16F877A, Interrupciones PIC 16F84 o cualquier otro. A modo de ejemplo lo mostraremos como usar las interrupciones PIC en el 18F887.
Los pasos que se deben seguir para atender una interrupción, son los siguientes
- Digitar la función correspondiente a la interrupción. La función debe comenzar con # y la interrupción correspondiente, por ejemplo para la función de interrupción por RB0 se digita #int_EXT
- En el programa principal, habilitar las interrupciones en forma global, con la instrucción: enable_interrupts(GLOBAL);
- En el programa principal, habilitar la interrupción correspondiente, como ejemplo se muestra como habilitar la interrupción externa por RB0: enable_interrupts(INT_EXT);
Existen diferentes tipos de interrupción en el microcontrolador, algunas de ellas se mencionan a continuación:
#INT_EXT INTERRUPCIÓN EXTERNA
#INT_RTCC DESBORDAMIENTO DEL TIMER0(RTCC)
#INT_RB CAMBIO EN UNO DE LOS PINES B4,B5,B6,B7
#INT_AD CONVERSOR A/D
#INT_EEPROM ESCRITURA EN LA EEPROM COMPLETADA
#INT_TIMER1 DESBORDAMIENTO DEL TIMER1
#INT_TIMER2 DESBORDAMIENTO DEL TIMER2
El timer0 PIC es un temporizador contador de 8 bits, el registro TMR0 es el temporizador contador timer0 en si, es donde se guardan los valores del timer0 PIC, cuando es utilizado como temporizador sus valores aumentaran de uno en uno entre 0 y 255 con cada 4 ciclos de reloj, no olvidar que cada ciclo de instrucción del microcontrolador PIC es realizado en 4 ciclos de reloj, por ejemplo si el oscilador con el que está funcionando el microcontrolador PIC es de 4MHz, entonces el registro TMR0 aumentará una unidad en cada 1us, si el registro TMR0 se incrementa en 100 unidades habrán transcurrido 100us; cuando el timer0 PIC es utilizado como contador el registro TMR0 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 timer0 PIC, este pin es identificado como T0CKI que en el PIC16F877A es el pin6 o RA4, esto puede variar de acuerdo al microcontrolador PIC utilizado, pero siempre se llamará T0CKI.
Vamos a ver como podemos utilizar las interrupciones en un PIC utilizando el PIC C Compiler CCS. Lo que veremos aqui puedes aplicarlo en cualquier microcontrolador de Microchip, por ejemplo esto sirve para las interrupciones PIC 18F4550 CCS, Interrupciones PIC 16F877A, Interrupciones PIC 16F84 o cualquier otro. A modo de ejemplo lo mostraremos como usar las interrupciones PIC en el 18F887.
Los pasos que se deben seguir para atender una interrupción, son los siguientes
- Digitar la función correspondiente a la interrupción. La función debe comenzar con # y la interrupción correspondiente, por ejemplo para la función de interrupción por RB0 se digita #int_EXT
- En el programa principal, habilitar las interrupciones en forma global, con la instrucción: enable_interrupts(GLOBAL);
- En el programa principal, habilitar la interrupción correspondiente, como ejemplo se muestra como habilitar la interrupción externa por RB0: enable_interrupts(INT_EXT);
Existen diferentes tipos de interrupción en el microcontrolador, algunas de ellas se mencionan a continuación:
#INT_EXT INTERRUPCIÓN EXTERNA
#INT_RTCC DESBORDAMIENTO DEL TIMER0(RTCC)
#INT_RB CAMBIO EN UNO DE LOS PINES B4,B5,B6,B7
#INT_AD CONVERSOR A/D
#INT_EEPROM ESCRITURA EN LA EEPROM COMPLETADA
#INT_TIMER1 DESBORDAMIENTO DEL TIMER1
#INT_TIMER2 DESBORDAMIENTO DEL TIMER2
El timer0 PIC es un temporizador contador de 8 bits, el registro TMR0 es el temporizador contador timer0 en si, es donde se guardan los valores del timer0 PIC, cuando es utilizado como temporizador sus valores aumentaran de uno en uno entre 0 y 255 con cada 4 ciclos de reloj, no olvidar que cada ciclo de instrucción del microcontrolador PIC es realizado en 4 ciclos de reloj, por ejemplo si el oscilador con el que está funcionando el microcontrolador PIC es de 4MHz, entonces el registro TMR0 aumentará una unidad en cada 1us, si el registro TMR0 se incrementa en 100 unidades habrán transcurrido 100us; cuando el timer0 PIC es utilizado como contador el registro TMR0 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 timer0 PIC, este pin es identificado como T0CKI que en el PIC16F877A es el pin6 o RA4, esto puede variar de acuerdo al microcontrolador PIC utilizado, pero siempre se llamará T0CKI.

7. TAREAS GUIADAS DENTRO DEL LABORATORIO:
-
Simule y pruebe en el entrenador el programa mostrado de acuerdo al circuito y código siguiente. Asegúrese que el LCD esté conectado al PUERTO D mediante interruptores rojos debajo del mismo:
8. TAREAS A SER EVALUADAS:
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:
Al presionar pulsador en D0, incrementar SEGUNDOS. el temporizador aún no debe estar contando el tiempo. (sirve para configurar tiempo de cuenta).
Al presionar pulsador en D1, iniciar CUENTA REGRESIVA desde los minutos previamente configurados.
Si la cuenta llega a 00:00, congelar la cuenta y sonar BIP 3 veces.
Para verificar que una variable de tiempo (digamos “minutos”) llegó a cero, hacerlo con la instrucción “if (minutos==-1)”
9. Video explicativo:
10. OBSERVACIONES Y CONCLUSIONES:
- OBSERVACIONES:
- Se observó que es importante declarar la librería correspondiente del LCD para poder realizar su programación.
- Se observó que es necesario declarar los pines del LCD para realizar la programación de cada uno de los datos almacenados en cada pin.
- Se utilizó un VOID BIP, para realizar el sonido de alarma al momento de que el dato llegaba a su valor máximo y su valor mínimo.
- Para realizar un bucle infinito no se utilizó el bucle for, pues este tiene un tope determinado, se utilizó un bucle while, pues a una determinada condición es mas fácil trabajar con él.
- CONCLUSIONES:
- Se reconoció la pantalla LCD, su estructura y su funcionamiento.
- Se reconocieron funciones de bucles (for y while) para realizar un determinado paso por un determinado tiempo o si se desea por un bucle infinito de repeticiones.
- Se identificaron pines de programación correspondientes al LCD para poder enviar el dato a una determinada fila y una determinada columna.
- Se programaron y configuraron interfaces básicas del microcontrolador.
7. TAREAS GUIADAS DENTRO DEL LABORATORIO:
- Simule y pruebe en el entrenador el programa mostrado de acuerdo al circuito y código siguiente. Asegúrese que el LCD esté conectado al PUERTO D mediante interruptores rojos debajo del mismo:
8. TAREAS A SER EVALUADAS:
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:
Al presionar pulsador en D0, incrementar SEGUNDOS. el temporizador aún no debe estar contando el tiempo. (sirve para configurar tiempo de cuenta).Al presionar pulsador en D1, iniciar CUENTA REGRESIVA desde los minutos previamente configurados.
Si la cuenta llega a 00:00, congelar la cuenta y sonar BIP 3 veces.
Para verificar que una variable de tiempo (digamos “minutos”) llegó a cero, hacerlo con la instrucción “if (minutos==-1)”
9. Video explicativo:
10. OBSERVACIONES Y CONCLUSIONES:
- OBSERVACIONES:
- Se observó que es importante declarar la librería correspondiente del LCD para poder realizar su programación.
- Se observó que es necesario declarar los pines del LCD para realizar la programación de cada uno de los datos almacenados en cada pin.
- Se utilizó un VOID BIP, para realizar el sonido de alarma al momento de que el dato llegaba a su valor máximo y su valor mínimo.
- Para realizar un bucle infinito no se utilizó el bucle for, pues este tiene un tope determinado, se utilizó un bucle while, pues a una determinada condición es mas fácil trabajar con él.
- CONCLUSIONES:
- Se reconoció la pantalla LCD, su estructura y su funcionamiento.
- Se reconocieron funciones de bucles (for y while) para realizar un determinado paso por un determinado tiempo o si se desea por un bucle infinito de repeticiones.
- Se identificaron pines de programación correspondientes al LCD para poder enviar el dato a una determinada fila y una determinada columna.
- Se programaron y configuraron interfaces básicas del microcontrolador.

No hay comentarios:
Publicar un comentario