Microcontroladores
Interrupciones
ArduinoUno
Juan R Vizcaya R
Agosto de 2022
Las Interrupciones
● Una interrupción es un evento que ocurre en cualquier momento
(asincróno), y hace que el microcontrolador interrumpa la
ejecución del programa en curso y salta a una direccion
preestablecida, en la tabla de vectores de Interrupción, alojada el
la memoria de programa FLASH y ejecuta una subrutina
denominada, Rutina de servicio a la Interrupción(R.S.I).
● Una vez finalizada la R.S.I, el microntrolador continua con el
programa principal.
● Las Interrupciones pueden ser externas o internas. Las externas
son estimulos provenientes del mundo real y captadas por el
microcontrolador a través de sus perifericos. Las internas
provienen del CPU, la memoria y de los recursos hardware tales
como: contadores, temporizadores, convertidores A/D, el puerto
serial entre otros.
Esquema de una interrupción
Mapa de Memoria
Memoria de Programa
● Espacio continuo de memoria
Flash de 16 bits , de 32Kb( 16K
x16) en el Atmega328P de
0x0000 a 0x3FFF.
● La memoria Flash soporta
10.000,00 ciclos de lectura y
escritura.
● La memoria se puede
particionar para disponer de un
sector de arranque para auto-
programación.(BootLoader)
Vectores de Interrupción Atmega328P
●
El Atmega328P tiene
26 fuentes de
interrupción externas e
internas, tal como se
muestra en la tabla
●
La maxima prioridad la
tiene el RESET, Vector
No. 1 luego el Vector
No. 2 y asi
sucesivamente.
●
Cuando ocurren dos
interrupciones
simultaneamente se
ejecuta la de mayor
prioridad.
Interrupciones Externas
● En la figura, se muestran las caracteristicas de la señal externa, que
generan las interrupciónes.
Flanco de subida Flanco de bajada
Interrupciones Externas
Las interrupciones externas. se configuran para que respondan a uno
de los siguientes eventos:
● LOW, la interrupción externa se dispara por la detección de un nivel de
voltaje bajo, LOW (0V), en el pin asignado a dicha interrupción.
● HIGH, la interrupción externa se dispara por la detección de un nivel
de voltaje bajo, HIGH (5V), en el pin asignado a dicha interrupción.
Solo para Arduino Due, Zero y MKR1000.
● CHANGE, la interrupción externa se dispara por la detección de un
cambio en el nivel de voltaje, de LOW(0V) a HIGH(5V) o de HIGH(5V)
a LOW(0V).
● RISING, la interrupción externa se dispara por la detección de un
flanco de subida.
● FALLING, la interrupción externa se dispara por la detección de un
flanco de bajada.
Tipos de Interrupciones Externas
● Interrupciones externas del Tipo INT, asignadas a un pin especifico del
microcontrolador. Tal como se muestra en la figura:
Tipos de Interrupciones Externas
● Interrupciones externas del Tipo INT, en el Arduino UNO, se muestra
en la figura:
Tipos de Interrupciones Externas
● Interrupciones externas del Tipo PCINT, Pin Change Interrupt,
asignadas a un grupo de pines o un puerto del microcontrolador.
● CHANGE, la interrupción externa PCINTse dispara por la detección de
un cambio en el nivel de voltaje, de LOW(0V) a HIGH(5V) o de
HIGH(5V) a LOW(0V), de cualquier pin del grupo o puerto. Todos los
pines que pertenecen a un puerto, comparten una unica Rutina de
Servicion a la Interrupción.
Tipos de Interrupciones Externas
● Interrupciones externas del Tipo PCINT, en el ARDUINO UNO se
muestra en la figura
Procedimiento general para configurar
Interrupciones
● Se desabilitan las interrupciones globales.
● Se configuran los atributos de la interrupcion externa particular, o se
configura el periferico interno para que genere una interrupción.
● Se habilita la interrupcion individual.
● Se habilitan las interrupciones globales.
Interrupciones
en Arduino
● El lenguaje de programacion Arduino, solo tiene implementadas la
interrupciones externas tipo INT.
● Las interrupciones externas tipo PCINT, no son implentadas por el
lenguaje de programacion Arduino. La comunidad de usuarios a traves
de librerias hacen posible su utilización.
● Las interrupciones internas, generadas por los perifericos internos, no
son implentadas por el lenguaje de programacion Arduino. La
comunidad de usuarios a traves de librerias, hacen posible su
utilización.
Interrupciones Externas
en Arduino
● noInterrupts (), deshabilita las interrupciones globales.
● interrupts (), habilita las interrupciones globales.
● attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)
– digitalPinToInterrupt(pin), regresa el numero de interrupcion,
asociada a un pin del microcontrolador.
– ISR, rutina de servicio a la interrupción, se ejecuta cuando ocurre la
interrupción. Para intercambiar datos entre la ISR y el programa
principal, se hace a traves de una variable declarada volatile.
– mode, se selecciona el atributo de la señal externa que va a
generar la interrupción: LOW, CHANGE, RISING, FALLING.
HIGH en Arduino Due, Zero y MKR1000.
● detachInterrupt(digitalPinToInterrupt(pin)), deshabilita la interrupción,
asignada al pin.
EJEMPLO
● El programa que se muestra en la figura, desarrollado con el IDE de
Arduino, realiza las siguientes acciones:
● Habilita la detección de Interrupciones por flanco de bajada, en los
pines 2 y 3 de Arduino Uno.
● Al presionar el pulsador Interrupción 0, se dispara la interrupción 0 y
muestra en el Virtual Terminal de Proteus el mensaje INT0.
● Al presionar el pulsador Interrupción 1, muestra en el Virtual
Terminal de Proteus el mensaje INT1.
● Realice la Simulación en Proteus usando el circuito de la figura.
Programa ejemplo
Circuito en Proteus
ACTIVIDAD
● Modificar el programa anterior, desarrollado con el IDE de Arduino,
para agregar las siguientes acciones:
● Al presionar el pulsador Interrupción 0 y el pulsador interrupción 1 por
10 veces o mas, se muestre en el Virtual Terminal de Proteus el
mensaje ” Fin de las interrupciones Externas ”.
● Deshabilitar las Interrupciones globales.
● Eliminar la asignacion de la interrupción externa a los pines 2 y 3 con
el comando detachInterrupt(digitalPinToInterrupt(pin)).
● Leer la entrada 2 y mostrar en el Virtual Terminal de Proteus el
mensaje ” Entrada pin 2”.
● Leer la entradas 3 y mostrar en el Virtual Terminal de Proteus el
mensaje ” Entrada pin 3”.
● Realice la Simulación en Proteus usando el circuito de la figura
anterior.
Decanato de Extension
Simulación en Proteus
Gracias