Inhoudsopgave:

Arduino - Periodieke onderbreking: 4 stappen
Arduino - Periodieke onderbreking: 4 stappen

Video: Arduino - Periodieke onderbreking: 4 stappen

Video: Arduino - Periodieke onderbreking: 4 stappen
Video: DS-TT: DS en Gadgets 2024, Juli-
Anonim
Arduino - Periodieke onderbreking
Arduino - Periodieke onderbreking

Deze Instructable gaat over het gebruik van een periodieke interrupt voor timing in Arduino-programma's. Dit is een stap voor een ontluikende Arduino-programmeur die weet dat de Arduino meer kan, maar niet helemaal weet hoe hij dat moet laten gebeuren.

Als er een prestatieprobleem is, neem ik aan dat je een of meer delay()-functies gebruikt. De truc is om de delay() functie(s) te verwijderen en een interrupt te vervangen. De functie delay() dwingt de Arduino niets te doen terwijl hij wacht tot de delay() is voltooid. Door een interrupt te gebruiken, kan uw programma andere dingen doen terwijl u wacht op het einde van de vertraging. Er is meestal een enorme hoeveelheid ongebruikte dode tijd die voor andere dingen kan worden gebruikt bij het gebruik van delay(). Het gebruik van een interrupt lost dit probleem op.

Stap 1: handler onderbreken

1. Voeg de interrupt-handler toe aan je programma. Kopieer en plak ergens boven setup();

const unsigned lang TIMER0_COUNT = 500; // 500 msec timerinterval

// TIMER0 interrupt handler vluchtige bool tijd = false; ISR (TIMER0_COMPA_vect) { statische niet-ondertekende lange telling = 0; if (++ count > TIMER0_COUNT) { count = 0; tijd = waar; // tijd is ingesteld op waar elke TIMER0_COUNT ms } // (tijd moet worden gewist in de hoofdroutine)}

Stap 2: Stel het periodieke tijdsinterval in

2. Stel het tijdsinterval in. Deze routine lift zichzelf mee op de TIMER0-interrupt, die is ingesteld om elke ~ 1 msec af te vuren.

Uw "interval" is het aantal TIMER0-interrupts dat moet worden verwerkt. Elk interval is ~ 1 msec, dus je stelt echt in hoeveel TIMER0-interrupts je moet tellen voordat je je interval activeert. IOW, stel de variabele TIMER0_COUNT in op het aantal milliseconden dat u wilt wachten. Gebruik bijvoorbeeld 500 voor een halve seconde. Gebruik 3000 gedurende 3 seconden.

Stap 3: Initialisatie onderbreken

3. Voeg de "TIMER0 initialisatie" code toe aan uw setup() methode. Nogmaals, kopieer en plak gewoon in setup().

// *** TIMER0 initialisatie ***

cli(); // schakel alle interrupts uit TIMSK0 = 0; // schakel timer0 uit voor lagere jitter OCR0A = 0xBB; // willekeurig aantal onderbrekingen TIMSK0 |= _BV (OCIE0A); // meeliften op interrupt sei(); // zet interrupts weer aan

Stap 4: Waar u uw code kunt toevoegen

4. Voeg de code "time check" toe aan uw loop()-methode. Kopieer en plak in loop().

als (tijd) {

tijd = onwaar; // doe hier iets }

De "tijd = onwaar;" lijn is belangrijk. Zonder deze regel zouden de regel(s) "doe hier iets" elke keer dat het programma loop() uitvoert, worden uitgevoerd.

Natuurlijk vervangt u uw eigen activiteiten in de regel "doe hier iets". Begin met het afdrukken van wat tekst of het knipperen van de LED.

U bent klaar!

Aanbevolen: