Taula de continguts:

Arduino - Interrupció periòdica: 4 passos
Arduino - Interrupció periòdica: 4 passos

Vídeo: Arduino - Interrupció periòdica: 4 passos

Vídeo: Arduino - Interrupció periòdica: 4 passos
Vídeo: RAMPS 1.6 - A4988/DRV8825 configuration 2024, Desembre
Anonim
Arduino: interrupció periòdica
Arduino: interrupció periòdica

Aquest instructable tracta d’utilitzar una interrupció periòdica per a la sincronització dels programes Arduino. Aquest és un pas per a un incipient programador d'Arduino que sap que l'Arduino pot fer més, però que no sap com fer-ho possible.

Si hi ha un problema de rendiment, suposo que utilitzeu una o més funcions de delay (). El truc és desfer-se de les funcions delay () i substituir una interrupció. La funció delay () obliga Arduino a no fer res mentre s’espera que s’acabi el delay (). L’ús d’una interrupció permet al vostre programa fer altres coses mentre espereu el final del retard. Normalment hi ha una gran quantitat de temps mort no utilitzat que es pot utilitzar per a altres coses quan s’utilitza delay (). L’ús d’una interrupció resol aquest problema.

Pas 1: Gestió de la interrupció

1. Afegiu el controlador d'interrupcions al programa. Simplement copieu i enganxeu a algun lloc superior a setup ();

const unsigned long TIMER0_COUNT = 500; // Interval de temporitzador de 500 ms

// TIMER0 manipulador d’interrupcions volàtil bool time = fals; ISR (TIMER0_COMPA_vect) {recompte llarg estàtic sense signar = 0; if (++ recompte> TIMER0_COUNT) {recompte = 0; temps = cert; // l'hora s'estableix a true cada TIMER0_COUNT ms} // (el temps s'ha d'esborrar a la rutina principal)}

Pas 2: definiu l'interval de temps periòdic

2. Definiu l'interval de temps. Aquesta rutina s'acosta a la interrupció TIMER0, que s'estableix cada ~ 1 msec.

El vostre "interval" és el nombre d'interrupcions TIMER0 que s'ha de processar. Cada interval té aproximadament 1 ms, de manera que definiu quantes interrupcions de TIMER0 s'han de comptar abans d'activar l'interval. IOW, establiu la variable TIMER0_COUNT a la quantitat de mil·lisegons que vulgueu esperar. Per exemple, utilitzeu 500 durant la meitat del segon. Feu servir 3000 durant 3 segons.

Pas 3: inicialització de la interrupció

3. Afegiu el codi "inicialització TIMER0" al mètode setup (). Una vegada més, només cal que copieu i enganxeu a setup ().

// *** inicialització TIMER0 ***

cli (); // desactiva totes les interrupcions TIMSK0 = 0; // desactiva el temporitzador0 per a la jitter inferior OCR0A = 0xBB; // recompte d’interrupcions arbitràries TIMSK0 | = _BV (OCIE0A); // tornar a interrompre sei (); // torna a activar les interrupcions

Pas 4: On afegir el vostre codi

4. Afegiu el codi de "comprovació del temps" al mètode loop (). Copia i enganxa en bucle ().

si (hora) {

temps = fals; // fer alguna cosa aquí}

El "temps = fals;" la línia és important. Sense aquesta línia, les línies "fer alguna cosa aquí" s'executarien cada vegada que el programa executa loop ().

Per descomptat, substituïu les vostres pròpies activitats a la línia "Feu alguna cosa aquí". Comenceu imprimint text o intermitent el LED.

Estàs acabat!

Recomanat: