• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Programmfrage - Pausezeiten ?

Timi

Geonewbie
Hallo Forum!

Komme gleich zur sache.
Versuche gerade die Basics zu verstehen um an meine Reaktivlichter ein wenig an zu passen.

Bin beim Stöbern auf die "Morse" variante gestossen, hier auch schon meine Frage.

Der Code für die On, Off bzw. Pause Zeiten wird hier so gelöst.

Code:
Kurz:
Portb.3 = 1
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Portb.3 = 0
Reset Watchdog
Powerdown
Return

Lang:
Portb.3 = 1
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Portb.3 = 0
Reset Watchdog
Powerdown
Return

Leer:
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Return

Nun habe ich aber gelesen das man den "Watchdog" (das verstehe ich auch noch nicht ganz) so selten wie möglich reseten soll. Währe hier ein
Code:
wait 1
oder so nicht einfacher?
Oder gibt es einen Grund für diese wahl?

Danke Timi
 

TeamAdolzfurt

Geomaster
Stichwort: "active waiting".

Es gibt Bibliotheken, mit denen man irgendwelche (einstellbaren) Zeiten warten kann. Dabei rennt der Prozessor in einer (ausgezählten) Schleife, bis die erwünschte Zeit rum ist. Dabei macht er nix anderes und braucht Strom. Wichtig dabei ist, daß man irgendwo den Takt des Prozessors ablegen muss, damit die Schleifenzählerei auch stimmt.

Die andere Methode ist es, den Watchdog zu benutzen. Das ist ein Teil des Prozessors, der weiterläuft, auch wenn der restliche Prozessor im Tiefschlaf liegt (und damit keinen Saft braucht). Der hat die Fähigkeit, den Rest wieder aufzuwecken (und hat den höchstprioren Interrupt). Der Watchdog hat seinen eigenen, sparsamen Oszillator mit 128kHz (der allerdings auch den Rest takten kann, so man denn will). Typischerweise sagt man dem Watchdog "in 128ms wecken" und legt den Prozessor schlafen. Die Signale an den Ausgängen bleiben, wie sie sind. Nach 128ms kommt der Watchdog-Interrupt (der in dem Fall keine eigene Interrupt-Serviceroutine hat) und der Prozessor wacht auf. Er macht dann im Programm hinter der Zeile weiter, in der er schlafen gelegt wurde. Die Schlafenszeiten sind recht grob gestuft und max 8s lang.

Vorteil des ganzen: Stromsparen. Was jetzt besser ist, scheidet die Geister. Ich persönlich nutze aktives Warten immer dann, wenn irgendwelche Verbraucher (z.B.LED) arbeiten. Dann wirkt das bisschen Stromsparen nur lächerlich. Andererseits macht es ggf. Monate in der Batterielebensdauer aus, ob ein Prozessor die ganze Zeit schläft und nur ganz kurz wach wird oder ob er tage- oder monatelang rundläuft. So ein Reaktivlicht schläft zu 99.9999999999999% der Zeit....

Tu Dir selber einen Gefallen, geht rüber zu http://www.mikrocontroller.net/ und lies Dir paar Artikel zum AVR durch, damit Du mal einen Überblick über das ganze kriegst. Vielleicht überlegst Du Dir auch, mal den gcc und das drumherum anzuschauen. Basic ist auf den ersten Blick _viel_ einfacher, auf den zweiten leider zu einfach. Sprich: manches geht nur von hinten durch den Hals in die Brust, Gcc am Anfang etwas schwieriger,aber ungleich leistungsfähiger. Das Gcc-Tutorial auf http://www.mikrocontroller.net/ ist sehr gut.

MaJa
 
OP
T

Timi

Geonewbie
Danke für die Ausführliche Antwort!

Wer mal "drüben" schmökern.

Timi
 

stonewood

Geowizard
Timi schrieb:
Nun habe ich aber gelesen das man den "Watchdog" (das verstehe ich auch noch nicht ganz) so selten wie möglich reseten soll. Währe hier ein
Code:
wait 1
oder so nicht einfacher?
Oder gibt es einen Grund für diese wahl?

ich frag' mich nur wo Du das mit dem Watchdog gelesen hast? TeamAdolzfurt hat ja schon mal angerissen warum watchdog und nicht 'wait'.

Übrigens kann man den Watchdog auf diverse Wartezeiten programmieren, das mehrfache 'Reset Watchdog - powerdown' ist also nicht unbedingt nötig.
 
Oben