Читать книгу Aprender Arduino, prototipado y programación avanzada con 100 ejercicios - Rubén Beiroa Mosquera - Страница 21

012 Interrupciones por tiempo Timer2 y 3

Оглавление

A continuación se estudiarán diferentes soluciones con el objetivo de sacar el máximo rendimiento a los Timers:

•El hecho de utilizar un único Timer no significa que solo podamos hacer una única temporización. Si buscamos la base de tiempo adecuada, podemos hacer multitud de temporizaciones; por ejemplo, hacer que 3 leds parpadeen a un ritmo diferente. En este caso , el led conectado al pin 13 parpadea cada segundo, el del pin 12 cada 2 segundos y el del pin 11 cada 4 segundos.

•Otro posible uso es limitar el número de temporizaciones; por ejemplo, para que se repita un número determinado de veces o debido a algún tipo de evento externo. Por ejemplo, si el valor de un sensor supera un umbral, se debe encender un led que empiece a parpadear cada segundo .

•Cuando utilizamos <<analogWrite()>>, se genera una señal PWM en el pin y, con el ciclo de trabajo indicado, esto funciona gracias a los Timers. Entonces, en el Arduino UNO, tenemos tres Timers y 6 salidas PWM. El Timer1 se encarga de generar las señales PWM de los pines 9 y 10, pero hasta ahora teníamos una serie de limitaciones:

•El valor del ciclo de trabajo tenía que estar comprendido entre 0 y 255.

•No podíamos cambiar la frecuencia de la señal PWM.

Con la librería TimerOne, tenemos los recursos necesarios para eliminar estas limitaciones:

•Podemos fijar la frecuencia de una señal PWM con la instrucción <<Timer1.initialize()>> (lo que realmente hacemos es configurar el periodo, pero la frecuencia es la inversa de este) y, con la instrucción <<Timer1.pwm(,)>>, indicamos el pin y el periodo de trabajo de la señal. En el caso del Arduino UNO, esto funcionaría en los pines 9 y 10 .

•Para programar los Timers 2 y 3, necesitamos las librerías MsTimer2 y TimerThree, respectivamente.

La libería MsTimer2 solo permite 3 acciones:

•Configuración del tiempo para la interrupción <<MsTimer2::set()>>.

•Activar interrupción <<MsTimer2::start()>>.

•Desactivar interrupción <<MsTimer2::stop()>>.

•En el siguiente caso se usarán estas tres instrucciones para que un led parpadee 10 veces cada medio segundo.

En cuanto a la libería TimerThree, tenemos las mismas acciones que en la librería TimerOne :

•Pero, según la documentación de Arduino, esta librería solo funcionaría para el caso en el que trabajemos con el Arduino Mega (http://playground.arduino.cc/Code/Timer1).

Con esta última librería, acabamos de ver todo lo referente a las interrupciones temporales; con la utilización de interrupciones, podemos mejorar el rendimiento de nuestros programas y hacer que funcionen como si de un sistema multitarea se tratase.






Aprender Arduino, prototipado y programación avanzada con 100 ejercicios

Подняться наверх