Forum: Mikrocontroller und Digitale Elektronik ATtiny13 als Watchdog (BASCOM)


von Daniel W. (pegasus)


Angehängte Dateien:

Lesenswert?

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.

1
 'Bascom Projekt
2
  'mit Attiny13
3
  '*************************************
4
  'Led-Blinker
5
  ' Watchdog mit 5µA Stromaufnahme
6
  '  LED an PortB.4
7
  '   Einstellbare Zeiten 16,32,64,128,256,512,1024,2048 Millisek.
8
  '*************************************
9
10
11
  $regfile = "ATtiny13.dat"
12
  $crystal = 1200000
13
14
Config Portb.4 = Output
15
16
'Watchdog Reset nach ca. 2s
17
Config Watchdog = 2048                                      'Watchdog-Zeit in Millisekunden
18
Start Watchdog
19
20
Portb.4 = 1
21
Waitms 50
22
Portb.4 = 0
23
Powerdown
24
25
End

von Daniel W. (pegasus)


Angehängte Dateien:

Lesenswert?

Bild 2

von Daniel W. (pegasus)



Lesenswert?

Bild 3

von Uwe .. (uwegw)


Lesenswert?

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.

von Daniel W. (pegasus)


Lesenswert?

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"?

von holger (Gast)


Lesenswert?

>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.

von Uwe .. (uwegw)


Lesenswert?

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!

von avr (Gast)


Lesenswert?

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

von Daniel W. (pegasus)


Angehängte Dateien:

Lesenswert?

>>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).

von Gast (Gast)


Lesenswert?

>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 ;-)

von Daniel W. (pegasus)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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? ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.