- Tipos de interrupciones
- Interrupciones en Arduino
- Usando interrupciones en Arduino
- Componentes requeridos
- Diagrama de circuito
- Programación de interrupciones de Arduino
- Demostración de interrupción de Arduino
Considere un automóvil que se mueve rápido, si de repente es golpeado por otro automóvil en la dirección opuesta, lo primero que sucede es que el sensor del acelerómetro presente en el automóvil detecta una desaceleración repentina y activa una interrupción externa en el microcontrolador presente en el coche. Luego, basándose en esa interrupción, el microcontrolador produce una señal eléctrica para desplegar las bolsas de aire de inmediato. Los microcontroladores presentes en el automóvil monitorean muchas cosas simultáneamente, como detectar la velocidad del automóvil, verificar otros sensores, controlar la temperatura del aire acondicionado, etc. Entonces, ¿qué hace que una bolsa de aire se abra repentinamente en segundos? La respuesta es interrupciones, aquí se usa una señal de interrupción que tiene la prioridad más alta de todas.
Otro ejemplo simple de interrupciones son los teléfonos móviles con pantalla táctil que tienen la máxima prioridad para el sentido "táctil". Casi todos los dispositivos electrónicos tienen algún tipo de interrupción para "interrumpir" el proceso normal y hacer algunas cosas de mayor prioridad en un evento en particular. El proceso regular se reanuda después de servir la Interrupción.
Entonces, técnicamente, las interrupciones es un mecanismo por el cual una E / S o instrucción puede suspender la ejecución normal del procesador y se repara como si tuviera una prioridad más alta. Por ejemplo, un procesador que realiza una ejecución normal puede ser interrumpido por algún sensor para ejecutar un proceso en particular que está presente en ISR (Rutina de servicio de interrupción). Después de ejecutar el procesador ISR se puede reanudar nuevamente la ejecución normal.
Tipos de interrupciones
Hay dos tipos de interrupciones:
Interrupción de hardware: Ocurre cuando ocurre un evento externo como un pin de interrupción externo cambia su estado de BAJO a ALTO o ALTO a BAJO.
Interrupción del software: ocurre de acuerdo con las instrucciones del software. Por ejemplo, las interrupciones del temporizador son interrupciones de software.
Interrupciones en Arduino
Ahora veremos cómo usar las interrupciones en la placa Arduino. Tiene dos tipos de interrupciones:
- Interrupción externa
- Interrupción de cambio de pin
Interrupción externa:
Estas interrupciones son interpretadas por hardware y son muy rápidas. Estas interrupciones se pueden configurar para que se activen en caso de niveles SUBIR, BAJAR o BAJAR.
Placa Arduino |
Pines de interrupción externos: |
UNO, NANO |
2,3 |
Mega |
2,3,18,19,20,21 |
Interrupciones de cambio de pin:
Los arduinos pueden tener más pines de interrupción habilitados mediante el uso de interrupciones de cambio de pin. En las placas Arduino basadas en ATmega168 / 328, cualquier pines o los 20 pines de señal se pueden usar como pines de interrupción. También se pueden activar utilizando bordes SUBIR o BAJAR.
Usando interrupciones en Arduino
Para usar interrupciones en Arduino, es necesario comprender los siguientes conceptos.
Rutina de servicio de interrupción (ISR)
La rutina de servicio de interrupción o un controlador de interrupción es un evento que contiene un pequeño conjunto de instrucciones. Cuando ocurre una interrupción externa, el procesador primero ejecuta este código que está presente en ISR y regresa al estado donde dejó la ejecución normal.
ISR tiene la siguiente sintaxis en Arduino:
attachInterrupt (digitalPinToInterrupt (pin), ISR, modo);
digitalPinToInterrupt (pin): En Arduino Uno, NANO los pines utilizados para la interrupción son 2,3 y en mega 2,3,18,19,20,21. Especifique aquí el pin de entrada que se utiliza para la interrupción externa.
ISR: Es una función que se llama cuando se realiza una interrupción externa.
Modo: tipo de transición para activar, por ejemplo, descendente, ascendente, etc.
- RISING: Para activar una interrupción cuando el pin pasa de BAJO a ALTO.
- FALLING: Para activar una interrupción cuando el pin pasa de HIGH a LOW.
- CAMBIO: Para activar una interrupción cuando el pin pasa de LOW a HIGH o HIGH a LOW (es decir, cuando cambia el estado del pin).
Algunas condiciones durante el uso de la interrupción
- La función de rutina de servicio de interrupción (ISR) debe ser lo más corta posible.
- La función Delay () no funciona dentro de ISR y debe evitarse.
En este tutorial de interrupción de Arduino, un número se incrementa desde 0 y se utilizan dos botones para activar la interrupción, cada uno está conectado a D2 y D3. Se utiliza un LED para indicar la interrupción. Si se presiona un botón, el led se enciende y la pantalla muestra interrupt2 y se apaga, y cuando se presiona otro botón, el led se apaga y la pantalla muestra interrupt1 y se apaga.
Componentes requeridos
- Placa Arduino (En este tutorial se utiliza Arduino NANO)
- Pulsador - 2
- LED - 1
- Resistencia (10K) - 2
- LCD (16x2) - 1
- Tabla de pan
- Conexión de cables
Diagrama de circuito
Conexión de circuito entre Arduino Nano y pantalla LCD 16x2:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Al PIN central del potenciómetro Para controlar el contraste de la pantalla LCD |
RS |
D7 |
RW |
GND |
mi |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
UN |
+ 5V |
K |
GND |
Dos botones están conectados a Arduino Nano en los pines D2 y D3. Se utilizan para utilizar dos interrupciones externas, una para encender un LED y otra para apagar un LED. Cada pulsador tiene una resistencia de extracción de 10k conectada a tierra. Entonces, cuando se presiona el botón pulsador es lógica ALTA (1) y cuando no se presiona es lógica BAJA (0). Una resistencia de bajada es obligatoria, de lo contrario habrá valores flotantes en el pin de entrada D2 y D3.
También se utiliza un LED para indicar que se ha activado una interrupción o que se ha pulsado un botón.
Programación de interrupciones de Arduino
En este tutorial se incrementa un número desde 0 que se muestra continuamente en (16x2) LCD conectado al Arduino Nano, siempre que se presiona el botón izquierdo (pin de interrupción D3), el LED se enciende y la pantalla muestra Interrupt2, y cuando se presiona el botón derecho (pin de interrupción D2), el LED se apaga y la pantalla muestra Interrupt1.
El código completo con un video funcional se encuentra al final de este tutorial.
1. Primero se incluye el archivo de encabezado para la pantalla LCD y luego se definen los pines LCD que se utilizan para conectarse con el Arduino Nano.
#incluir
2. Dentro de la función de configuración anulada (), primero muestre algún mensaje de introducción en la pantalla LCD. Obtenga más información sobre la interfaz de LCD con Arduino aquí.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("RESUMEN DEL CIRCUITO"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); retraso (3000); lcd.clear ();
3. Luego, en la misma función void setup (), se deben especificar los pines de entrada y salida. El pin D13 está conectado al ánodo de LED, por lo que este pin debe definirse como salida.
pinMode (13, SALIDA);
4. Ahora viene la parte principal importante en la programación que es la función attachInterrupt (), también está incluida dentro de void setup ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Aquí se especifica que el pin 2 es para interrupción externa, y se llama a la función buttonPressed1 cuando hay RISING (LOW to HIGH) en el pin D2. Y el pin 3 también es para interrupción externa y se llama a la función buttonPressed2 cuando hay RISING en el pin D3.
5. Dentro del bucle vacío (), un número (i) se incrementa desde cero y se imprime en la pantalla LCD (16x2).
lcd.clear (); lcd.print ("CONTADOR:"); lcd.print (i); ++ i; retraso (1000);
En el mismo bucle vacío (), digitalWrite () se usa en el pin D13 donde está conectado el ánodo del LED. Dependiendo del valor en la salida variable, el LED se encenderá o apagará
digitalWrite (13, salida);
6. La parte más importante es crear una función de controlador de interrupciones de acuerdo con el nombre que se usa en la función attachInterrupt () .
Como se utilizan dos pines de interrupción 2 y 3, se requieren dos ISR. Aquí en esta programación se utilizan los siguientes ISR
buttonPressed1 ():
anular buttonPressed1 () { salida = BAJA; lcd.setCursor (0,1); lcd.print ("Interrupción 1"); }
Esta función se ejecuta cuando se presiona el botón en el pin D2 (BORDE ASCENDENTE). Esta función cambia el estado de la salida a BAJO, lo que hace que el LED se apague e imprima “interrupt1” en la pantalla LCD.
buttonPressed2 ():
anular buttonPressed2 () {salida = ALTA; lcd.setCursor (0,1); lcd.print ("Interrupción2"); }
Esta función se ejecuta cuando se presiona el botón en el pin D3. Esta función cambia el estado de la salida a ALTO haciendo que el LED se encienda e imprima la “interrupción2” en la pantalla LCD.
Demostración de interrupción de Arduino
1. Cuando se presiona el BOTÓN PULSADOR en el lado izquierdo, el LED se enciende y la pantalla LCD muestra Interrupt2.
2. Cuando se presiona el BOTÓN PUSH en el lado derecho, el LED se apaga y la pantalla LCD muestra Interrupt1
Así es como una interrupción puede ser útil para desencadenar cualquier tarea importante entre una ejecución normal.