Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Un evento programado o Timer. Son las interrupciones habitualmente y a los que ni siquiera el software era capaz de
asociadas a los timers y gracias a ellas funciona millis()[1]. reaccionar. Para las interrupciones externas o hardware, solo
hay dos pines que las soportan en los ATmega 328 (p.e.
Excepciones: Son aquellas que se producen de forma síncrona Arduino UNO), son las INT0 y INT1 que están mapeadas a los
a la ejecución del procesador típicamente causada por una pines 2 y 3. Estas interrupciones se pueden configurar con
condición de error en un programa. Normalmente son causadas disparadores en RISING o FALLING para flancos o en nivel
al realizarse operaciones no permitidas tales como la división LOW. Los disparadores son interpretados por hardware y la
entre 0, el desbordamiento, el acceso a una posición de memoria interrupción es muy rápida. El Arduino mega tiene más pines
no permitida, etc.[1]. disponibles para interrupciones externas. Pines de External
Interrupts para Mega: 2 (interrupt 0), 3 (interrupt 1), 18
III. INTERRUPCIONES EN ARDUINO (interrupt 5), 19 (interrupt 4), 20 (interrupt 3), and 21 (interrupt
2). Estos pines pueden ser configurados para disparar una
Internamente, Arduino (mejor dicho, el microcontrolador
interrupción al detectar un nivel bajo, un flanco ascendente, un
AtMega) tiene ciertas interrupciones configuradas que lanza
flanco descendente o un cambio de nivel [1].
según la situación. Para la transmisión de datos a través del
puerto serie, para reiniciar la placa antes de cargar un programa, Tabla de pines que soportan interrupción HW en Arduino:
UNIVERSIDAD TÉCNICA DEL NORTE 3
CARRERA DE INGENIERÍA ELECTRICA
Tabla de interrupciones y número de pin asociado: La mejor manera de aprender es poniendo en práctica lo
aprendido en la teoría. Para ello lo que vamos a hacer es el típico
sketch con las luces del coche fantástico. En este caso vamos a
controlar la velocidad con la que se mueve a través de
dos pulsadores.
B. Circuito eléctrico
Vamos a necesitar el siguiente material:
Ilustración 3: Interrupciones y pines Arduino.
interrupciones relacionadas con los timers y que también son Cables macho/macho
denominadas interrupciones de eventos programados. Arduino
Cada pulsador irá conectado a un pin y tendrán una resistencia
tiene tres timers. Son el timer cero, timer uno, timer dos.Timer
pull-down. Esto hará que, en estado normal, sin pulsar, el pin
cero y dos son de 8 bits y el temporizador uno es de 16 bits.
tengamos un estado bajo. Cuando el pulsador se active
Crearemos una interrupción interna utilizando la interrupción
tendremos un estado alto. Por lo tanto, debemos de detectar un
de un temporizador. Para ello necesitaremos una librería
cambio de estado de bajo a alto (RISING). Por otro lado, los
adecuada para el temporizador que usemos. Podemos crear tres
LEDs van a hacer una secuencia de encenderse y apagarse de
tipos de interrupción interna, son interrupción de
izquierda a derecha y de derecha a izquierda. Simula las luces
desbordamiento de temporizador (timer overflow), interrupción
del coche fantástico. Empezaremos con una velocidad y según
de comparación de salida (Output Compare Match Interrupt),
vayamos pulsando los pulsadores se irá aumentando o
interrupción de captura de entrada (Timer Input Capture
disminuyendo la velocidad.
Interrupt) [1].
UNIVERSIDAD TÉCNICA DEL NORTE 4
CARRERA DE INGENIERÍA ELECTRICA
C. El esquema eléctrico es el siguiente. // Solo para el segundo pin y consecutivos apagamos el pin
anterior
// En el caso de 0 no hace falta ya que por defecto está
apagado
// Cuidado que nos salimos del rango del array 0-1=-1 no
existe este elemento
if (i > 0)
{
// Apagamos el LED a la izquierda
digitalWrite(leds[i - 1], LOW);
}
Ilustración 4: Ejercicio de Interrupciones. // Apagamos el último LED encendido, el elemento 5 del array
digitalWrite(leds[4], LOW);
D. Programación del sketch de interrupciones con Arduino
// Recorremos el array en sentido inverso de derecha a
// Variable global de velocidad izquierda
volatile int velocidad = 20; for (int i = 4; i >= 0; i--)
// Constantes de velocidad máxima, mínima y cuanto aumenta {
const int maxima = 1000; // En el primer caso como ya está apagado el LED no
const int minima = 20; hacemos nada
const int aumenta = 20; // Cuidado que nos salimos del rango del array 4+1=5 no
existe este elemento
// Array con los números de los pines donde están conectados if (i < 4)
// los LEDs de las luces del coche fantástico {
int leds[5] = {8, 9, 10, 11, 12}; // Apagamos el LED a la derecha
digitalWrite(leds[i + 1], LOW);
void setup() { }
// Inicializamos los pines de los LEDs como salida y a estado // Encendemos en el LED en el que estamos
bajo digitalWrite(leds[i], HIGH);
for (int i = 0; i < 5; i++)
{ // Esperamos el tiempo marcado por velocidad
pinMode(leds[i], OUTPUT); delay(velocidad);
digitalWrite(leds[i], LOW); }
}
// Apagamos el último LED encendido, el elemento 0 del array
// Asignamos la velocidad mínima digitalWrite(leds[0], LOW);
velocidad = minima;
}
// Configuramos los pines de interrupciones para que
// detecten un cambio de bajo a alto // ISR pin 2, disminuye la velocidad
attachInterrupt(digitalPinToInterrupt(2), velocidadMenos, void velocidadMenos()
RISING); {
attachInterrupt(digitalPinToInterrupt(3), velocidadMas, // Disminuimos el valor establecido
RISING); velocidad = velocidad - aumenta;
VII. CONCLUSIÓN
Se analizo el concepto deinterrupciones en Arduino Uno
dispone de dos interrupciones, 0 y 1, asociados a los pines