Abschaltung Watchdog bei ATtiny85 Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
Abschaltung Watchdog bei ATtiny85 |
|
|
|
|
BID = 676516
RaPe Gelegenheitsposter
Beiträge: 56 Wohnort: Radebeul
|
|
Hallo,
ich habe schon die Datenblätter durchwühlt, bin aber noch nicht darauf gestoßen, was ich suche.
Ich möchte einen µC an Batterien anschließen. Um Strom zu sparen, soll der µC im Power Down Modus arbeiten. Durch den Watchdog soll er aller 0,3Sekunden erwachen und mehrere Signale überprüfen. Im Normalfall (wenn keine Aktion erforderlich ist) soll er sich danach wieder für 0,3Sek. in den Power Down Modus versetzen. Und so weiter... funktioniert auch! PS: WDTON-Fuse habe ich aktiviert!
> .include "C:\ay85def.inc"
> .def Temp1 = R16
> RJMP Neustart (15x hintereinander)
> Neustart:
> LDI Temp1,0b00000000
> OUT DDRB,Temp1
> LDI Temp1,0b00000000
> OUT PORTB,Temp1
> LDI Temp1,0b00110000 ;Power Down wenn Sleep
> OUT MCUCR,Temp1
> LDI Temp1,0b00011000 ;Watchdog aktivieren
> OUT WDTCR,Temp1
> LDI Temp1,0b01000100 ;Watchdog einstellen auf 0,3s
> OUT WDTCR,Temp1
> SBIC PINB,2 ;Springe wenn Foto-Led dunkel
> RJMP Weiter
> SEI
> SLEEP ;Power Down Modus
> Stop:
> RJMP Stop ;Stop-Schleife hat keine Bedeutung
Mein Problem. Wenn er eine Aktion machen soll, kann die x Minuten dauern. In dieser Zeit darf der Watchdog natürlich nicht auslösen. Wie kann ich ihn rücksetzen, deaktivieren oder mal pausieren lassen?
Nachdem das Programm fertig ist, soll er wieder gestartet werden und alles von vorn beginnen.
> Weiter:
Watchdog aus ???????????????????????????????????
> LDI Temp1,0b00000001
> OUT DDRB,Temp1
> Start:
> weiteres Programm....
> RJMP Start
Watchdog wieder an ???????????????????????????????????
> SLEEP ;Power Down Modus
Ich habe schon verschiedene Einstellungen ausprobiert. Auch die Sachen wie sie im Datenblatt beschrieben sind:
LDI Temp1,0b00011000 ;Watchdog aktivieren
OUT WDTCR,Temp1
LDI Temp1,0b00000000 ;Watchdog aus
OUT WDTCR,Temp1
WDTON-Fuse habe ich auch deaktiviert, brachte alles keinen Erfolg. Ich bekomme ihn nicht zum Schweigen.
Selbst als ich alle Watchdog Befehle aus dem Programm geschmissen habe und den µC neu beschrieb, lief der Watchdog weiter und konnte erst durch eine Unterbrechung der Betriebsspannung zum Schweigen gebracht werden.
Wie kann ich also die Büchse der Pandora wieder verschließen, nachdem ich sie geöffnet habe? |
|
BID = 676582
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
|
geht's evtl.mit einem "normalen" timer?
Watchdog ist etwas unflexibel, der muss immer wieder getriggert werden, damit der watchdog nicht wieder zubeißt. Dies könnte auch in einer timergesteuerten Interrupt Routine geschehen, die zu Beginn der Bearbeitung gestartet und am Ende der Bearbeitung deaktiviert wird.
_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten! |
|
BID = 676598
RaPe Gelegenheitsposter
Beiträge: 56 Wohnort: Radebeul
|
Zitat :
hajos118 hat am 11 Mär 2010 15:25 geschrieben :
|
geht's evtl.mit einem "normalen" timer?
Dies könnte auch in einer timergesteuerten Interrupt Routine geschehen, die zu Beginn der Bearbeitung gestartet und am Ende der Bearbeitung deaktiviert wird.
|
Normaler Timer sieht schlecht aus. Im Power Down Modus aktivieren nur INT-Pins und der Watchdog den µC zum Leben.
Zitat :
hajos118 hat am 11 Mär 2010 15:25 geschrieben :
|
Watchdog ist etwas unflexibel, der muss immer wieder getriggert werden, damit der watchdog nicht wieder zubeißt.
|
Wie? Das klingt so wie das, was ich suche...
Von mir aus kann ich den aller zehn Befehle triggern, wenn es sein muss! Aber wie???
|
BID = 676599
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Zitat :
|
Von mir aus kann ich den aller zehn Befehle triggern, wenn es sein muss! Aber wie???
|
Mit der Instruktion wdr.
Damit wird der Wachhund zurückgesetzt.
Edit:
Du kannst außerdem im Register WDTCR die Bits WDE und WDIE (Interrupt statt Reset) zurücksetzen (auf '0'). Dann ist der Watchdog solange deaktiv, bis er wieder angeschaltet wird. Siehe dazu unbedingt auch Kapitel 8.2.1 im Datenblatt (und zwar das gesamte, nicht die Zusammenfassung!).
_________________
[ Diese Nachricht wurde geändert von: DonComi am 11 Mär 2010 16:36 ]
|
BID = 676606
RaPe Gelegenheitsposter
Beiträge: 56 Wohnort: Radebeul
|
Das Abschalten habe ich schon versucht mit:
LDI Temp1,0b00011000 ;Watchdog aktivieren
OUT WDTCR,Temp1
LDI Temp1,0b00000000 ;Watchdog aus
OUT WDTCR,Temp1
Entweder habe ich da was falsch verstanden oder ...
Aber trotzdem !!! Manschmal sieht man eben den Wald vor lauter Bäumen nicht. " WDR" hundert mal gelesen, aber nie verstanden, dass das ein Befehl sein soll. Ich gehe mal davon aus, dass ich die Lösung jetzt habe.
Danke nochmal
Falls jemand mir sagen kann, welche Befehle ich wie anordnen muss um den Watchdog anzuhalten, wäre auch schön. (Meine Idee siehe oben -> geht ni)
|
BID = 676611
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Moin,
Zitat :
|
Das Abschalten habe ich schon versucht [...]
|
Ja, du hast aber auch WDTON programmiert - dann lässt sich der WDT nicht einfach abschalten.
WDTON muss unprogrammiert sein, dann kann man den WDT trotzdem anschalten. Das sind "safety levels", damit man ihn nicht Aus versehen abschalten kann.
Ist WDTON programmiert, muss man eine bestimmte Sequenz ausführen, damit der WDT richtig abgeschaltet wird, siehe auch weiterhin Kapitel 8.2.3 und das hier:
Zitat :
|
• Bit 3 – WDE: Watchdog Enable
When the WDE is written to logic one, the Watchdog Timer is enabled, and if the WDE is written
to logic zero, the Watchdog Timer function is disabled. WDE can only be cleared if the WDCE bit
has logic level one. To disable an enabled Watchdog Timer, the following procedure must be
followed:
1. In the same operation, write a logic one to WDCE and WDE. A logic one must be writ-
ten to WDE even though it is set to one before the disable operation starts.
2. Within the next four clock cycles, write a logic 0 to WDE. This disables the Watchdog.
In safety level 2, it is not possible to disable the Watchdog Timer, even with the algorithm
described above. See “Timed Sequences for Changing the Configuration of the Watchdog
Timer” on page 44.
In safety level 1, WDE is overridden by WDRF in MCUSR. See “MCU Status Register –
MCUSR” on page 39 for description of WDRF. This means that WDE is always set when WDRF
is set. To clear WDE, WDRF must be cleared before disabling the Watchdog with the procedure
described above. This feature ensures multiple resets during conditions causing failure, and a
safe start-up after the failure.
Note: If the watchdog timer is not going to be used in the application, it is important to go through a
watchdog disable procedure in the initialization of the device. If the Watchdog is accidentally
enabled, for example by a runaway pointer or brown-out condition, the device will be reset, which
in turn will lead to a new watchdog reset. To avoid this situation, the application software should
always clear the WDRF flag and the WDE control bit in the initialization routine.
|
_________________
[ Diese Nachricht wurde geändert von: DonComi am 11 Mär 2010 17:15 ]
|
BID = 676697
Tim Taylor Schriftsteller
Beiträge: 617 Wohnort: Seefeld / Hechendorf
|
Nur der Vollständigkeit halber:
Hier ist die Behandlung des Wachhundes recht anschaulich beschrieben.
Ralfi
_________________
Echte Männer essen keinen Honig. Sie kauen Bienen.
Geht nicht gibts nicht- es sei denn, es geht nicht!!
|
BID = 676698
RaPe Gelegenheitsposter
Beiträge: 56 Wohnort: Radebeul
|
Also, wenn ich das jetzt richtig verstehe:
Code : |
Abschaltung Watchdog nur möglich wenn Fuse-Bit ausgeschalten!?!?
WDR
CLR Temp1
OUT MCUSR,Temp1
LDI Temp1,0b00011000 ;Watchdog aktivieren
OUT WDTCR,Temp1
CLR Temp1 ;Watchdog aus
OUT WDTCR,Temp1
|
|
Ist das jetzt richtig???
|
BID = 676717
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Zitat :
RaPe hat am 11 Mär 2010 16:25 geschrieben :
|
Zitat :
hajos118 hat am 11 Mär 2010 15:25 geschrieben :
|
geht's evtl.mit einem "normalen" timer?
Dies könnte auch in einer timergesteuerten Interrupt Routine geschehen, die zu Beginn der Bearbeitung gestartet und am Ende der Bearbeitung deaktiviert wird.
|
Normaler Timer sieht schlecht aus. Im Power Down Modus aktivieren nur INT-Pins und der Watchdog den µC zum Leben.
...
Wie? Das klingt so wie das, was ich suche...
Von mir aus kann ich den aller zehn Befehle triggern, wenn es sein muss! Aber wie???
|
Trigger doch den Watchdog in einem Zeitinterrupt.
Diesen Timer kannst Du zu Anfang Deiner "Arbeitsroutine" aktivieren und am Ende wieder deaktivieren und anschließend in den Sleep fallen.
Läuft dan folgendermaßen ab:
Watchdog wird regelmäßig aktiviert und überprüft den externen Pin.
- a) wenn nix passieren soll, dann zum sleep
- b) wenn Arbeit verrichtet werden soll, dann
- b1) aktiviere timer Interrupt mit Watchdog - trigger Befehl (wdr) darin
- b2) bearbeite den signalisierten Zustand, währenddessen wird in der Timer Routine ständig der watchdog gefüttert, damit er nicht beißt.
- b3) Ende der Bearbeitung deaktiviere den Timer von b1)
- c) sleep (bis zum nächsten Watchdog - Biß
happy programming!
_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!
|
BID = 676725
RaPe Gelegenheitsposter
Beiträge: 56 Wohnort: Radebeul
|
Hallo hajos118,
Der Zeitpunkt zum Triggern war nie mein Problem. Mein Problem bis jetzt war, dass ich das "WDR" im Datenblatt nur als Beschreibung und nicht als Befehl interpretiert hatte.
Dank der Mithilfe von anderen, konnte ich den WDR Befehl schon erfolgreich einbauen. Mein Problem wäre damit schon geklärt.
Interessenhalber wäre es aber noch gut zu wissen, wie man den Watchdog wieder ausschalten kann.
Laut Datenblatt meine ich so:
Code : |
Abschaltung Watchdog nur möglich wenn WDTON-Fuse-Bit ausgeschalten!?!?
WDR
CLR Temp1
OUT MCUSR,Temp1
LDI Temp1,0b00011000 ;Watchdog aktivieren
OUT WDTCR,Temp1
CLR Temp1 ;Watchdog aus
OUT WDTCR,Temp1
|
|
Nur als ich das schon mal probierte, funktionierte es nicht wirklich. Wad mach ich falsch?
|
BID = 676800
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Ist WDTON programmiert?
Wenn ja, dann gilt folgendes:
>> " In safety level 2, it is not possible to disable the Watchdog Timer, even with the algorithm
described above."
Du kannst höchstens mit der Prozedur beschrieben in Kapitel 8.3.2. (siehe oben) das Timerintervall ändern, aber den WD nie abschalten.
Das geht nur (sogar standardmäßig) im Safety Level 1, also mit WDTON unprogrammiert.
Im zweiten Level (WDTON programmiert) kannst du höchstens mit der "Timed Sequence" nach 8.3.2. den Timerintervall ändern.
Aber lass doch gut sein; wenn du genügend Zeit hast, den WD immer rechtzeitig zurückzusetzen ist doch alles in Ordnung. Andernfalls musst du eben WDTON unprogrammiert lassen und zu Beginn des Programmes den WD per Software aktivieren (siehe Kapitel 8.3.1. ff.) und ihn ggfs. wieder abschalten, wenn die Zyklen zwischen den wdr-Instruktionen größer als das maximale Zeitintervall des WD (immerhin ca. 8s) werden.
Edit:
Also für den ursprünglichen Anwendungsfall eines Watchdogs völlig schwachsinnig .
Aber mir ist bewusst, dass der WD hier als "Weckhund" eingesetzt wird
_________________
[ Diese Nachricht wurde geändert von: DonComi am 12 Mär 2010 18:06 ]
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag heute wurden bisher 20 Beiträge verfasst © x sparkkelsputz Besucher : 182391473 Heute : 6209 Gestern : 6874 Online : 836 24.11.2024 19:35 10 Besucher in den letzten 60 Sekunden alle 6.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0711958408356
|