• 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 ?