Está en la página 1de 14

CL307 - SISTEMAS DIGITALES I

ARDUINO

M.Sc. Antony Villegas Quiñones


Estructura del tema

• PWM
• Interrupciones
PWM

• Pulse Wide Modulation (Modulación por Ancho de Pulso)

• Funciona con los pines con el símbolo ~ 3,5,6,9,10 y 11. Se configura


la salida como analógica y se envían valores entre 0 y 255 siendo
estos valores la modificación del ciclo de trabajo.

• La duración de cada intervalo es la inversa de la frecuencia del PWM


(500Hz), dando una duración de 2 milisegundos. Esto se observa en
las líneas verdes.
PWM
Ejemplo 02
Cabecera

Configuro mi Arduino

Encender Led con Brillo


No

Aumentar Brillo en 1

Esperar 10ms

Brillo == 0 || 255 ??
Si
Aumento= - Aumento
Ejemplo 02
Interrupciones

• Es la ejecución de una rutina con líneas de programa únicamente


llamados o activados cuando se ejecuta una llamada de interrupción
ya sea interna o externa. Tras haberse procesado dicha rutina, se
regresa a la posición donde fue interrumpido del programa principal.

• El Arduino UNO puede utilizar máximo dos interrupciones.

• EL hecho de interrumpir el programa principal para atender al


llamado de interrupciones ocasiona que los datos recibidos durante la
interrupción se pierdan.
Interrupciones

• El Arduino UNO tiene dos tipos de interrupciones:

• Externas: los pines de interrupción externa son INT0 y INT1, asignadas


a los pines 2 y 3. Cuando se produce un cambio en el estado lógico
del pin_2 y/o pin_3 se activa dicha interrupción. Estas interrupciones
pueden activarse en subidas o bajadas de señal, en bajo nivel o en
alto. Las activaciones son interpretadas por el hardware y a gran
velocidad.
Interrupciones

• Las activaciones se dan a continuación:

• LOW: activa el interruptor cuando el nivel lógico es 0


• CHANGE: activa el interruptor cuando hay un cambio de nivel lógico,
independientemente del estado lógico previo.
• RISING: activa el interruptor con flancos positivos, que ocurren
cuando el nivel lógico cambia de 0 a 1.
• FALLING: activa el interruptor con flancos negativos, que ocurren
cuando el nivel lógico cambia de 1 a 0.
Ejemplo 03
Interrupciones

• Es necesario setear la variable estado como “volatile”, para que el


compilador use la RAM en vez de un registro de almacenamiento.
Esto debido a que el registro de almacenamiento puede ser
temporalmente impreciso si es modificado por áreas diferentes a las
del programa principal.

• Este tipo de variable se caracteriza porque su valor puede ser


modificado por algo fuera de la sección del código en el que aparece,
en otras palabras, por una función externa como una interrupción.

• Si la variable no esta definida como volátil, la rutina de interrupción


no podría modificarla como es deseado.
Interrupciones
• Igualmente necesario es setear el Arduino para activar el uso de la
interrupción. Esto lo hacemos con attachInterrupt() el cual especifica la
función a unvocar cuando se produce una interrupción externa.

• attachInterrupt(nint, nfuncion, modo)

• nint: numero de interrupción, 0 si utilizamos el pin 2, 1 si utilizamos el pin 3

• nfuncion: nombre de la función a invocar con la interrupción

• modo: es el evento que provoca la interrupción


Interrupciones
• Si se desea ignorar todas las interrupciones, se debe realizer un
llamado al metodo noInterrupts()

• Cuando termine el codigo sensible a las interrupciones, se puede


reiniciar las interrupciones con el metodo interrupts()
Preguntas ?