Problem Stromsparmodus

Gast #1816686
Lesenswert?

Liebe Community,

ich bräuchte von euch einen kurzen Denkanstoß. Ich arbeite mit einem 
attiny2313. Funktion soll sein, mittels Softwareabfrage einer 
Schalterstellung an dem µC entweder alle 24h, alle 48h oder alle 72h 
eine kurze Aktion auszuführen und dann wieder schlafen zu gehen, da die 
gesamte Schaltung Batteriebetrieben ist.

Ich bin mit den AVRs noch etwas unerfahren und habe ziemlich viel 
gelesen, gesucht und noch mehr gelesen die letzten Tage. Letztendlich 
bin ich verwirrter als vorher =)

Meine Recherchen ergaben (bitte korrigieren wenn falsch), das bis auf 
den Idle Mode alle anderen Stromsparmodi eine Hardwareseitige 
Reaktivierung brauchen. Somit wäre für mich der Idle Modus aktuell, 
welchen ich mit MCUCR = 0x00 einstellen kann.

Nun verwirren mich aber 3 Dinge:
- Geht wirklich nur der idle Modus oder ginge mittels Watchdog Timer 
auch ein PowerDown Modi, bis der Watchdog einen Reboot erzwingt?
- Welche Interrupt Service Routine benötige ich zum aufwecken des µC, 
bzw sind die Interrupts zum aufwecken und für den Counter verschieden?
- Sind mittels Counter solche "langen" Zeiten bis zur Interuptausführung 
überhaupt möglich?

Bin über jede Hilfe dankbar!

Gruß Sanja
Moderator Persönliche Seite #1816709
Lesenswert?

Sanja schrieb:

> ich bräuchte von euch einen kurzen Denkanstoß. Ich arbeite mit einem
> attiny2313.

Schlechte Wahl für die Aufgabenstellung.  Gab's einen besonderen
Grund für diese Wahl?

> - Geht wirklich nur der idle Modus oder ginge mittels Watchdog Timer
> auch ein PowerDown Modi, bis der Watchdog einen Reboot erzwingt?

Watchdog geht natürlich auch, du musst dann das watchdog reset flag
(WDRF) auswerten.  Lässt sich sogar noch einfacher implementieren, da
der watchdog alternativ auch einen Interrupt auslösen kann, man muss
also nicht einmal zwingend über reset gehen.

Allerdings ist der watchdog oscillator ein RC-Oszillator simpelster
Sorte.  Für ein auch nur halbwegs brauchbares Timing würde ich mich
auf den nicht verlassen.

Wenn du den Haupttakt (RC-Oszillator oder Quarz?) durch 256 teilst,
bevor du in den idle sleep gehst, braucht du ungefähr die gleiche
Größenordnung an Strom (wenige 10 µA) wie mit dem watchdog oscillator.

> - Welche Interrupt Service Routine benötige ich zum aufwecken des µC

Irgendeine, also zweckmäßig die eines Timers (watchdog oder normaler).
Jeder freigeschaltete Interrupt, der entsprechend des sleep mode
auch wirklich noch kommen kann, weckt den Prozessor auf.

> - Sind mittels Counter solche "langen" Zeiten bis zur
> Interuptausführung überhaupt möglich?

Nein, natürlich nicht, aber das hättest du dir selbst ausrechnen
können. ;-) Man erweitert den Zählumfang der Timer einfach in
Software, d. h. du zählst nur eine Variable runter, und wenn diese
noch nicht 0 ist, legst du das alles wieder schlafen.

Eine bessere Wahl wäre ein Controller gewesen, bei dem man den Timer 2
separat von einem 32-kHz-Uhrenquarz takten kann.  Bei diesen gibt's
einen sogenannten power-save sleep mode, bei dem alle Takte außer
diesem abgeschaltet werden.  Damit hast du Timing in
Quarzuhrenqualität bei Stromverbrauch im unteren µA-Bereich.  Wenn
mich nicht alles täuscht ist der kleinste AVR, der diese Möglichkeit
bietet, ein ATmega48.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren