Está en la página 1de 6

Capítulo 9 Timers Parte 1

El Arduino Nano y UNO posee tres Timers, el Timer0 que es de 8 bits, el Timer1
que es de 16 bits y el Timer2 que es de 8 bits.

Es muy común utilizar el Timer1 ya que el Timer0 lo utiliza el mismo Arduino para
generar los retardos de las funciones delay(), millis() y microSecond(), por tal
razón es muy poco probable que se use, a menos que se utilice para hacer los
retardos por el mismo programador, y así no usar dichas funciones, pero por lo
general no se utiliza dicho Timer0.

El Timer1 es más común utilizarlo, el cual se pudiera utilizar, tanto con una librería,
como también utilizando los Registros Internos del Arduino (Atmega328p) para su
configuración, lo cual trae como ventaja, que reduce el uso de memoria del Sketch,
se ejecuta más rápido el programa, y adicionalmente se puede configurar, de
manera de utilizar también otros pines del Arduino como Interrupciones Externas.

Se debe tener cuidado cuando se vaya a utilizar servomotores, ya que, si se van a


utilizar en nuestros proyectos, es muy probable que se utilice la Librería de Arduino
para tal fin y en la Librería de Arduino para los Servos utilizan el Timer1 y por lo
tanto no se puede utilizar el Timer1, si se van a manejar los Servos con la Librería
de Arduino.

El Arduino Nano y UNO posee también el Timer2 que es de 8 bits, pero en este
caso se debe trabajar con los Registros Internos del Arduino (Atmega328p) para su
configuración, el cual trabaja prácticamente igual al Timer0.
En la siguiente tabla se muestra algunas Interrupciones del Atmega328p, y por lo
tanto del Arduino Nano y UNO:

Interrupción del Timer1 usando la Librería de Arduino

Lo primero que se debe hacer es bajar la librería del Timer1, y para tal fin se
debe abrir el IDE de Arduino y utilizar la pestaña “Programa”, luego “Incluir
Librería” y finalmente se selecciona en “Administrar Bibliotecas”.
Al darle click al “Administrar Bibliotecas”, se abrirá el “Gestor de Librería” y se
colocará “Timerone” y se tendrá lo siguiente:

Entonces se le da click a Instalar a la que dice “TimerOne”.

Al ya tenerla Instalada le saldrá el Gestor de Librería como sigue:


Entonces lo primero que se debe colocar en el Sketch es la librería como se
muestra a continuación:

Luego se pasa a configurar el TimerOne en la parte del Setup de IDE:

Sintaxis:

Timer1.initialize(periodo);

El periodo se debe colocar en microsegundos. El valor de periodo lo que indica es


cada cuando tiempo se generará la Interrupción, entonces si el periodo toma un
valor de 500.000 microsegundos, entonces la interrupción debido al TimerOne se
activará cada 0,5 segundos que son los 500.000 micrsegundos. Esto se repitará
todo el tiempo mientras se tenga activada la interrupción del TimerOne.

Después se debe crear un Objeto como es común cuando utilizamos otras librerías,
en este caso la Sintaxis es la siguiente:

Timer1.attachInterrupt(ISR);

Donde “ISR” es la función donde se va a ir el Arduino cuando ocurra la


interrupción debido al TimerOne. El Arduino dejará de hacer cualquier actividad
que esté realizando en el “Loop” y se va a atender a la Rutina de Servicio de
Interrupciones (ISR), el nombre de la función “ISR” puede darle cualquier nombre
el programador, solo debe cuidar que no sea un nombre Reservado en el Arduino.
Se muestra un ejemplo donde se manda a activar la Interrupción del “TimerOne”
cada 500.000 microsegundos, que es 0,5 segundos, en la cual mandará a imprimir
por el puerto serial un mensaje indicando que “Se activó la Interrupción”, mientras
tanto en el “Loop” se hará que se prendan y se apaguen dos leds cada 3 segundos,
y así observar que mientras ocurren los delay() en la función “Loop” igualmente se
activa la Interrupción del “TimerOne”.

La función (ISR) que se llama o se invoca cuando ocurre la interrupción, se le


colocará el nombre de “Mensaje” (recuerde que lo puede llamar como el
programador desee).

El Sketch queda de la siguiente manera:


En el Sketch se ve una variable que se Time, que se define como “Volatile” y esto es
porque cuando se utiliza una variable en la función (ISR) que llama la Interrupción,
se recomienda definirla con este tipo de variable.

También podría gustarte