¿Programar con interrupciones?

Elegir el modo de programar un microprocesador: consultando de forma cíclica el estado de cada periférico (Polling), o creando una interrupción por cada periférico a controlar. Métodos a seguir para programar el microprocesador AT89S52 con 2 interrupciones y una consulta cíclica. Posibles efectos indeseados cuando se programa con interrupciones.

Interrupciones AT89S52

Cuando se programa un microprocesador con la finalidad de tomar decisiones, dependiendo del estado de alguno o varios dispositivos periféricos, como podrían ser: pulsadores, un reloj en tiempo real (RTC), termómetros, alarmas, etc… existen dos formas posibles de hacerlo:

-> La forma más sencilla y clásica sería consultar de forma cíclica el estado de cada periférico.

-> Lo ideal sería habilitar una interrupción en el procesador por cada periférico a controlar.

Consulta secuencial y periódica

En este proceso de consulta, también conocido como polling en inglés, es el propio procesador el que determina el momento en el que realiza la consulta.

Consulta secuencial

Este método tiene el inconveniente de ser poco eficiente, porque el procesador consume muchos recursos realizando las instrucciones de sondeo… y además en algunas aplicaciones, una pequeña demora de tiempo afecta a la precisión de la medida o produce efectos indeseados. Por ejemplo, un error en la precisión cuando se utiliza un temporizador del procesador como patrón de tiempo de un reloj o cronómetro. Efectos indeseados, como podrían ser parpadeos, cuando se genera una señal PWM para el control de brillo de un display… o inestabilidad  si se utiliza esta misma señal PWM para  regular la velocidad de un motor.

Programar con interrupciones

Una interrupción sirve para detectar en tiempo real el momento en el que se debe realizar la consulta a cada periférico. Con la interrupción, es el periférico quien se encarga de avisar al procesador, y mientras tanto el procesador puede realizar otras tareas.

Habilitación de las interrupciones

El orden de prioridad de todas las interrupciones se pueden programar en el procesador. Así el procesador decidirá si un proceso se debe interrumpir o no, en caso de que se produzca una interrupción mientras se está atendiendo a otra, o cuando se produzcan dos o más interrupciones de forma simultánea. Un mal uso de la prioridad en las interrupciones, también podría provocar efectos indeseados.

Prioridad de las interrupciones

En la imagen anterior, al no tener la prioridad de interrupción el Timer que genera la señal PWM, se producen fluctuaciones en el ancho de impulso generado.

 

 

Bingo electrónico Vs Bingo mecánico

Comparativa entre un Bingo de tipo electrónico y otro de tipo mecánico (bombo con bolas). Generación del número aleatorio en el Bingo electrónico. Actualización del firmware, con el fin de mejorar las animaciones, incorporando un test numérico.

Bingo de bolas

¿Cómo se genera el número?

La generación del número aleatorio se basa en el modo de funcionamiento del sistema mecánico, mediante la extracción de una bola numerada del bombo. En un Bingo tradicional (mecánico), al principio hay 90 bolas numeradas dentro del bombo, y en cada extracción el número de bolas va disminuyendo de una en una.

Tabla numérica

En este Bingo electrónico, la generación del número se hace siguiendo estos pasos:

  • El micro-controlador utiliza un contador (Timer) que modifica su valor a una velocidad de 2 millones de valores por segundo aproximadamente (0,5 uSeg).
  • El valor del número máximo de este contador se limita en función a la cantidad de números que faltan por salir en el Bingo. Al principio el número máximo es 90 y va decreciendo a medida que se van extrayendo los números (igual que el número de bolas de un bombo mecánico).
  • En el momento que se pulsa el botón, el micro-controlador toma el valor del número generado por el contador, y este valor lo asigna al ‘hueco libre’ que queda en la tabla de números que faltan por salir.
  • Con ese valor, el micro-controlador busca el ‘hueco libre’ dentro de la tabla de números, empezando desde el número 1 hasta el 90, y luego asigna esta posición de ‘hueco libre’ al número real… ocupando el hueco y mostrando el número real en el display de 7 segmentos

De esta manera, las probabilidades de salir un número determinado son las mismas que en un bombo mecánico (es totalmente aleatorio). Por otra parte, se evita la generación de números ya extraídos.

Actualización del firmware

En esta actualización del firmware (v3) se añaden nuevas animaciones:

  • Al mostrar un nuevo número,  parpadean en modo alterno el número del display y el diodo LED del panel.
  • Cuando el Bingo está en modo inicio (mostrando dos guiones en el display) y está así durante más de un minuto, se genera una animación en el panel LED. En esta versión, se incluye un test numérico, tanto en el panel LED como en el display de 7 segmentos.

Modo TEST

Puedes descargar la nueva versión del firmware desde el siguiente enlace:

Firmware: J_RPM_v3_BINGO.HEX