Innehållsförteckning:

Arduino - Periodiskt avbrott: 4 steg
Arduino - Periodiskt avbrott: 4 steg

Video: Arduino - Periodiskt avbrott: 4 steg

Video: Arduino - Periodiskt avbrott: 4 steg
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, November
Anonim
Arduino - Periodiskt avbrott
Arduino - Periodiskt avbrott

This Instructable handlar om att använda ett periodiskt avbrott för timing i Arduino -program. Detta är ett steg för en spirande Arduino -programmerare som vet att Arduino kan mer, men inte riktigt vet hur man gör det.

Om det finns ett prestandaproblem antar jag att du använder en eller flera fördröjning () -funktioner. Tricket är att bli av med funktionen fördröjning () och ersätta ett avbrott. Funktionen fördröjning () tvingar Arduino att inte göra någonting i väntan på att fördröjningen () ska slutföras. Genom att använda ett avbrott kan ditt program göra andra saker i väntan på att fördröjningen är slut. Det finns vanligtvis en enorm mängd oanvänd dödtid som kan användas till andra saker när du använder fördröjning (). Att använda ett avbrott löser detta problem.

Steg 1: Avbryt hanterare

1. Lägg till avbrottshanteraren till ditt program. Kopiera och klistra in någonstans ovanför setup ();

const osignerad lång TIMER0_COUNT = 500; // 500 msek timerintervall

// TIMER0 interrupt handler volatile bool time = false; ISR (TIMER0_COMPA_vect) {statiskt osignerat långt antal = 0; if (++ count> TIMER0_COUNT) {count = 0; tid = sant; // tiden är inställd på true var TIMER0_COUNT ms} // (tiden måste rensas i huvudrutinen)}

Steg 2: Ange periodiskt tidsintervall

2. Ställ in tidsintervallet. Den här rutinmässiga spargrisen backar sig på TIMER0 -avbrottet, som ska avfyras var ~ 1 msek.

Ditt "intervall" är antalet TIMER0 -avbrott som ska bearbetas. Varje intervall är ~ 1 msek, så du ställer verkligen in hur många TIMER0 -avbrott som ska räknas innan du aktiverar ditt intervall. IOW, ställ in variabeln TIMER0_COUNT till hur många millisekunder du vill vänta. Till exempel, använd 500 i en halv sekund. Använd 3000 i 3 sekunder.

Steg 3: Avbryt initiering

3. Lägg till "TIMER0 initialisering" -koden i din setup () -metod. Återigen, bara kopiera och klistra in i setup ().

// *** TIMER0 initialisering ***

cli (); // stäng av alla avbrott TIMSK0 = 0; // stäng av timer0 för lägre jitter OCR0A = 0xBB; // godtyckligt avbrottsantal TIMSK0 | = _BV (OCIE0A); // piggy back to interrupt sei (); // slå på avbrotten igen

Steg 4: Var du ska lägga till din kod

4. Lägg till "tidskontroll" -koden i din loop () -metod. Kopiera och klistra in i loop ().

om (tid) {

tid = falskt; // gör något här}

"Time = false;" linje är viktigt. Utan denna rad skulle "gör något här" -rad (erna) köras varje gång programmet kör loop ().

Naturligtvis ersätter du dina egna aktiviteter i raden "gör något här". Börja med att skriva ut text eller blinka lysdioden.

Du är klar!

Rekommenderad: