Índice:

Arduino - Interrupção periódica: 4 etapas
Arduino - Interrupção periódica: 4 etapas

Vídeo: Arduino - Interrupção periódica: 4 etapas

Vídeo: Arduino - Interrupção periódica: 4 etapas
Vídeo: Interrupção no Microcontrolador - O que é e Como Funciona? Eletronica Facil 2024, Julho
Anonim
Arduino - Interrupção Periódica
Arduino - Interrupção Periódica

Este Instructable é sobre como usar uma interrupção periódica para cronometragem em programas Arduino. Esta é uma etapa para um programador de Arduino iniciante que sabe que o Arduino pode fazer mais, mas não sabe exatamente como fazer isso acontecer.

Se houver um problema de desempenho, presumo que você esteja usando uma ou mais funções delay (). O truque é se livrar da (s) função (ões) delay () e substituí-la por uma interrupção. A função delay () força o Arduino a não fazer nada enquanto espera a conclusão de delay (). Usar uma interrupção permite que seu programa faça outras coisas enquanto espera pelo fim do atraso. Geralmente, há uma grande quantidade de tempo morto não utilizado que poderia ser usado para outras coisas ao usar delay (). Usar uma interrupção resolve esse problema.

Etapa 1: Interromper o manipulador

1. Adicione o manipulador de interrupção ao seu programa. Basta copiar e colar em algum lugar acima de setup ();

const sem sinal longo TIMER0_COUNT = 500; // intervalo do cronômetro de 500 ms

// manipulador de interrupção TIMER0 volatile bool time = false; ISR (TIMER0_COMPA_vect) {contagem longa sem sinal estática = 0; if (++ contagem> TIMER0_COUNT) {contagem = 0; tempo = verdadeiro; // o tempo é definido como verdadeiro a cada TIMER0_COUNT ms} // (o tempo precisa ser apagado na rotina principal)}

Etapa 2: definir o intervalo de tempo periódico

2. Defina o intervalo de tempo. Esta rotina carrega-se na interrupção TIMER0, que é configurada para disparar a cada ~ 1 mseg.

Seu "intervalo" é o número de interrupções TIMER0 para processar. Cada intervalo é de aproximadamente 1 mseg, então você está realmente definindo quantas interrupções TIMER0 contar antes de ativar seu intervalo. IOW, defina a variável TIMER0_COUNT para quantos milissegundos você deseja esperar. Por exemplo, use 500 por meio segundo. Use 3000 por 3 segundos.

Etapa 3: interromper a inicialização

3. Adicione o código de "inicialização TIMER0" ao método setup (). Novamente, apenas copie e cole em setup ().

// *** Inicialização do TIMER0 ***

cli (); // desliga todas as interrupções TIMSK0 = 0; // desliga o timer0 para diminuir o jitter OCR0A = 0xBB; // contagem de interrupções arbitrárias TIMSK0 | = _BV (OCIE0A); // pegando carona na interrupção sei (); // liga as interrupções novamente

Etapa 4: Onde adicionar seu código

4. Adicione o código de "verificação de tempo" ao método loop (). Copie e cole em loop ().

if (tempo) {

tempo = falso; // faça algo aqui}

O "tempo = falso;" linha é importante. Sem esta linha, as linhas "faça algo aqui" seriam executadas toda vez que o programa executasse loop ().

Claro, você substitui suas próprias atividades na linha "faça algo aqui". Comece imprimindo algum texto ou piscando o LED.

Você Terminou!

Recomendado: