Aprender Arduino, prototipado y programación avanzada con 100 ejercicios. Rubén Beiroa Mosquera

Чтение книги онлайн.

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

Серия:
Издательство:
Aprender Arduino, prototipado y programación avanzada con 100 ejercicios - Rubén Beiroa Mosquera

Скачать книгу

una interrupción, el programa «saltará» desde la línea de código en donde se encuentre, ejecutará las líneas de código que haya dentro de la función de la interrupción y volverá a la línea del programa desde donde ha saltado y continuará con la ejecución normal del programa.

      ¿Qué ocurre si se da la circunstancia de que dos interrupciones suceden al mismo tiempo? Primero se debe decir que ese caso no es muy habitual, pero, dada esa circunstancia, existe lo que se conoce como «prioridades»; esto quiere decir que hay interrupciones que son más prioritarias que otras, por lo que se iría atendiendo los eventos de las más prioritarias para dejar para el final las menos prioritarias.

      Cada Arduino (en concreto, cada MCU) tiene su propia lista de prioridades. De hecho, la interrupción más prioritaria es la que atiende al reseteo de Arduino; esa es la más prioritaria de todas.

      También cabe mencionar que cada Arduino tiene más o menos pines, que permiten la programación de más o menos interrupciones que otros; puede llegar a ser una condición importante para decantarrnos entre un Arduino u otro ya que, si tenemos que atender a varios eventos críticos, lo recomendable es buscar un Arduino que, por hardware, permita programar todos esos eventos como interrupciones:

      •Uno, Nano, Mini o basados en el MCU 328 tienen 2 interrupciones, pines: 2, 3.

      •Micro, Leonardo o basados en el MCU 32u4 tienen 5 interrupciones, pines:0, 1, 2, 3, 7.

      •UNO WiFi y DUE tienen interrupciones para todos sus pines.

      •Mega, Mega2560 y MegaADK tienen 6 interrupciones, pines: 2, 3, 18, 19, 20, 21.

image image

       011

      Interrupciones por tiempo Parpadeo de un led

      En cuanto a la gestión de tiempo, ya hemos trabajo con las instrucciones delay, delayMicroseconds, millis y micros.

      Las interrupciones por tiempo vienen a sustituir a un delay o a un delayMicrosenconds; como ya es sabido, estas instrucciones lo que hacen es detener la ejecución de un programa durante un tiempo determinado: hasta ahora era la única forma que teníamos de ejecutar tareas temporales.

      El inconveniente de esta solución es que no se puede ejecutar otra tarea y, para muchas aplicaciones, será necesario la ejecución de tareas temporales pero también atender a otras tareas; pues bien, con las interrupciones temporales, conseguimos esto mismo.

      Al igual que ocurría con las interrupciones por señal, tenemos una función que se va a ejecutar sin ser llamada desde otra línea del programa y que, en este caso, lo hará cada cierto tiempo. El <<mecanismo>> que utiliza este tipo de interrupciones son los Timers; estos mecanismos son capaces de llevar el contaje de tiempo y podemos trabajar con ellos gracias a las diferentes librerías de las que disponemos.

      Cada Arduino tiene un determinado número de Timers; en concreto, el Arduino UNO tiene tres Timers. En este capítulo haremos un caso práctico utilizando el Timer 1 así que vayamos al gestor de librerías e instalemos image la librería correspondiente image:

      •La instrucción <<Timer1.attachInterrupt()>> define la función que se tiene que ejecutar.

      •Con la instrucción <<Timer1.initialize()>>, definimos cada cuánto tiempo se ejecuta la función del punto anterior. El tiempo se mide en microsegundos.

      •Con estas instrucciones ya podemos hacer, por ejemplo, que un led parpadee cada segundo sin necesidad de bloquear el programa image.

      Otras instrucciones de la librería TimerOne:

      •<<Timer1.setPeriod(microseconds)>> establece un nuevo tiempo de interrupción.

      •<<Timer1.start()>> arranca la interrupción con el nuevo tiempo.

      •<<Timer1.stop()>> detiene la temporización.

      •<<Timer1.restart()>> reinicia el temporizador.

      •<<Timer1.pwm(pin, duty)>> configura las PWM asociadas a este Timer.

      •<<Timer1.setPwmDuty(pin, duty)>> establece un nuevo tiempo para las señales PWM.

      •<<Timer1.disablePwm(pin)>> deshabilita la PWM.

      •<<Timer1.detachInterrupt()>> deshabilita la interrupción.

      No para todos los Timers tenemos las mismas instrucciones, ya que usamos diferentes librerías para trabajar con ellos y también existen diferencias entre ellos.

      Con un buen uso de este tipo de interrupciones, conseguiremos mejorar el rendimiento de nuestros programas.

image image image

       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 image, 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 image.

      •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

Скачать книгу