"Arduino" beslut "Box" vara (Attiny85) (9 / 13 steg)
Steg 8: Grundläggande flödesdiagram
Först och främst, det är otroligt svårt att pressa ett avbrott och sova baserat program till en riktig flödesdiagram. Jag försökte mitt bästa i diagrammet ovan, jag hoppas du förstår ändå varför programmet är som det är. Jag rekommenderar dig att visa detta diagram sida-vid-sida till koden för att få en bättre förståelse.
Målet är i princip att hålla så länge som möjligt i djupt viloläge mikrokontroller kallas "power down". I detta läge är alla klockor stannat och processorn kan endast vara vaknat med en "pin change interrupt" eller "externa avbrott". Tja, alla klockor utom vakthund, det är därför den används för att generera timings.
I "ilde" läge den huvudsakliga kärnan stoppas minska energiförbrukningen av ungefär två tredjedelar (jämfört med en > 99% minskning), men den stora fördelen är att mikrokontroller inte behöver någon extra stöveln tid (ungefär 4 ms). Således är det mer praktiskt att gå in i "ilde" om ett avbrott sker väntas snart.
Låt oss ha en syn på diagrammet:
- Efter installationen rutinen går enheten direkt in i viloläge, där det stannar tills ett avbrott inträffar. I det här fallet processorn vaknar upp och avbrottshanterare reagerar på händelsen.
- Sedan watchdog timern aktiveras inte ännu och det fanns ingen tidigare knapptryckning startar på första avbryta knappen debounce rutin. Detta görs genom att starta watchdog timer på ett avbrott av 16ms. Om någon kontakt studs inträffar pin förändring (knappen nedtryckt) avbrott kommer att avskedas igen och återställa räknaren till 0. Mellan var och en av dessa avbrott processorn har inget arbete att göra och därmed kommer att skickas till "ilde" läge.
- När knappen nått ett stabilt tillstånd (och inte studsa mer) watchdog timer avbrott är aktiverat. På grund av distansträning om knappen debounce rutin kan inte stängas och det aktuella läget för knappen används.
- Om knappen trycks en LED tänds bas på slumpmässiga data. Tills på nästa avbryta tar det minst 100 MS, så det är praktiskt att skicka enheten till "power-down"-läge.
- Om knappen släpps sedan samma debouce rutin kommer att genomföras, men i slutändan watchdog timer ställs in som 2s för LED tid ut. Igen, mikrokontroller har inget arbete att göra för de nästa två sekunderna så den "power-down"-läget är valt.
- När watchdog timer avbrott utlöses inte i debounce läget, måste det vara LED tid till signalen. Således alla lysdioder vänds av, watchdog skuffas ner och enheten är inställd till långsiktiga "power-down"-läge.
- Det är möjligt att en annan pin change interrupt inträffar medan vakthund är i det är 2-andra LED timeout period. I så fall den nuvarande timerinställningen kommer att skrivas över och debounce läge in.