0% encontró este documento útil (0 votos)
689 vistas10 páginas

Arduino Timer Tutorial

Este documento describe el uso de temporizadores en Arduino. Explica que los temporizadores son una forma de medir intervalos de tiempo y generar interrupciones periódicas. Detalla los tres temporizadores en Arduino UNO y cómo configurarlos manipulando los registros de control y contador. Luego explica cómo usar la interrupción de desbordamiento del temporizador 1 para parpadear un LED a intervalos regulados al cambiar el valor de precarga. Finalmente, presenta un proyecto completo que usa temporizadores, pulsadores y LCD para controlar la duración del parpadeo

Cargado por

PierDonnee
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
689 vistas10 páginas

Arduino Timer Tutorial

Este documento describe el uso de temporizadores en Arduino. Explica que los temporizadores son una forma de medir intervalos de tiempo y generar interrupciones periódicas. Detalla los tres temporizadores en Arduino UNO y cómo configurarlos manipulando los registros de control y contador. Luego explica cómo usar la interrupción de desbordamiento del temporizador 1 para parpadear un LED a intervalos regulados al cambiar el valor de precarga. Finalmente, presenta un proyecto completo que usa temporizadores, pulsadores y LCD para controlar la duración del parpadeo

Cargado por

PierDonnee
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 10

Arduino Timer Tutorial

La Plataforma de Desarrollo Arduino fue desarrollada originalmente en 2005 como un dispositivo


programable fácil de usar para proyectos de diseño de arte. Su intención era ayudar a los no
ingenieros a trabajar con electrónica básica y microcontroladores sin mucho conocimiento de
programación. Pero entonces, debido a su naturaleza fácil de usar, pronto fue adaptado por
principiantes y aficionados a la electrónica de todo el mundo y hoy en día incluso es preferido para el
desarrollo de prototipos y desarrollos poc.

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.

Temporizadores Arduino sin demora:

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.

¿Qué es TIMER en Electrónica Integrada?


Temporizador es una especie de interrupción. Es como un reloj simple que puede medir el intervalo de
tiempo de un evento. Cada microcontrolador tiene un reloj (oscilador), por ejemplo, en Arduino Uno es
de 16Mhz. Esto es responsable de la velocidad. Más alta será la velocidad de procesamiento. Un
temporizador utiliza contador que cuenta a cierta velocidad dependiendo de la frecuencia del reloj. En
Arduino Uno se tarda 1/16000000 segundos o 62nano segundos en hacer una sola cuenta. Lo que
significa que Arduino pasa de una instrucción a otra por cada 62 nano segundos.

Temporizadores en Arduino UNO:

En Arduino UNO hay tres temporizadores utilizados para diferentes funciones.

Temporizador0:

Es un temporizador de 8 bits y se utiliza en función de temporizador como delay(), millis().

Temporizador1:

Es un temporizador de 16 bits y se utiliza en servoteca.

Timer2:

Es un temporizador de 8 bits y se utiliza en la función tone().

Arduino Timer Se registra


Para cambiar la configuración de los temporizadores, se utilizan registros de temporizador.
1. Registros de temporizador/contador de control (TCCRnA/B):

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

COM1A COM1A COM1B COM1B COM1C COM1C WGM1 WGM1


 
1 0 1 0 1 0 1 0

TCCR1B 7 6 5 4 3 2 1 0

  ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10

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.

CS12 CS11 CS10 Uso

0 0 0 Sin parada del temporizador del reloj

0 0 1 CLCK i/o /1 Sin preescalificación

0 1 0 CLK i/o /8 (Desde preescaladora)

0 1 1 CLK i/o /64 (Desde preescaladora)

1 0 0 CLK i/o /256 (Desde preescaladora)

1 0 1 CLK i/o /1024 (Desde preescaladora)

1 1 0 Fuente de reloj externa en T1 Pin. Reloj al caer el borde

1 1 1 Fuente de reloj externa en el pasador T1. Reloj en el borde ascendente.


2. Temporizador/Registro de contadores (TCNTn)

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:

TCNTn = 65535 – (16x1010xTime en seg / Valor de preescaladora)

Para calcular el valor del precargador para timer1 para un tiempo de 2 s:

TCNT1 = 65535 – (16x1010x2 / 1024) = 34285

Arduino Temporizador Interrumpe


Anteriormente aprendimos sobre Arduino Interrupts y hemos visto que las interrupciones del
temporizador son una especie de interrupciones de software. Hay varias interrupciones del
temporizador en Arduino que se explican a continuación.
Interrupción de desbordamiento del temporizador:

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)

Registro de comparación de salidas (OCRnA/B):

Aquí cuando se produce la interrupción de coincidencia de comparación de salida después se llama al


ISR del servicio de interrupción (TIMERx_COMPy_vect) y también el bit de la marca OCFxy se fijará
en el registro TIFRx. Este ISR se habilita estableciendo enable bit en OCIExy presente en el registro
TIMSKx. Donde TIMSKx es registro de máscara de interrupción del temporizador.

Captura de entrada del temporizador:

A continuación, cuando se produce la interrupción de la captura de entrada del temporizador, se llama


al ISR del servicio de interrupción (TIMERx_CAPT_vect) y también el bit de indicador ICFx se
establecerá en TIFRx (Registro de indicadores de interrupción del temporizador). Este ISR se habilita
estableciendo el bit de permiso en ICIEx presente en el registro TIMSKx.

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

V0 A potenciómetro central pin para el control de contraste de LCD

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.

La configuración se verá como debajo de la imagen.


Programación Arduino UNO Temporizadores
En este tutorial usaremos el TIMER OVERFLOW INTERRUPT y lo usaremos para parpadear el LED
ON y OFF durante cierta duración ajustando el valor del precargador (TCNT1) usando pulsadores. El
código completo para Arduino Timer se da al final. Aquí estamos explicando el código línea por línea:

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.

float value = 3035;

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);

A continuación, deshabilite todas las interrupciones:

noInterrupts();

A continuación se inicializa el Temporizador1.

TCCR1A = 0;

TCCR1B = 0;

Se establece el valor del temporizador del precargador (inicialmente como 3035).

TCNT1 = value;

A continuación, el valor del escalador pre 1024 se fija en el registro TCCR1B.

TCCR1B |= (1 << CS10)|(1 << CS12);

La interrupción de desbordamiento del temporizador se habilita en el registro de la máscara de interrupción


del temporizador para que se pueda utilizar el ISR.

TIMSK1 |= (1 << TOIE1);

Por fin todas las interrupciones están habilitadas.

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);

float value = 3035;                   //Preload timer value (3035 for 4 seconds)

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;

  TCNT1 = value;                        // preload timer


  TCCR1B |= (1 << CS10)|(1 << CS12);    // 1024 prescaler 
  TIMSK1 |= (1 << TOIE1);               // enable timer overflow interrupt ISR
  interrupts();                         // enable all interrupts
}

ISR(TIMER1_OVF_vect)                    // interrupt service routine for overflow


{
  TCNT1 = value;                                // preload timer
  digitalWrite(ledPin, digitalRead(ledPin) ^ 1);  //Turns LED ON and OFF
}

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

También podría gustarte