Tabla de contenido:

Arduino - Interrupción periódica: 4 pasos
Arduino - Interrupción periódica: 4 pasos

Video: Arduino - Interrupción periódica: 4 pasos

Video: Arduino - Interrupción periódica: 4 pasos
Video: INTERRUPCIONES EXTERNAS o por HARDWARE en ARDUINO (low - change - rising - falling - high) / CURSO! 2024, Noviembre
Anonim
Arduino - Interrupción periódica
Arduino - Interrupción periódica

Este Instructable trata sobre el uso de una interrupción periódica para la sincronización en los programas Arduino. Este es un paso para un programador de Arduino en ciernes que sabe que Arduino puede hacer más, pero no sabe muy bien cómo hacer que eso suceda.

Si hay un problema de rendimiento, supongo que está utilizando una o más funciones de delay (). El truco consiste en deshacerse de las funciones delay () y sustituirlas por una interrupción. La función delay () obliga al Arduino a no hacer nada mientras espera a que se complete el delay (). El uso de una interrupción le permite a su programa hacer otras cosas mientras espera el final de la demora. Por lo general, hay una gran cantidad de tiempo muerto no utilizado que podría usarse para otras cosas cuando se usa delay (). El uso de una interrupción resuelve este problema.

Paso 1: Controlador de interrupciones

1. Agregue el controlador de interrupciones a su programa. Simplemente copie y pegue en algún lugar por encima de setup ();

const unsigned long TIMER0_COUNT = 500; // intervalo de temporizador de 500 ms

// TIMER0 manejador de interrupciones volatile bool time = false; ISR (TIMER0_COMPA_vect) {cuenta larga estática sin firmar = 0; if (++ recuento> TIMER0_COUNT) {recuento = 0; tiempo = verdadero; // el tiempo se establece en verdadero cada TIMER0_COUNT ms} // (el tiempo debe borrarse en la rutina principal)}

Paso 2: Establecer intervalo de tiempo periódico

2. Configure el intervalo de tiempo. Esta rutina se suma a la interrupción TIMER0, que está configurada para dispararse cada ~ 1 mseg.

Su "intervalo" es el número de interrupciones TIMER0 a procesar. Cada intervalo es ~ 1 mseg, por lo que realmente está configurando cuántas interrupciones de TIMER0 contar antes de activar su intervalo. IOW, establezca la variable TIMER0_COUNT en la cantidad de milisegundos que desee esperar. Por ejemplo, use 500 por medio segundo. Utilice 3000 durante 3 segundos.

Paso 3: interrumpir la inicialización

3. Agregue el código de "inicialización TIMER0" a su método setup (). Nuevamente, simplemente copie y pegue en setup ().

// *** Inicialización TIMER0 ***

cli (); // apaga todas las interrupciones TIMSK0 = 0; // apagar timer0 para menor jitter OCR0A = 0xBB; // recuento arbitrario de interrupciones TIMSK0 | = _BV (OCIE0A); // a cuestas de nuevo en interrupt sei (); // volver a activar las interrupciones

Paso 4: Dónde agregar su código

4. Agregue el código de "verificación de tiempo" a su método loop (). Copie y pegue en loop ().

si (tiempo) {

tiempo = falso; // haz algo aquí}

El "tiempo = falso"; la línea es importante. Sin esta línea, la (s) línea (s) "hacer algo aquí" se ejecutarían cada vez que el programa ejecute loop ().

Por supuesto, sustituye sus propias actividades en la línea "haga algo aquí". Comience imprimiendo algo de texto o haciendo parpadear el LED.

¡Listo!

Recomendado: