Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Temporizadores internos de Arduino

Componentes y suministros

Arduino UNO
× 1
LED (genérico)
× 1
Resistencia 220 ohmios
× 1

Acerca de este proyecto

Descripción general

Si necesita contar el tiempo con precisión, debe usar un temporizador, pero generalmente no es tan fácil usar los temporizadores internos de Arduino, por lo que en este tutorial trato de explicar cómo usarlos de una manera fácil.

Es muy importante usar temporizadores porque durante la función delay () no puedes hacer nada, pero con un temporizador puedes hacer todo porque cuando llega el momento, activa la interrupción.

Utilizo TIMER0 porque es el temporizador más fácil, tal vez en el futuro pueda explicar los otros temporizadores.

Cómo funciona

Lo primero que debe ver es la hoja de datos de ATmega328P.

Este es el diagrama de bloques del contador y, al mirarlo, puede comprender cómo funciona.

El preescalador recibe un pulso de un ciclo de reloj y luego lo pasa a la lógica de control, por lo tanto, la lógica de control incrementa el registro TCNTn en 1.

Ahora podemos comparar el valor de TCNTn con un valor específico. Cuando el registro TCNTn llega a este valor, sabe que ha pasado un tiempo específico.

Este método se denomina modo CTC para "Borrar temporizador al comparar". El valor del registro TCNTn se compara con el registro OCRn, cuando se produce una coincidencia de comparación, el TOVn genera una interrupción.

Otra cosa importante es el prescaler, con este puedes crear diferentes divisiones del reloj, de hecho 16MHz es demasiado pero, gracias al prescaler, puedes crear algunos submúltiplos del mismo. Esto depende de la configuración del registro TCCR0B.

Otra cosa importante es determinar el valor del registro OCRn para contar un tiempo específico, necesita un poco de matemáticas.

Sé que todo esto puede parecer demasiado complicado, pero estoy seguro de que el siguiente código aclarará cada pregunta.

En este caso, activamos una solicitud de interrupción cada 0.001 segundos.

  TCCR0A | =(1 < 

Es importante configurar el preescalador al final porque después de esta instrucción el temporizador comienza a contar, si necesita detenerlo, debe restablecer todos los bits de TCCR0B.

A continuación hay un ejemplo.

Código

  • Temporizador interno
Temporizador interno Arduino
 / * Este programa enciende y apaga un LED en el pin 13 cada 1 segundo usando un temporizador interno * / int timer =0; bool state =0; void setup () {pinMode (13, OUTPUT); TCCR0A =(1 < =1000) {state =! state; temporizador =0; } digitalWrite (13, estado); } ISR (TIMER0_COMPA_vect) {// Este es el temporizador de solicitud de interrupción ++;} 

Esquemas


Proceso de manufactura

  1. Arduino Spybot
  2. FlickMote
  3. Televisión casera B-Gone
  4. Reloj maestro
  5. Encuéntrame
  6. Arduino Power
  7. Tech-TicTacToe
  8. Arduino Cuadrúpedo
  9. Joystick de Arduino
  10. Máquina CNC
  11. Earth_Analyzer