20/07/2010
La librería TimerOne para Arduino es una herramienta fundamental para controlar temporizaciones precisas y gestionar eventos en tus proyectos. A diferencia del temporizador integrado timer0, que suele estar en uso por el propio entorno de Arduino, TimerOne te proporciona acceso completo al temporizador timer1del microcontrolador AVR, abriendo un entorno de posibilidades para la programación de tareas temporizadas.
![[Embedded] How to use TimerOne library in Arduino IDE](https://i.ytimg.com/vi/wnCeowBU2V4/hqdefault.jpg)
Funciones Clave de TimerOne
La librería TimerOne ofrece un conjunto de funciones para configurar y controlar el temporizador timer1de forma sencilla. Estas funciones permiten:
- Configuración de la fuente de reloj: Selecciona la velocidad del reloj del temporizador usando prescalares (división del reloj principal). Esto te permite ajustar la precisión y resolución de las temporizaciones.
- Temporización con interrupciones: Configura TimerOne para generar interrupciones de forma periódica, lo que permite ejecutar código a intervalos regulares sin bloquear el bucle principal (
loop()). - Modos de comparación de salida (Output Compare): Configura el temporizador para generar señales PWM (modulación de ancho de pulso) o activar pines de salida a intervalos específicos. Es ideal para controlar la velocidad de motores, atenuar LEDs o generar señales de control.
- Captura de entrada (Input Capture): Permite capturar el tiempo preciso en que ocurre un evento externo en un pin, ideal para mediciones de tiempo con alta resolución.
Instalación de la Librería TimerOne
Para utilizar TimerOne, debes instalarla en tu entorno Arduino IDE. La manera más común es a través del gestor de librerías:
- Abre el IDE de Arduino.
- Ve a Sketch > Incluir librería > Administrar librerías...
- Busca " TimerOne " en el buscador.
- Selecciona la librería de Paul Stoffregen y haz clic en "Instalar".
Una vez instalada, podrás incluirla en tus proyectos mediante la directiva #include
Ejemplos de Uso de TimerOne
Generación de una señal PWM
Este ejemplo muestra cómo generar una señal PWM usando TimerOne para controlar la velocidad de un motor o la intensidad de un LED:
#include <TimerOne.h>void setup() { pinMode(9, OUTPUT); // Pin para la señal PWM Timerinitialize(1000); // Inicializa el temporizador para 1ms (1kHz) Timerpwm(9, 512); // Genera una señal PWM con un duty cycle del 50% en el pin 9}void loop() { // Tu código principal aquí...}En este código, Timerinitialize(1000)configura el temporizador para un periodo de 1 milisegundo, generando una frecuencia de 1kHz. Timerpwm(9, 512)establece el pin 9 como salida PWM con un duty cycle de 50% (512 es la mitad de 1024, la resolución de 10 bits del temporizador).
Temporizador con interrupciones
Este ejemplo muestra cómo usar las interrupciones de TimerOne para ejecutar una función a intervalos regulares:
#include <TimerOne.h>void setup() { Timerinitialize(1000); // Inicializa el temporizador para 1ms (1kHz) TimerattachInterrupt(funcionInterrupt); // Asocia la función a la interrupción}void funcionInterrupt() { // Código a ejecutar cada 1ms // ...}void loop() { // Tu código principal aquí...}En este caso, TimerattachInterrupt(funcionInterrupt)asocia la función funcionInterrupta la interrupción generada por TimerOne. Esta función se ejecutará cada 1 milisegundo sin bloquear el bucle principal.
Medición de tiempo con alta resolución
Aquí te mostramos cómo medir un evento externo con alta precisión utilizando el modo de captura de entrada:
#include <TimerOne.h>volatile unsigned long tiempoEvento;void setup() { pinMode(8, INPUT_PULLUP); // Pin de entrada para la señal del evento Timerinitialize(1024); // Inicializa con prescaler para alta resolución TimerattachInterrupt(capturarTiempo); // Captura del tiempo en la interrupción}void capturarTiempo() { tiempoEvento = Timercapture();}void loop() { // ...}En este ejemplo, el pin 8 es configurado como entrada, y cada vez que se detecte una señal en este pin, la función capturarTiempolee el valor del contador del temporizador timer1usando Timercapture(), proporcionando la marca de tiempo precisa del evento.
Tabla Comparativa de Temporizadores en Arduino
A continuación, una tabla que compara los temporizadores disponibles en las placas Arduino:

| Temporizador | Bits | Frecuencia Máxima | Prescalares | Funciones |
|---|---|---|---|---|
| Timer0 | 8 | Relativamente Baja | Limitados | Temporización básica, PWM de baja resolución |
| Timer1 | 16 | Alta | Varios | Temporización de alta resolución, PWM, captura de entrada, comparación de salida |
| Timer2 (en algunas placas) | 8 | Relativamente Baja | Limitados | Similar a Timer0 |
Consultas Habituales sobre TimerOne
- ¿Cómo configurar la frecuencia del TimerOne? La frecuencia se configura al inicializar el temporizador con
Timerinitialize(periodoMicros), dondeperiodoMicroses el periodo deseado en microsegundos. - ¿Qué prescaler debo utilizar? La elección del prescaler depende de la precisión y la frecuencia de funcionamiento deseadas. Un prescaler mayor disminuye la frecuencia, pero aumenta la resolución.
- ¿Cómo manejar las interrupciones? Las interrupciones se gestionan mediante la función
TimerattachInterrupt(), que asocia una función a la interrupción del temporizador. - ¿Puedo usar TimerOne junto con otras funciones del Arduino? Sí, pero ten en cuenta que las interrupciones de TimerOne pueden interferir con otras funciones si no se gestionan correctamente.
Consideraciones Finales
La librería TimerOne es una herramienta poderosa para controlar temporizaciones precisas y gestionar eventos en tus proyectos Arduino. Su flexibilidad y facilidad de uso la convierten en una opción ideal para una gran variedad de aplicaciones, desde la generación de señales PWM hasta la medición de tiempo con alta resolución. Recuerda consultar la documentación completa de la librería para explorar todas sus funcionalidades y opciones de configuración.
Si quieres conocer otros artículos parecidos a Librería timerone h arduino puedes visitar la categoría Libros y Librerías.
