Arduino Timer Tutorial
Arduino Timer Tutorial
Si bien está bien comenzar con Arduino, es importante moverse lentamente en los microcontroladores
principales como AVR, ARM, PIC, STM, etc. y programarlo utilizando sus aplicaciones nativas. Esto se
debe a que el lenguaje de programación Arduino es muy fácil de entender, ya que la mayor parte
del trabajo se realiza mediante funciones preconstruidas como digitalWrite(), AnalogWrite(), Delay()
etc. mientras que el lenguaje de máquina de bajo nivel está oculto detrás de ellos. Los programas
Arduino no son similares a otras codificaciones integradas C donde tratamos con bits de registro y los
hacemos altos o bajos en función de la lógica de nuestro programa.
Por lo tanto, para entender lo que está sucediendo dentro de las funciones pre-construidas tenemos
que cavar detrás de estos términos. Por ejemplo, cuando se utiliza una función delay() establece
los bits Timer y Counter Register del microcontrolador ATmega.
En este tutorial del temporizador arduino vamos a evitar el uso de esta función delay() y en su lugar
tratar con los propios registros. Lo bueno es que puedes usar el mismo IDE Arduino para esto.
Estableceremos nuestros bits de registro del temporizador y usaremos la interrupción de
desbordamiento del temporizador para alternar un LED cada vez que se produzca la
interrupción. El valor del precargador del bit Timer también se puede ajustar mediante pulsadores
para controlar la duración en la que se produce la interrupción.
Temporizador0:
Temporizador1:
Timer2:
Este registro contiene los bits de control principales del temporizador y se utiliza para controlar los
preescaladores del temporizador. También permite controlar el modo de temporizador utilizando los
bits WGM.
Formato de fotograma:
TCCR1
7 6 5 4 3 2 1 0
A
TCCR1B 7 6 5 4 3 2 1 0
Prescaler:
El CS12, CS11, CS10 bits en TCCR1B fija el valor del preescalar. Se utiliza un preescalador para
configurar la velocidad del reloj del temporizador. Arduino Uno tiene preescaladores de 1, 8, 64, 256,
1024.
Este registro se utiliza para controlar el valor del contador y para establecer un valor de precargador.
Fórmula para el valor del precargador para el tiempo requerido en segundo lugar:
Cada vez que el temporizador alcanza su valor máximo, digamos, por ejemplo (16 Bit-65535), se
produce la interrupción de desbordamiento del temporizador. Por lo tanto, se llama a una rutina de
servicio de interrupción ISR cuando el bit de interrupción de desbordamiento del temporizador
habilitado en el TOIEx presente en la máscara de interrupción del temporizador registra TIMSKx.
Formato ISR:
ISR(TIMERx_OVF_vect)
Componentes requeridos
Arduino UNO
Pulsadores (2)
LED (de cualquier color)
Resistencia de 10 k (2), 2.2k (1)
Pantalla LCD 16x2
Diagrama de circuitos
Conexiones de circuito entre Arduino UNO y pantalla LCD 16x2:
LCD
Arduino UNO
16x2
Vss Gnd
Vdd +5V
RS 8
Rw Gnd
E 9
D4 10
D5 11
D6 12
D7 13
Un +5V
K Gnd
Dos pulsadores con resistencias pull down de 10K están conectados con los pines Arduino 2 y 4 y un LED
está conectado al PIN 7 de Arduino a través de una resistencia de 2.2K.
Como 16x2 LCD se utiliza en el proyecto para mostrar el valor del precargador, por lo que se utiliza la
biblioteca de cristal líquido.
#include<LiquidCrystal.h>
El pin de ánodo LED que está conectado con arduino pin 7 se define como ledPin.
#define ledPin 7
A continuación, el objeto para acceder a la clase Liquid Crystal se declara con los pines LCD (RS, E, D4,
D5, D6, D7) que están conectados con Arduino UNO.
LiquidCrystal lcd(8,9,10,11,12,13);
A continuación, establezca el valor del precargador 3035 durante 4 segundos. Compruebe la fórmula anterior
para calcular el valor del precargador.
A continuación, en void setup(), primero establezca la pantalla LCD en modo 16x2 y muestre un mensaje de
bienvenida durante unos segundos.
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("ARDUINO TIMERS");
delay(2000);
lcd.clear();
A continuación, establezca el pin LED como pin OUTPUT y los pulsadores se establecen como pines
INPUT
pinMode(ledPin, OUTPUT);
pinMode(2,INPUT);
pinMode(4,INPUT);
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = value;
interrupts();
Ahora escriba el ISR para la interrupción de desbordamiento del temporizador que es responsable de
encender y apagar el LED usando digitalWrite. El estado cambia cada vez que se produce la interrupción de
desbordamiento del temporizador.
ISR(TIMER1_OVF_vect)
{
TCNT1 = value;
digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
}
En el bucle void() el valor del precargador se incrementa o decremente mediante el uso de las entradas del
pulsador y también el valor se muestra en 16x2 LCD.
if(digitalRead(2) == HIGH)
{
value = value+10; //Incement preload value
}
if(digitalRead(4)== HIGH)
{
value = value-10; //Decrement preload value
}
lcd.setCursor(0,0);
lcd.print(value);
}
Así es como un temporizador se puede utilizar para producir retraso en el programa Arduino. Compruebe
el siguiente vídeo en el que hemos demostrado el cambio de retardo aumentando y disminuyendo el valor
del precargador mediante pulsadores.
Código
#include<LiquidCrystal.h> //LCD display library
#define ledPin 7
LiquidCrystal lcd(8,9,10,11,12,13);
void setup()
{
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("ARDUINO TIMERS");
delay(2000);
lcd.clear();
pinMode(ledPin, OUTPUT);
pinMode(2,INPUT);
pinMode(4,INPUT);
noInterrupts(); // disable all interrupts
TCCR1A = 0;
TCCR1B = 0;
void loop()
{
if(digitalRead(2) == HIGH)
{
value = value+10; //Incement preload value
}
if(digitalRead(4)== HIGH)
{
value = value-10; //Decrement preload value
}
lcd.setCursor(0,0);
lcd.print(value);
}
Video
Arduino Timer Tutorial - What are timers & how to use them in Arduino - YouTube