Indholdsfortegnelse:

Arduino - Periodisk afbrydelse: 4 trin
Arduino - Periodisk afbrydelse: 4 trin

Video: Arduino - Periodisk afbrydelse: 4 trin

Video: Arduino - Periodisk afbrydelse: 4 trin
Video: Could this tiny tube of metal fix our broken suspension? - Edd China's Workshop Diaries 28 2024, Juli
Anonim
Arduino - Periodisk afbrydelse
Arduino - Periodisk afbrydelse

Denne instruktør handler om at bruge en periodisk afbrydelse til timing i Arduino -programmer. Dette er et skridt for en spirende Arduino -programmør, der ved, at Arduino kan mere, men ikke helt ved, hvordan det skal ske.

Hvis der er et ydelsesproblem, antager jeg, at du bruger en eller flere delay () -funktioner. Tricket er at slippe af med forsinkelse () funktion (erne) og erstatte en afbrydelse. Funktionen forsinkelse () tvinger Arduino til ikke at gøre noget, mens de venter på, at forsinkelsen () er fuldført. Ved hjælp af en afbrydelse tillader dit program at gøre andre ting, mens du venter på, at forsinkelsen er slut. Der er normalt en enorm mængde ubrugt dødtid, der kan bruges til andre ting, når du bruger forsinkelse (). Brug af en afbrydelse løser dette problem.

Trin 1: Afbryd håndterer

1. Føj afbryderbehandleren til dit program. Bare kopier og indsæt et sted over setup ();

const usigneret lang TIMER0_COUNT = 500; // 500 msek timerinterval

// TIMER0 interrupt handler volatile bool time = false; ISR (TIMER0_COMPA_vect) {statisk unsigned long count = 0; hvis (++ count> TIMER0_COUNT) {count = 0; tid = sandt; // tid er indstillet til sand hver TIMER0_COUNT ms} // (tiden skal ryddes i hovedrutinen)}

Trin 2: Indstil periodisk tidsinterval

2. Indstil tidsintervallet. Denne rutine piggybacks sig selv på TIMER0 interrupt, som er indstillet til at affyre hver ~ 1 ms.

Dit "interval" er antallet af TIMER0 -afbrydelser, der skal behandles. Hvert interval er ~ 1 msek, så du indstiller virkelig, hvor mange TIMER0 -afbrydelser, der skal tælles, før du aktiverer dit interval. IOW, indstil variablen TIMER0_COUNT til hvor mange millisekunder du vil vente. Brug f.eks. 500 i et halvt sekund. Brug 3000 i 3 sekunder.

Trin 3: Afbryd initialisering

3. Tilføj "TIMER0 initialisering" -koden til din setup () metode. Igen, bare kopier og indsæt i setup ().

// *** TIMER0 initialisering ***

cli (); // sluk for alle afbrydelser TIMSK0 = 0; // sluk timer0 for lavere jitter OCR0A = 0xBB; // vilkårlig afbrydelse tæller TIMSK0 | = _BV (OCIE0A); // piggy tilbage på interrupt sei (); // tænde afbrydelser igen

Trin 4: Hvor skal du tilføje din kode

4. Tilføj "tidskontrol" -koden til din loop () -metode. Kopier og indsæt i loop ().

hvis (tid) {

tid = falsk; // gør noget her}

"Time = false;" linje er vigtig. Uden denne linje ville "gør noget her" linje (r) blive udført hver gang programmet udfører loop ().

Selvfølgelig erstatter du dine egne aktiviteter i linjen "gør noget her". Start med at udskrive noget tekst eller blinke med LED'en.

Du er færdig!

Anbefalede: