Interrupciones: ¿Qué son y cómo usarlas?
Introducción
Las interrupciones son un mecanismo muy potente y valioso en procesadores y autómatas. Arduino, por supuesto, no es una excepción.
En esta guía veremos qué son las interrupciones, y como usarlas en nuestro código.
Para entender la utilidad y necesidad de las interrupciones, supongamos que tenemos conectado a Arduino: "encoder óptico" que cuenta las revoluciones de un motor, un "sensor de líquidos" que emite una alarma de nivel de agua en un depósito, y un pulsador de parada.
Si queremos detectar un cambio de estado en estas entradas, el método básico procedimental es emplear las entradas digitales para consultar repetidamente el valor de la entrada, con un intervalo de tiempo (delay) entre consultas.
Este mecanismo se denomina "poll", y tiene 3 claras desventajas:
- Consumo continuo de procesador y de energía, al tener que preguntar continuamente por el estado de la entrada.
- Si la acción necesita ser atendida inmediatamente, (por ejemplo con un sensor de fin de carrera) esperar hasta el punto de programa donde se realiza la consulta puede ser inaceptable.
- Si el pulso de entrada es muy corto, o si el procesador está ocupado haciendo otra tarea mientras se produce, es posible que nos saltemos el disparo y nunca lleguemos a censarlo.
Para resolver este tipo de problemas, los microprocesadores incorporan el concepto de "interrupción", mecanismo que permite asociar una función a la ocurrencia de un determinado evento. Esta función de callback asociada se denomina ISR (Interruption Service Rutine).
Cuando ocurre el evento el procesador "sale" inmediatamente del flujo normal del programa y ejecuta la función ISR asociada ignorando por completo cualquier otra tarea (por esto se llama interrupción).
Al finalizar la función ISR asociada, el procesador vuelve al flujo principal, en el mismo punto donde había sido interrumpido.
Como vemos, las interrupciones son un mecanismo muy potente y cómodo que mejora nuestros programas y nos permite realizar acciones que no serían posibles sin el uso de interrupciones.
Para usar interrupciones en dispositivos físicos (como pulsadores, sensores ópticos, etc) debemos antes eliminar el efecto "rebote":