Clase digital 4. Programación del microcontrolador: Interrupción y Temporizador

Portada » Clase digital 4. Programación del microcontrolador: Interrupción y Temporizador
text

Programación del microcontrolador: Interrupción y Temporizador

Introducción

¡Hola respetable estudiante!

¿Cómo te has sentido? ¿Qué te ha parecido esta unidad de aprendizaje? Espero que la  encuentres fascinante. Te comparto los siguientes temas que son muy interesantes, ampliarán tus conocimientos y desarrollarán tus habilidades.

En esta clase vas a continuar con el desarrollo de las prácticas. La tercera práctica está enfocada a que te familiarices con el manejo de las interrupciones. Esta característica es común a todos los microcontroladores, independientemente del fabricante, pues permiten que el microcontrolador interrumpa la ejecución del programa principal para realizar una acción o un conjunto de acciones ante un evento que se activa fuera de la ejecución principal. En este microcontrolador se tienen dos niveles de prioridad, prioridad alta y prioridad baja.

Cuando se activa una interrupción de alta prioridad, el microcontrolador realiza la función o funciones definidas para esta prioridad y, si en el transcurso de esta ejecución se activa una interrupción de baja prioridad, esta tiene que esperar hasta que el microcontrolador termine de ejecutar la función o funciones de alta prioridad.

Por otro lado, si se activa una interrupción y, cuando se está ejecutando la función o funciones de esta interrupción, se activa una interrupción de alta prioridad, entonces deja de ejecutar el código de la interrupción de baja prioridad y ejecuta el código de la interrupción de alta prioridad. Cuando termina de ejecutar el código de la interrupción de alta prioridad, regresa a terminar el código de la interrupción de baja prioridad y, al terminar esta, regresa a seguir ejecutando el programa principal.

La cuarta práctica te permitirá comprender el funcionamiento de los temporizadores, que son contadores que operan de forma paralela a la ejecución del programa principal. Estos contadores, al desbordarse, generan una interrupción que, como lo hacen en intervalos fijos de tiempo, sirven como una base de tiempo para diferentes funciones, como puede ser la operación de un reloj, el cual puede ser desplegado en una pantalla LCD o en exhibidores de 7 segmentos. El manejo de estos exhibidores de 7 segmentos también se presenta en esta práctica, lo que te permitirá entender el funcionamiento de este dispositivo que sigue siendo muy utilizado como interfaz entre los dispositivos digitales y el usuario humano.

En relación con lo anterior, ¡comencemos nuestro trabajo de aprendizaje! 

¡Adelante!

Desarrollo del tema

El microcontrolador PIC18F45K50 tiene múltiples fuentes de interrupción y maneja dos prioridades de interrupción que son definidas por el programador. Las interrupciones con prioridad alta son dirigidas al vector 000008h y las interrupciones con prioridad baja al vector 000018h. Las interrupciones son llamadas asíncronas a funciones que desvían el flujo del control del programa.

Pueden ser externas como el cambio de estado de un pin de entrada o internas como el desbordamiento de un temporizador. Al ejecutarse una interrupción se detiene la ejecución del programa en curso, se guarda la dirección actual del contador de programa en la pila y se carga el contador con la dirección reservada correspondiente al vector de prioridad asignado. En el vector seleccionado comienza la rutina de servicio a la interrupción (RSI).

Una interrupción de alta prioridad no será interrumpida por ningún evento hasta que termine de ser atendida (con la terminación de la función respectiva). Si la interrupción es de baja prioridad, esta será interrumpida si entra una interrupción de alta prioridad. Una vez concluida la interrupción de alta prioridad, se termina la interrupción de baja prioridad y se regresa al programa principal.

Imagen 1. El microcontrolador PIC18F45K50 tiene múltiples fuentes de interrupción y maneja dos prioridades de interrupción que son definidas por el programador.

Hay 13 registros asociados al manejo de interrupciones. Estos registros son: RCON, INTCON, INTCON2, INTCON3, PIR1, PIR2, PIR3 PIE1, PIE2, PIE3, IPR1, IPR2 and IPR3. Algunos de ellos son para habilitar interrupciones, otros contienen los bits de banderas que se ponen a 1 cuando se activa la interrupción correspondiente y otros son para seleccionar la prioridad de la interrupción. Revisar la hoja de especificaciones para una descripción detallada.

Las interrupciones que se utilizarán en esta práctica son las externas a través de los pines 0 y 1 del puerto B. Consulte en la hoja de datos del PIC la configuración de las interrupciones mediante los registros RCON, INTCON e INTCON3.

En la práctica 4 se programará el PIC para que genere un contador que será desplegado en un exhibidor de 7 segmentos. El contador se implementará utilizando el temporizador TIMER0 que tiene la opción de utilizar un divisor de frecuencia con razones de 1:2 a 1:256. Además, puede trabajar como temporizador/contador de 8 o 16 bits.

El módulo TIMER0 es un temporizador/contador con las siguientes características:

  • Es un contador/temporizador de 8 o 16 bits.
  • Permite lectura/escritura.
  • Puede utilizar un divisor de frecuencia programable por software de 8 bits.
  • Se puede seleccionar una señal de reloj interna o una externa.
  • Tiene interrupción en sobre flujo de FFh (FFFFh) a 00h (0000h).
  • Tiene la opción de selección de disparo de señal externa.

El temporizador se programa mediante el registro T0CON. Todos los bits de este registro están en ‘1’ por default.

  • Bit 7 habilita el TIMER0.
  • Bit 6 configura el TIMER0 como un temporizador/contador de 8 o 16-bit.
  • Bit 5 selecciona la fuente de reloj: pin T0CKI (RA4) o la señal interna del ciclo de instrucción.
  • Bit 4 selecciona el incremento por disparo positivo o negativo en el pin T0CKI.
  • Bit 3 asigna el divisor (prescaler) al TIMER0.
  • Bits 2-0 Seleccionan la razón del divisor (prescaler).

Si se trabaja con una frecuencia de reloj de 4 MHz, el temporizador trabaja de 0000h a FFFFh y utiliza el divisor con una razón 1:16, generará una interrupción cada 1.048 S. El temporizador generará una interrupción al desbordarse (al pasar de FFFFh a 0000h) y en la rutina de interrupción se incrementará el registro auxiliar. La interrupción se programa al cargar el registro INTCON con el valor A0h.

La interrupción del temporizador TMR0 no despierta al procesador del modo “Sleep” ya que el temporizador se apaga en este modo. Para manejar el exhibidor de 7 segmentos se tiene que transformar el número en binario del contador en el valor de salida que desplegará el exhibidor en decimal. Esto se refleja en la siguiente tabla que representa los valores para un exhibidor de cátodo común:

Valores para un exhibidor de cátodo común.

Valor decimalValor binarioRB6ARB5BRB4CRB3DRB2ERB1FRB0GSalida Hexadecimal
0000011111107E
10001011000030
2001011011016D
30011111100179
40100011001133
5010110110115B
6011010111115F
70111111000070
8100011111117F
91001111001173
Tabla 1. Valores para un exhibidor de cátodo común.

Los valores de esta tabla se cargarán en una variable tipo arreglo para ser llamados en función del valor del argumento de la variable.

Conclusión

Al concluir la práctica 3 has observado el funcionamiento de las interrupciones externas y lo que involucra en cuanto a la ejecución de las funciones en el código en XC8. Es recomendable que leas la sección “Interrupts” de la hoja de especificaciones del microcontrolador PIC18F45K50 para que puedas manejar el resto de las interrupciones, teniendo siempre presente que van a generar la ejecución de las funciones de alta o de baja prioridad, según se configuren.

Los temporizadores son muy utilizados en dispositivos de control, como microcontroladores y PLCs. Una característica importante, además de servir como base de tiempo para algún evento repetitivo, como puede ser medir el flujo o la temperatura de algún proceso, es que pueden servir como contadores de eventos externos, ya que pueden incrementarse mediante señales externas digitales, que pueden contar, por ejemplo, el número de productos que pasan por una banda transportadora o el número de giros de un motor.

Los exhibidores de 7 segmentos continúan siendo muy utilizados ya que son fáciles de operar y, por estar basados en diodos LED, pueden durar muchos años operando y con un muy bajo consumo de energía.

Hemos arribado al final de nuestra clase. ¡Te felicito, bien hecho! Por favor resuelve la consigna definida para este tema; esfuérzate y trabaja lo suficiente para que la entregues en tiempo y forma.

Te encuentro en la siguiente clase digital. ¡Ánimo, vas avanzando muy bien en tu aprendizaje! Hasta luego.