Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Timers internos do Arduino

Componentes e suprimentos

Arduino UNO
× 1
LED (genérico)
× 1
Resistor 220 ohm
× 1

Sobre este projeto





Visão geral


Se você precisa contar o tempo com precisão, você precisa usar um cronômetro, mas geralmente não é tão fácil usar os cronômetros internos do Arduino, então neste tutorial tento explicar como usá-los de uma maneira fácil.

É muito importante usar temporizadores porque durante a função delay () você não pode fazer nada, mas com um temporizador você pode fazer tudo porque quando chega o momento, ele ativa a interrupção.

Eu uso o TIMER0 porque é o temporizador mais fácil, talvez no futuro eu possa explicar os outros temporizadores.





Como funciona


A primeira coisa que você precisa ver é a folha de dados do ATmega328P.

Este é o diagrama de blocos do contador e, olhando para ele, você pode entender como funciona.

O prescaler recebe um pulso de um ciclo de clock e então o passa para a Lógica de Controle, portanto, a Lógica de Controle incrementa o registrador TCNTn em 1.

Agora podemos comparar o valor de TCNTn com um valor específico. Quando o registro TCNTn chega a este valor, você sabe que passou um tempo específico.

Este método é denominado modo CTC para "Clear Timer on Compare". O valor do registro TCNTn é comparado ao registro OCRn, quando ocorre uma comparação, o TOVn gera uma interrupção.

Outra coisa importante é o prescaler, com ele você pode criar diferentes divisões do clock, na verdade 16MHz é demais mas, graças ao prescaler, você pode criar alguns submúltiplos dele. Isso depende da configuração do registro TCCR0B.



Outra coisa importante é determinar o valor do registrador OCRn para contar um tempo específico, você precisa de um pouco de matemática.

Sei que tudo isso pode parecer muito complicado, mas tenho certeza de que o código a seguir esclarecerá todas as perguntas.

Nesse caso, ativamos uma solicitação de interrupção a cada 0,001 segundos.
  TCCR0A | =(1 < 

É importante configurar o prescaler no final porque após esta instrução o temporizador começa a contar, se você precisar pará-lo, deve zerar todos os bits de TCCR0B.

Abaixo está um exemplo.


Código

  • cronômetro interno
Temporizador interno Arduino
 / * Este programa liga e desliga um LED no pino 13 a cada 1 segundo usando um temporizador interno * / int temporizador =0; bool state =0; void setup () {pinMode (13, OUTPUT); TCCR0A =(1 < =1000) {state =! state; temporizador =0; } digitalWrite (13, estado); } ISR (TIMER0_COMPA_vect) {// Este é o temporizador de solicitação de interrupção ++;} 

Esquemas


Processo de manufatura

  1. Arduino Spybot
  2. FlickMote
  3. TV B-Gone caseiro
  4. Relógio mestre
  5. Encontre-me
  6. Arduino Power
  7. Tech-TicTacToe
  8. Arduino Quadruped
  9. Joystick Arduino
  10. Máquina CNC