Sommario:

Arduino - Interruzione periodica: 4 passaggi
Arduino - Interruzione periodica: 4 passaggi

Video: Arduino - Interruzione periodica: 4 passaggi

Video: Arduino - Interruzione periodica: 4 passaggi
Video: Implementing Periodic Timer Interrupt in TM4C123 2024, Luglio
Anonim
Arduino - Interruzione periodica
Arduino - Interruzione periodica

Questo Instructable riguarda l'utilizzo di un interrupt periodico per la temporizzazione nei programmi Arduino. Questo è un passo per un programmatore Arduino in erba che sa che Arduino può fare di più, ma non sa come farlo accadere.

Se c'è un problema di prestazioni, presumo che tu stia usando una o più funzioni delay(). Il trucco è sbarazzarsi della/e funzione/i delay() e sostituire un interrupt. La funzione delay() forza Arduino a non fare nulla mentre attende il completamento di delay(). L'uso di un'interruzione consente al programma di fare altre cose in attesa della fine del ritardo. Di solito c'è un'enorme quantità di tempi morti inutilizzati che potrebbero essere usati per altre cose quando si usa delay(). L'utilizzo di un interrupt risolve questo problema.

Passaggio 1: gestore delle interruzioni

1. Aggiungi il gestore di interrupt al tuo programma. Basta copiare e incollare da qualche parte sopra setup();

const unsigned long TIMER0_COUNT = 500; // Intervallo timer di 500 msec

// TIMER0 gestore di interrupt volatile bool time = false; ISR(TIMER0_COMPA_vect) { conteggio lungo senza segno statico = 0; if (++count > TIMER0_COUNT) { conteggio = 0; tempo = vero; // il tempo è impostato su vero ogni TIMER0_COUNT ms } // (il tempo deve essere cancellato nella routine principale) }

Passaggio 2: imposta l'intervallo di tempo periodico

2. Impostare l'intervallo di tempo. Questa routine si collega all'interrupt TIMER0, che è impostato per attivarsi ogni ~1 msec.

Il tuo "intervallo" è il numero di interruzioni TIMER0 da elaborare. Ogni intervallo è di ~ 1 msec, quindi stai davvero impostando il numero di interruzioni TIMER0 da contare prima di attivare l'intervallo. IOW, imposta la variabile TIMER0_COUNT sul numero di millisecondi che desideri attendere. Ad esempio, usa 500 per mezzo secondo. Usa 3000 per 3 secondi.

Passaggio 3: inizializzazione dell'interruzione

3. Aggiungi il codice "TIMER0 initialization" al tuo metodo setup(). Ancora una volta, copia e incolla in setup().

// *** Inizializzazione TIMER0 ***

cli(); // disattiva tutti gli interrupt TIMSK0 = 0; // disattiva il timer0 per un jitter inferiore OCR0A = 0xBB; // conteggio arbitrario degli interrupt TIMSK0 |= _BV(OCIE0A); // piggy back su interrupt sei(); // riattiva gli interrupt

Passaggio 4: dove aggiungere il codice

4. Aggiungi il codice "time check" al tuo metodo loop(). Copia e incolla in loop().

se (tempo) {

tempo = falso; // fai qualcosa qui }

Il "tempo = falso;" la linea è importante. Senza questa riga le righe "fai qualcosa qui" verrebbero eseguite ogni volta che il programma esegue loop().

Naturalmente, sostituisci le tue attività nella riga "fai qualcosa qui". Inizia stampando del testo o facendo lampeggiare il LED.

Hai finito!

Consigliato: