Innholdsfortegnelse:

Arduino - Periodisk avbrudd: 4 trinn
Arduino - Periodisk avbrudd: 4 trinn

Video: Arduino - Periodisk avbrudd: 4 trinn

Video: Arduino - Periodisk avbrudd: 4 trinn
Video: Переработка энкодера колеса прокрутки мыши и его тестирование с помощью Arduino Nano 2024, Juli
Anonim
Arduino - Periodisk avbrudd
Arduino - Periodisk avbrudd

Denne instruksen handler om å bruke et periodisk avbrudd for timing i Arduino -programmer. Dette er et skritt for en spirende Arduino -programmerer som vet at Arduino kan gjøre mer, men ikke helt vet hvordan det skal skje.

Hvis det er et ytelsesproblem, antar jeg at du bruker en eller flere forsinkelsesfunksjoner (). Trikset er å kvitte seg med forsinkelsen () -funksjonene og erstatte et avbrudd. Forsinkelsen () -funksjonen tvinger Arduino til å gjøre ingenting mens du venter på at forsinkelsen () skal fullføres. Ved å bruke et avbrudd kan programmet gjøre andre ting mens du venter på slutten av forsinkelsen. Det er vanligvis en enorm mengde ubrukt dødtid som kan brukes til andre ting når du bruker forsinkelse (). Å bruke et interrupt løser dette problemet.

Trinn 1: Avbryt håndterer

1. Legg til avbryterbehandleren i programmet. Bare kopier og lim inn et sted over oppsettet ();

const usignert lang TIMER0_COUNT = 500; // 500 msek timerintervall

// TIMER0 interrupt handler volatile bool time = false; ISR (TIMER0_COMPA_vect) {statisk usignert langtelling = 0; if (++ count> TIMER0_COUNT) {count = 0; tid = sant; // tiden er satt til sann hver TIMER0_COUNT ms} // (tiden må slettes i hovedrutinen)}

Trinn 2: Angi periodisk tidsintervall

2. Still inn tidsintervallet. Denne rutinemessige sparegrisen går tilbake til TIMER0 -avbruddet, som skal utløses hver ~ 1 msek.

Intervallet ditt er antallet TIMER0 -avbrudd som skal behandles. Hvert intervall er ~ 1 msek, så du angir virkelig hvor mange TIMER0 -avbrudd som skal telles før du aktiverer intervallet. IOW, sett variabelen TIMER0_COUNT til hvor mange millisekunder du vil vente. Bruk for eksempel 500 i et halvt sekund. Bruk 3000 i 3 sekunder.

Trinn 3: Avbryt initialisering

3. Legg til "TIMER0 initialisering" -koden i setup () metoden. Igjen, bare kopier og lim inn i oppsett ().

// *** TIMER0 initialisering ***

cli (); // slå av alle avbrudd TIMSK0 = 0; // slå av timer0 for lavere jitter OCR0A = 0xBB; // vilkårlig avbruddstelling TIMSK0 | = _BV (OCIE0A); // piggy back into interrupt sei (); // slå avbrudd på igjen

Trinn 4: Hvor du skal legge til koden din

4. Legg til "tidskontroll" -koden i loop () -metoden. Kopier og lim inn i loop ().

hvis (tid) {

time = false; // gjør noe her}

"Time = false;" linje er viktig. Uten denne linjen ville "gjør noe her" -linjen (e) bli utført hver gang programmet kjører loop ().

Selvfølgelig erstatter du dine egne aktiviteter i linjen "gjør noe her". Start med å skrive ut tekst eller blinke med LED -lampen.

Du er ferdig!

Anbefalt: