Lucid Dream maskinen (2 / 10 steg)
Steg 2: om programmet
Fungerande lägen:
--User input/alternativ
--Vänta-för-viloläge
--PWM drömmande läge
Start
Lysdioden lyser i ca 2 sekunder för att ange under starten.
Enheten kontrollerar också om knappen input trycktes och hölls under förmåga upp för de första sekunderna. Om det var, "omedelbar mode" anges: lamporna börjar blinka. Detta är mestadels så guyfrom7up kan enkelt testa maskinvaran utan att vänta fyra timmar;-).
Det kan också användas för "tupplur" typ lågenergitillstånd.
Men vi kan också lägga till lite kod för att variera puls bredden... whattay tror?
Timer och IRQ-inställningarna för inledande vänta staten
Efter kontroll för användarindata, etc., och ställa in IRQ, är ATtiny13 omedelbart placeras i viloläge. I det här läget är endast timers, klockor och IRQ funktionella. Naturligtvis, är detta en energisparande åtgärd.
Rollover tid för en 16-bitars räknare, per timer scaler värde (gånger ca)--
---CS00: 13.75sCS01: 110s (1m, 50s) CS02: 3520s (58m, 40s) CS00 + CS02: 14080s (3,91 h)
En ~ 4 timmars väntan är möjligt med CS02 och CS00 flagga kombinationen, en klocka scaler 1024. I detta tillstånd utlöses IRQ 4,6 gånger per sekund. VÄNTAN staten kunde enkelt finjusteras, genom att använda 16-bitars räknare (för varaktigheter < 4 timmar) tillsammans med waitstate räknaren (för längre förseningar.)
Sedan fyra timmar är lika bra en försening som någon, används en längre varaktighet waitstate inte. En längre fördröjning skulle vara en struntsak att genomföra.
Obs: guyfrom7up har hittat waitstate för hans AVRs är något större än 4 timmar, medan min är något mindre. En intern oscillator av AVR är inte mycket exakt, men det är bra nog för våra behov...
På 4,6 IRQ per sekund, CPU-kraft bör konsumtion vara mycket låg. Naturligtvis inte AVR i avstängning läge, som som kräver en extern vakna upp signalen. Vår måste vara tidsinställda internt, så SLEEP_MODE_IDLE är vår bästa valet.
IRQ-signaler per sekund, för varje scaler (ca)--
---CS00: 4766 /s (under dröm fas) CS01: 593.8 /sCS02: 18.6 /sCS00 + CS02: 4,6 /s (under första waitstate)
Timer och IRQ-inställningarna för drömmer PWM mode
Timer scaler värdet ändras till CS00 när MODE_DREAMING börjar--för att skapa mjuka övergångar för programvara pwm. Intermittensen för CPU (och IRQ) är mycket större (ca 4.7K per sekund.) Men LED intermittensen är mycket mindre än det skulle vara med en enkel strömbrytare. En avvägning mellan cpu och LED nuvarande Rita...
Puls totalbredd (längd) LED blinkar styrs av konstanterna MACRO_WIDTH och MACRO_GAP. PWM hanteras av uppräkning pwm och övergången variabler av konstanterna PWM_VAL och TRANS_VAL. att ändra dessa konstanter kommer att ändra hur snabbt PWM "ramper upp."
Den drömmande frekvens LED puls är för närvarande ca 1,5 hz.
Rambelopp
Den aktuella versionen (0.2b) använder endast 438 byte flashminne. Detta är långt ifrån 1 K gränsen för ATtiny13.
Så att lägga till fler funktioner är verkligen gör-stånd.