Turinys:

„Arduino“- periodinis pertraukimas: 4 žingsniai
„Arduino“- periodinis pertraukimas: 4 žingsniai

Video: „Arduino“- periodinis pertraukimas: 4 žingsniai

Video: „Arduino“- periodinis pertraukimas: 4 žingsniai
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Liepa
Anonim
„Arduino“- periodinis pertraukimas
„Arduino“- periodinis pertraukimas

Ši instrukcija skirta naudoti periodinį pertraukimą laiko nustatymui „Arduino“programose. Tai žingsnis pradedančiam „Arduino“programuotojui, žinančiam, kad „Arduino“gali padaryti daugiau, tačiau nežino, kaip tai padaryti.

Jei yra našumo problema, darau prielaidą, kad naudojate vieną ar daugiau uždelsimo () funkcijų. Triukas yra atsikratyti uždelsimo () funkcijos (-ų) ir pakeisti pertrauką. Funkcija „delay“() priverčia „Arduino“nieko nelaukti, kol baigsis uždelsimas (). Naudojant pertrauką, jūsų programa gali daryti kitus dalykus, laukdama vėlavimo pabaigos. Paprastai yra didžiulis nepanaudotas negyvas laikas, kurį galima panaudoti kitiems dalykams naudojant uždelsimą (). Pertraukos naudojimas išsprendžia šią problemą.

1 žingsnis: pertraukite tvarkyklę

1. Pridėkite pertraukimo tvarkyklę prie savo programos. Tiesiog nukopijuokite ir įklijuokite kažkur aukščiau sąrankos ();

const unsigned long TIMER0_COUNT = 500; // 500 ms laikmačio intervalas

// TIMER0 pertraukimo tvarkytojas nepastovus bool laikas = false; ISR (TIMER0_COMPA_vect) {static unsigned long count = 0; if (++ skaičius> TIMER0_COUNT) {skaičius = 0; laikas = tiesa; // laikas nustatytas kaip tiesa kas TIMER0_COUNT ms} // (laiką reikia išvalyti pagrindinėje programoje)}

2 veiksmas: nustatykite periodinį laiko intervalą

2. Nustatykite laiko intervalą. Ši rutina grįžta į TIMER0 pertrauką, kuri įjungiama kas ~ 1 ms.

Jūsų „intervalas“yra apdorojamų TIMER0 pertraukų skaičius. Kiekvienas intervalas yra ~ 1 ms, taigi jūs tikrai nustatote, kiek TIMER0 pertraukų reikia skaičiuoti prieš suaktyvinant intervalą. IOW, nustatykite kintamąjį TIMER0_COUNT tiek, kiek norite palaukti. Pavyzdžiui, pusę sekundės naudokite 500. 3 sekundes naudokite 3000.

3 žingsnis: nutraukite inicializavimą

3. Pridėkite „TIMER0 inicializavimo“kodą prie savo sąrankos () metodo. Vėlgi, tiesiog nukopijuokite ir įklijuokite sąrankoje ().

// *** TIMER0 inicijavimas ***

cli (); // išjungti visus pertraukimus TIMSK0 = 0; // išjungti laikmatį0 žemesniam virpėjimui OCR0A = 0xBB; // savavališkas pertraukimų skaičius TIMSK0 | = _BV (OCIE0A); // piggy back to interrupt sei (); // vėl įjungia pertraukas

4 veiksmas: kur pridėti kodą

4. Pridėkite „laiko patikrinimo“kodą prie savo ciklo () metodo. Nukopijuokite ir įklijuokite į kilpą ().

jei (laikas) {

laikas = klaidingas; // daryk ką nors čia}

„Laikas = klaidingas“; eilutė yra svarbi. Be šios eilutės eilutė „daryk ką nors čia“būtų vykdoma kiekvieną kartą, kai programa vykdo ciklą ().

Žinoma, jūs pakeisite savo veiklą eilutėje „daryk ką nors čia“. Pradėkite nuo teksto spausdinimo arba šviesos diodo mirksėjimo.

Jūs baigėte!

Rekomenduojamas: