Paso 8: Diagrama de flujo básico
En primer lugar, es increíble duro para exprimir una interrupción y dormir programa basado en un diagrama de flujo real. He intentado mi mejor en el diagrama anterior, espero que todavía entender por qué el programa es como él es. Te recomiendo ver este diagrama de lado a lado en el código para obtener una mejor comprensión.
El objetivo es básicamente mantener el mayor tiempo posible en el modo 'sueño profundo' microcontrolador llamado "corriente abajo". En este modo se detuvieron todos los relojes y el procesador sólo puede ser despertado con una "interrupción de cambio de pin" o "interrupción externa". Bueno, todos los relojes excepción el perro guardián, es por eso se utiliza para generar horarios.
En el modo de "ilde" el núcleo principal se ha detenido reduciendo el consumo de energía por aproximadamente dos tercios (en comparación con un > 99% reducción), pero la gran ventaja es que el microcontrolador no tiene ningún tiempo de arranque adicional (aproximadamente 4 ms). Así es más práctico ir en "ilde" Si cualquier interrupción se espera pronto.
Vamos a tener una vista en el diagrama:
- Después de la rutina de configuración el dispositivo entra directamente en modo de reposo, donde permanece hasta que se produzca una interrupción. En este caso despierta el procesador y el controlador de interrupción va a reaccionar en el evento.
- Puesto que el temporizador del vigilante no está habilitado aún y no había ninguna pulsación anterior la primera interrupción comienza la rutina de debounce botón. Esto se hace iniciando el temporizador de vigilante en una interrupción de 16ms. Si cualquier rebote de contacto se produce la interrupción ('presiona') cambio de pin se dispararon nuevamente y el contador a 0. Entre cada una de esas interrupciones el procesador no tiene ningún trabajo que hacer y así enviar en modo de "ilde".
- Una vez el botón alcanza un estado estacionario (y no rebote más) el vigilante se habilita la interrupción de temporizador. Debido al estado estacionario del botón la rutina debounce puede no cerrarse y el estado actual del botón utilizado.
- Si se presiona el botón uno que se enciende el LED con base en datos aleatorios. Hasta la próxima interrupción tarda menos 100ms, por lo que es práctico enviar el dispositivo en modo "apagado".
- Si entonces se suelta el botón se ejecutará la misma rutina de debouce, pero al final se establecerá el temporizador del vigilante 2s para el LED tiempo fuera. Una vez más, el microcontrolador no tiene trabajo hacerlo durante los próximos dos segundos se elige el modo "apagado".
- Una vez que la interrupción de temporizador watchdog se activa mientras que no esté en modo debounce, tiene que ser la señal de tiempo de LED. Así todos los LEDs son vuelta de, el perro guardián es desviado hacia abajo y el dispositivo está configurado en modo "apagado" a largo plazo.
- Es posible que otra interrupción de cambio de pin se produce mientras el vigilante está en su segundo 2 LED tiempo período. En ese caso se sobrescribirá el ajuste actual del temporizador y el modo de debounce entró.