Professional Documents
Culture Documents
Una peticin de interrupcin IRS ("Interrupt Request Service") es una seal que se origina
en un dispositivo hardware (por ejemplo, un perifrico), para indicar al procesador que algo
requiere su atencin inmediata; se solicita al procesador que suspenda lo que est haciendo
para atender la peticin.
Las interrupciones juegan un papel fundamental, en especial en la operacin de
dispositivos E/S. Sin ellas el sistema debera chequear constantemente los dispositivos
para comprobar su actividad, pero las interrupciones permiten que los dispositivos puedan
permanecer en silencio hasta el momento que requieren atencin del procesador. Podra
figurarse un sistema telefnico donde hubiera que levantar peridicamente el auricular
para comprobar si alguien nos llama?
En el Arduino UNO, hay dos interrupciones externas disponibles. Estos se encuentran en
los pines digitales 2 y 3 de la placa Arduino UNO, aunque estas interrupciones se llaman 0 y
1.
Las interrupciones externas (INT0 e INT1) de arduino pueden ejecutarse porque la seal de
entrada de un pin est:
Interrupciones
En este ejemplo veremos como acta la interrupcin externa (int0)
del pin 2. Cuando pulsemos el pulsador el led se apagar y cuando
lo soltemos se encender. Para poder apreciar la diferencia se
programar el ejercicio 2 veces. Al principio se har sin
interrupciones y tras ver como responde se volver a hacer el mismo
ejercicio con la interrupcin arriba mencionada.
Hardware Necesario
Placa Arduino
Pulsador
LED
Resistecia de 330 ohms
Resistecia de 10K ohms
Circuito
imagen desarrollada utilizando Fritzing. Para mas circuitos de ejemplo, visita la pgina del proyecto
Fritzing
Conectar el
10K ohm. El
pin digital
extremo del
El pin digital 4 hay que conectarlo a la pata larga del diodo (el
nodo) y la corta mediante una resistencia de 330 ohm en serie a
masa.
E s qu e ma
C o de
Cuando el pulsador est en estado de reposo el led est apagado,
pero al pulsar el pulsador se apaga. Al final del programa hay un
bucle donde pierde el tiempo ya que se supone que hace alguna
funcin compleja que requiere mucho tiempo. Este hecho produce que
cuando el pulsador cambia de estado, el led no lo har a la vez.
Normalmente habr que mantener cierto tiempo el pulsador en su
nueva situacin para que el programa salga del bucle complejo y
cambie la situacin del led.
int pbIn = 2;
int ledOut = 4;
int state = LOW;
void setup()
{
// Set up the digital Pin 2 to an Input and Pin 4 to an Output
pinMode(pbIn, INPUT);
pinMode(ledOut, OUTPUT);
}
void loop()
{
state = digitalRead(pbIn);
digitalWrite(ledOut, state);
{
// do nothing but waste some time
delay(10);
}
}
Nota
Dentro de la funcin enlazada, la funcin delay() no funciona y el
valor devuelto por la funcin millis() no se incrementar. Los
datos serie recibidos en el transcurso de esta interrupcin pueden
perderse. Deberas declarar como voltil cualquier variable que
modifiques dentro de la funcin.
RISING para disparar la interrupcin cuando el pin pase de valos alto (HIGH) a
bajo (LOW).
FALLING para cuando el pin cambie de valor alto (HIGH) a bajo (LOW)
Retorno
Ninguno
Nota
Dentro de la funcin enlazada, la funcin delay() no funciona y el valor devuelto por la
funcin millis() no se incrementar. Los datos serie recibidos en el transcurso de esta
interrupcin pueden perderse. Deberas declarar como voltil cualquier variable que
modifiques dentro de la funcin.
Usando las interrupciones
Las interrupciones son tiles para hacer que las cosas sucedan automticamente en
programas para microcontroladores, y puedan ayudar a resolver problemas de
temporizacin. Una buena tarea en la que utilizar interrupciones podra ser leer un encoder
rotacional, monitorizando la entrada del usuario.
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, parpadeo, CHANGE);
}
void loop()
{
digitalWrite(pin, estado);
}
void parpadeo()
{
estado = !estado;
}
noInterrupts()
Descripcin
Desactiva las interrupciones (pueden reactivarse usando interrupts()). Las interrupciones
permiten que las operaciones importantes se realicen de forma transparente y estn
activadas por defecto. Algunas funciones no funcionarn y los datos que se reciban sern
ignorados mientras que las interrupciones estn desactivadas. Las interrupciones pueden
perturbar ligeramente el tiempo de temporizado, sin embargo puede que sea necesario
desactivarlas para alguna parte crtica del cdigo.
P a r me t r o s
Ninguno
Devuelve
Nada
E j e m pl o
void setup() {}
void loop()
{
noInterrupts();
// Cdigo dependiente crticamente del tiempo
interrupts();
// resto del cdigo aqu
}
interrupts()
Descripcin
Activa las interrupciones (despus de haberlas desactivado con noInterrupts(). Las
interrupciones permiten que se ejecuten ciertas tareas en segundo plano que estn
activadas por defecto. Algunas funciones no funcionarn correctamente mientras las
interrupciones estn desactivadas y la comunicacin entrante puede ser ignorada. Las
interrupciones pueden perturbar ligeramente la temporizacin en el cdigo y deben ser
desactivadas slo para partes particularmente crticas del cdigo.
P a r me t r o s
Ninguno
Devuelve
No devuelve nada
E j e m pl o
void setup() {}
void loop()
{
noInterrupts();
detachInterrupt(interrupt)
Descripcin
Apaga la interrupcin dada.
P a r me t r o s
interrupt: el nmero de interrupcin a invalidar (0 o 1).