Sadržaj:

Arduino - periodični prekidi: 4 koraka
Arduino - periodični prekidi: 4 koraka

Video: Arduino - periodični prekidi: 4 koraka

Video: Arduino - periodični prekidi: 4 koraka
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Novembar
Anonim
Arduino - Periodični prekidi
Arduino - Periodični prekidi

Ovaj Instructable govori o korištenju periodičnog prekida za mjerenje vremena u Arduino programima. Ovo je korak za nadobudnog Arduino programera koji zna da Arduino može učiniti više, ali ne zna kako to učiniti.

Ako postoji problem s performansama, pretpostavljam da koristite jednu ili više funkcija delay (). Trik je u tome da se riješite funkcije delay () i zamijenite prekid. Funkcija delay () prisiljava Arduino da ne radi ništa dok čeka da se delay () završi. Korištenje prekida omogućava vašem programu da radi druge stvari dok čeka kraj kašnjenja. Obično postoji ogromna količina neiskorištenog mrtvog vremena koje bi se moglo koristiti za druge stvari pri korištenju delay (). Korištenje prekida rješava ovaj problem.

Korak 1: Rukovalac prekida

1. Dodajte rukovatelj prekidima u svoj program. Samo kopirajte i zalijepite negdje iznad setup ();

const unsigned long TIMER0_COUNT = 500; // Tajmer interval 500 msec

// TIMER0 rukovalac prekida volatile bool time = false; ISR (TIMER0_COMPA_vect) {statičko nepotpisano dugo računanje = 0; if (++ count> TIMER0_COUNT) {count = 0; vrijeme = istina; // vrijeme je postavljeno na true svakih TIMER0_COUNT ms} // (vrijeme je potrebno očistiti u glavnoj rutini)}

Korak 2: Postavite periodični vremenski interval

2. Podesite vremenski interval. Ovaj rutinski povratak na TIMER0 prekid, koji je postavljen da se aktivira svakih ~ 1 msec.

Vaš "interval" je broj prekida TIMER0 za obradu. Svaki interval je ~ 1 msec, tako da zaista postavljate koliko TIMER0 prekida treba brojati prije aktiviranja vašeg intervala. IOW, postavite varijablu TIMER0_COUNT na onoliko milisekundi koje želite čekati. Na primjer, upotrijebite 500 za pola sekunde. Koristite 3000 za 3 sekunde.

Korak 3: Prekinite inicijalizaciju

3. Dodajte kôd "TIMER0 Initilization" u metodu setup (). Opet, samo kopirajte i zalijepite u setup ().

// *** TIMER0 inicijalizacija ***

cli (); // isključuje sve prekide TIMSK0 = 0; // isključuje timer0 za niže podrhtavanje OCR0A = 0xBB; // proizvoljan broj prekida TIMSK0 | = _BV (OCIE0A); // povratak na prekid sei (); // ponovo uključite prekide

Korak 4: Gdje dodati svoj kôd

4. Dodajte kod "time check" u metodu loop (). Kopirajte i zalijepite u loop ().

if (vrijeme) {

vrijeme = lažno; // učinite nešto ovdje}

"Vrijeme = lažno;" linija je važna. Bez ove linije, redovi (i) uradi nešto ovdje bi se izvršavali svaki put kada program izvrši loop ().

Naravno, zamjenjujete vlastite aktivnosti u retku "uradi nešto ovdje". Počnite sa štampanjem nekog teksta ili trepćanjem LED diode.

Gotov si!

Preporučuje se: