Stap 8: Eenvoudig Flow Diagram
Ten eerste, het is ongelooflijk hard aan Knijp een interrupt en programma slapen in een echte stroomschema. Ik probeerde mijn best in het bovenstaande diagram, ik hoop dat u nog steeds begrijpen waarom het programma is zoals het is. Mij recommanderen u voor het bekijken van dit diagram side-by-side de code om een beter inzicht te krijgen.
Het doel is het principe om te houden van de microcontroller die zo lang mogelijk in de 'diepe slaap'-modus genaamd "macht neer". In deze modus alle klokken worden stopgezet en de processor kan alleen worden gewekt met een "pin wijzigen interrupt" of "externe interrupt". Nou, behalve alle klokken de watchdog, dat is waarom het wordt gebruikt voor het genereren van tijdsinstellingen.
In de modus "ilde" de belangrijkste kern is tegengehouden het stroomverbruik te verlagen door ruwweg twee derde (in vergelijking met een > 99% vermindering), maar het grote voordeel is dat de microcontroller niet extra schoen tijd (ongeveer 4 ms hoeft). Aldus is het praktischer om te gaan "ilde" als een interrupt wordt binnenkort verwacht.
Laten we eens een weergave van het diagram:
- Na de setup routine gaat het apparaat rechtstreeks in de slaapstand, waar het blijft totdat een interrupt optreedt. In dit geval de processor wakker en de interrupt handler zal reageren op de gebeurtenis.
- Omdat de watchdog-timer is nog niet is ingeschakeld en er geen eerdere knooppers was begint de eerste interrupt de knop ontdendering routine. Dit wordt gedaan door het starten van de watchdog-timer op een interrupt van 16 ms. Als er contact bounce optreedt de pin wijzigen ('knop ingedrukt') interrupt opnieuw zal worden ontslagen en de teller weer op 0 instellen. Tussen elk van deze onderbreekt de processor heeft geen werk te doen en aldus zal worden gestuurd in "ilde" modus.
- Zodra de knop een steady-state bereikte (en niet meer stuiteren) de watchdog timer onderbreken is ingeschakeld. Als gevolg van de stabiele toestand van de knop de ontdendering routine kan niet worden gesloten en de huidige status van de knop gebruikt.
- Als de knop wordt ingedrukt zal één LED oplichten honk op willekeurige gegevens. Tot de volgende interrupt duurt ten minste 100ms, dus is het praktisch om te sturen van het apparaat in de "power-down"-modus.
- Als de knop wordt dan vrijgegeven dezelfde debouce routine zal worden uitgevoerd, maar uiteindelijk zal de watchdog-timer worden ingesteld op 2s voor de time-out van de LED. Nogmaals, de microcontroller heeft geen werk te doen voor de volgende twee seconden dus de "power-down"-modus wordt gekozen.
- Zodra de watchdog timer onderbreken niet in ontdendering modus wordt geactiveerd, moet het de LED time-out signaal. Dus alle LEDs worden omgezet van de watchdog is gerangeerd naar beneden en het apparaat is ingesteld op lange termijn "power-down"-modus.
- Het is mogelijk dat een andere pin wijzigen interrupt optreedt terwijl de watchdog in het 2-seconde LED time-out periode is. In dat geval de huidige timerinstelling zal worden overschreven en de modus ontdendering ingevoerd.