PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tiny 13 - Watchdog zum Aufwecken



Windi
05.02.2006, 23:05
Hallo, ich bin neu hier im Forum und fall mal gleich mit der Tür ins Haus (dazu ist ein Forum ja da).

Ich versuche gerade ein Programm auf Energieersparnis hin zu optimieren.
Deshalb will ich den Prozessor "Schlafen schicken", statt "Wait" entweder per "Idle" oder per "Powersave".
Laut Datenblatt vom Tiny13 kann man den Watchdog entweder so konfigurieren dass er nach Ablauf der WD-Zeit entweder einen Reset ausführt oder einen Interrupt (ohne Reset) auslöst.
Mir ist es bisher leider nicht gelungen per Bascom den WD so zu konfigurieren dass er keinen Reset auslöst. Bei meinen Recherchen im Netz bin ich auf folgende Infos gestoßen:

http://atmel.com/dyn/resources/prod_documents/doc2551.pdf
http://atmel.com/dyn/resources/prod_documents/AVR132.zip

Leider bin ich in C nicht so fit. Wie müsste man das in Bascom schreiben?

Dann hab ich noch ein seltsames Phänomen das ich mir auch nicht erklären kann.
Wenn ich in Bascom den WD mit "Start Watchdog" starte läßt er sich mit "Stop Watchdog" nicht mehr anhalten. Selbst wenn ich das Programm ohne die "Start Watchdog"-Anweisung kompiliere und neu in den Chip lade ist der WD aktiv. Erst wenn ich ihn ein paar Sekunden vom Strom nehme hält der WD an.
Es würde mich sehr freuen wenn jemand eine Lösung für mein(e) Problem(e) hätte.

Windi

Ratber
05.02.2006, 23:25
Vermutlich läufst du auf die verminderte Unterstützunge für die kleinen Tinys auf.

Versuch es mal den Watchdog über die Register zu steuern.

Windi
05.02.2006, 23:27
Versuch es mal den Watchdog über die Register zu steuern.
Das sagst Du jetzt so einfach. :-k

Ratber
05.02.2006, 23:41
Also das sieht nur schwer aus, oder besser gesagt,etwas Wirr.

Schau mal ins Datenblatt und such nach Watchdog.

Da findeste schonmal raus wie das betreffende Register heist (WDTCR) und wie dur es Manipulieren kannst.
Da findet sich übriugens auch das Bit zum Ein/Ausschalten des Resets.

Dann noch schnbell in die "Register Sumary" gelinst welche Nummer das Register hat und merken)

Danach schauste im Bascom-Verz. nach der Dat für den Tiny13 und schaust se dir an.

Dort suchste nach dem Registernamen und vergleichst ob die Registernummer stimmt.

Sollte der Namen nicht da sein dann suchste nach der Nummer und schaust wie das Register in Bascom heist.
Damit kannst du dann in Bascom arbeiten.

Also WDTCR =$21

In diesem Falle und bei der Verion 82 von Bascom ist dem so.

Im Code kannste mit "WDTCR=&b01010101" die einzelnen Bits ganz einfach Manipukieren.(Das Bitmuster im Beispiel ist nur zufällig.)

Es kommt ab und an vor das Bascom die Befehle nicht zu den Registern umsetzen kann dann muß man eben per Hand weitermachen.

Windi
07.02.2006, 12:17
Danke für die Hilfe. Mit dem direkten Setzen der WDTCR-Bits hat es geklappt.

Das Ergebnis kann sich glaube ich sehen (bzw. messen) lassen.

Stromaufnahme während WAIT-Befehl: 50 Mikroampere
Stromaufnehme während IDLE-Befehl: 15 Mikroampere
Stromaufnehme während POWERDOWN-Befehl: 5 Mikroampere

Versorgungsspannung: 3,0 Volt

Ratber
07.02.2006, 13:59
Ja,das sieht schon gut aus.