INHOUDSOPGAWE:

Arduino - Periodieke onderbreking: 4 stappe
Arduino - Periodieke onderbreking: 4 stappe

Video: Arduino - Periodieke onderbreking: 4 stappe

Video: Arduino - Periodieke onderbreking: 4 stappe
Video: DS-TT: DS en Gadgets 2024, November
Anonim
Arduino - Periodieke onderbreking
Arduino - Periodieke onderbreking

Hierdie instruksie handel oor die gebruik van 'n periodieke onderbreking vir tydsberekening in Arduino -programme. Dit is 'n stap vir 'n ontluikende Arduino -programmeerder wat weet dat die Arduino meer kan doen, maar nie heeltemal weet hoe om dit te laat gebeur nie.

As daar 'n prestasieprobleem is, neem ek aan dat u een of meer vertragings () funksies gebruik. Die truuk is om ontslae te raak van die vertragings () funksie (s) en 'n onderbreking te vervang. Die vertraging () -funksie dwing die Arduino om niks te doen terwyl hy wag totdat die vertraging () voltooi is nie. Deur 'n onderbreking te gebruik, kan u program ander dinge doen terwyl u wag op die einde van die vertraging. Daar is gewoonlik 'n groot hoeveelheid ongebruikte dooie tyd wat vir ander dinge gebruik kan word by die gebruik van vertraging (). Deur 'n onderbreking te gebruik, word hierdie probleem opgelos.

Stap 1: Onderbreek hanteraar

1. Voeg die interrupt -hanteerder by u program. Kopieer en plak iewers bo setup ();

konst ongetekende lang TIMER0_COUNT = 500; // 500 msek timer interval

// TIMER0 onderbreek hanteerder vlugtige bool tyd = vals; ISR (TIMER0_COMPA_vect) {statiese ongetekende lang telling = 0; as (++ telling> TIMER0_COUNT) {telling = 0; tyd = waar; // die tyd is ingestel op waar elke TIMER0_COUNT ms} // (tyd moet in die hoofroetine skoongemaak word)}

Stap 2: Stel periodieke tydsinterval in

2. Stel die tydsinterval in. Hierdie roetine vaar terug op die TIMER0 -onderbreking, wat elke ~ 1 msek aan die brand moet sit.

Jou "interval" is die aantal TIMER0 onderbrekings wat verwerk moet word. Elke interval is ~ 1 msek, so u stel regtig hoeveel TIMER0 -onderbrekings moet tel voordat u u interval aktiveer. IOW, stel die veranderlike TIMER0_COUNT in op hoeveel millisekondes u wil wag. Gebruik byvoorbeeld 500 vir 'n halwe sekonde. Gebruik 3000 vir 3 sekondes.

Stap 3: Onderbreek die inisialisering

3. Voeg die "TIMER0 -inisialisering" -kode by u opset () metode. Weereens, kopieer en plak in setup ().

// *** TIMER0 inisialisering ***

cli (); // skakel alle onderbrekings uit TIMSK0 = 0; // skakel timer0 af vir laer jitter OCR0A = 0xBB; // willekeurige onderbrekingstelling TIMSK0 | = _BV (OCIE0A); // piggy back on interrupt sei (); // skakel onderbrekings weer aan

Stap 4: Waar om u kode by te voeg

4. Voeg die "tydkontrole" -kode by u loop () -metode. Kopieer en plak in lus ().

as (tyd) {

tyd = vals; // doen iets hier}

Die "tyd = vals;" lyn is belangrik. Sonder hierdie reël sou die "doen hier iets" -reël (s) uitgevoer word elke keer as die program lus () uitvoer.

U vervang u eie aktiwiteite natuurlik in die 'doen iets hier' -reël. Begin met die druk van teks of die flits van die LED.

Jy's klaar!

Aanbeveel: