Hallo,
ich betreibe einen ATtiny13 in dem Stromspar-Modus, wo er nur einen
Strom von 5uA aufnimmt (sog. Watchdog Betrieb). Code siehe unten. Die
LED blinkt alle 2 Sekunden für 50ms auf. Leider ist ca. 2 Sekunden das
höchste, was man einstellen kann. Was muss man tun, um die 2 Sekunden
auf 24 Stunden zu verlängern? -Als Beispiel könnte man ein Rasensprenger
nennen, der einmal täglich anspringt, und für 1 Stunde den Rasen
sprengt.
Wenn er aufwacht, eine Variable hochzählen, und dann wieder
schlafenlegen. Wenn die Variable eine bestimmten Wert erreicht, dann
irgendwas tun und die Variable wieder auf Null setzen...
Du musst dann allerdings den Watchdog so einstellen, dass er keinen
Reset auslöst, sondern nur einen Interrupt auslöst, der den AVR wieder
weckt.
PS: wenn es wirklich auf dauerhaften Batteriebetrieb ankommt, solltest
du auf einen neueren AVR wie den Tiny25/45/85 umsteigen. Da ist der
Stromverbrauch nochmal deutlich niedriger, sowohl aktiv als auch im
Stromsparmodus.
Hallo,
habe gelesen, dass das Aufwachen des Mikrokontrollers quasi einem
"Reset" entspricht. -Würde die Variable nicht alle 2 Sekunden gelöscht
werden, wenn der Controller "aufwacht"?
>Würde die Variable nicht alle 2 Sekunden gelöscht>werden, wenn der Controller "aufwacht"?
Ja. Du musst den Watchdog von Reset auf Interrupt
umschalten. Wie das geht steht im Datenblatt.
Das lässt sich zum einen verhindern, indem man die Variable nicht
automatisch beim neustart des Controllers mit Null initalisieren lässt.
Das RAM wird nämlich nicht durch eine Hardware-Reset gelöscht, das macht
den Programm automatisch.
Besser wäre es aber, den Watchdog nur einen Interrupt und keine Reset
auslösen zu lassen. Ich bezweifle aber, dass das von Bascom so
unterstützt wird. Also: ins Datenblatt schauen und die Register selbst
setzen!
Hallo Daniel,
Uwe hat das mit dem Hochzählen schon gesagt.
Aber beim Wechsel reicht bereits das Verwenden des
ATTiny13A. Der A ist die neuere Variante (andere
Fertigungslinie) mit weniger Stromaufnahme und
zusätzlichen Sparfunktionen.
Der Umstieg lohnt sich.
avr
>>Ja. Du musst den Watchdog von Reset auf Interrupt>>umschalten. Wie das geht steht im Datenblatt.
Kann man den Watchdog mit Hilfe der Fusebits von "Reset" auf "Interrupt"
umschalten? In meinem "MCS Universal Programmer" werden derzeit 10
Fusebits gelistet (siehe beigefügte Grafik).
>Kann man den Watchdog mit Hilfe der Fusebits von "Reset" auf "Interrupt">umschalten?
Nein, das ist keine Sache der Fusebits, sondern kann über das
I/O-Register WDTCR konfiguriert werden. Mein Geheimtipp: Mal das
Datasheet vom ATtiny13 lesen, da steht das nämlich alles drin ;-)
Hallo,
könnte man die Variablen alternativ in den (64 Byte grossen)
EEprom-Bereich des ATtiny13 schreiben?
Dann bräuchte man vielleicht gar nicht von dem "Reset-Modus" auf den
"Interrupt-Modus" umzuschalten.
Können schon, es wäre nur nicht klug. Das EEPROM ist dafür nicht
geeignet, weil die Anzahl der Schreibzyklen bei diesem Speichertyp aus
technischen Gründen begrenzt ist. Garantiert werden laut Datenblatt
"100.000 Write/Erase Cycles". Wenn Du eine Zelle alle 2 Sekunden
beschreibst, hält die Chose keine Woche (rechne es selbst aus). Das
EEPROM ist zum dauerhaften - heißt: über Stromlosigkeit hinweg -
Speichern von Geräteeinstellungen, Kalibrierparametern etc. gedacht.
Also Sachen, die sich nur selten ändern.
Aber wozu ein EEPROM, wenn es das SRAM gibt? Da kannst Du Deine
Zählvariable doch allerbestens zwischenspeichern und die Tatsache
ausnutzen, dass der SRAM-Inhalt von einem Reset nicht angetastet wird
(anders als die Register).
Oder ist Dir das SRAM unsympathisch? ;-)