Forum: Mikrocontroller und Digitale Elektronik PWM wird bei Watchdog Reset kurz unterbrochen ?


von Manfred (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Spezialisten,

ich habe folgendes Problem/Phänomen:

Ich nutze die PWM mit Timer 0 im ATtiny45 und gebe hierüber ein analoges 
Signal aus (mit Filter hinter dem PWM-Ausgang).

Weiterhin nutze ich den Watchdog, der so konfiguriert ist, dass er 
zyklisch 1x pro Sekunde einen Reset (nicht Interrupt) auslöst.

Der MCU wird nach einem Reset initialisiert und macht kurz eine Messung 
und aktualisiert dann den PWM-Ausgang, bevor er in den IDLE-Mode geht 
und auf den nächsten Watchdog-Reset "wartet".

Grundsätzlich funktioniert alles ganz prima, aber bei jedem 
Watchdog-Reset wird die PWM kurz (für einige ms)gestört und läuft erst 
dann wieder normal weiter. Auf dem Oszi ist zu sehen, dass der 
PWM-Ausgangspin dabei etwas oberhalb der halben Betriebsspannung hängen 
bleibt, anschließend kommt ein Tastverhältnis nahe 0 heraus und erst 
dann wieder das korrekte PWM-Signal, siehe Anhang.

Das passiert auch, wenn ich die Initialisierung des Timers gar nicht neu 
mache nach einem Reset. Ich war der Ansicht, dass der PWM-Ausgang 
eigentlich unbeirrt weiterlaufen müsste? Wie hängt das mit dem Watchdog 
zusammen?

Vielen Dank für Hinweise !

Manfred

von Reset ist Reset (Gast)


Lesenswert?

Wenn du eine Reset auslöst bekommst du einen Reset.
Warum nimmst du keinen WD-Timer.

von Manfred (Gast)


Lesenswert?

Ist denn ein Watchdog-Reset ein echter Reset oder nur ein Sprung nach 
Adresse 0x0000 ? Im Datenblatt kann ich dazu keine präzise Angabe 
finden.

von H.Joachim S. (crazyhorse)


Lesenswert?

Die Regels sind die Regels :-)
Ein watchdog-reset ist ein echter reset, setzt also auch die hardware 
zurück.  Du kannst zwar beim Neustart hinterfragen, was es war (Pin, POR 
oder WDR), aber es bleibt ein Reset.

von Georg (Gast)


Lesenswert?

Manfred schrieb:
> Das passiert auch, wenn ich die Initialisierung des Timers gar nicht neu
> mache nach einem Reset.

Und wann wird dann der Controller überhaupt initialisiert? Ohne 
Initialisierung wird er kaum funktionieren, und Reset ist Reset. Der WD 
löst das gleiche aus wie das erste Einschalten.

Das Ganze ist ein Missbrauch des WD, der ist nur für Notfälle da 
(Programm aufgehängt) und sollte im Betriebe NIEMALS ausgelöst werden.

Ein ordentlicher Programmierer verwendet dafür einen Timer.

Georg

von batman (Gast)


Lesenswert?

Manfred schrieb:
> Ich war der Ansicht, dass der PWM-Ausgang
> eigentlich unbeirrt weiterlaufen müsste? Wie hängt das mit dem Watchdog
> zusammen?

Kann er gar nicht, weil beim Reset des AVR (auch durch WD) die Ports als 
Eingänge geschaltet werden. Der Zustand wird dann auch ein Weilchen 
gehalten. Steht in der Chip-Doku genau beschrieben.

von Manfred (Gast)


Lesenswert?

Hallo zusammen,

vielen Dank für die Hinweise.

Ich habe den Watchdog in den Interrupt-Modus versetzt und nun lasse 
einen zyklischen Interrupt zum Aufwachen aus dem IDLE Mode zu. Damit 
läuft die PWM weiter und wird nicht unterbrochen.

Dass die Pins bei einem echten Reset hochohmig werden ist klar, es 
steht aber halt leider nirgends im Datenblatt, was genau bei einem 
Watchdog-Reset passiert.

Dann ist es offensichtlich tatsächlich so, dass alle Register, die 
Portpins etc. in den echten Reset-Zustand gebracht werden.

Nachteil ist jetzt natürlich, dass der Watchdog mit der 
Interrupt-Funktion belegt ist und nicht mehr für Notfälle zur Verfügung 
steht.

Viele Grüße,
Manfred

von Peter D. (peda)


Lesenswert?

Manfred schrieb:
> es
> steht aber halt leider nirgends im Datenblatt, was genau bei einem
> Watchdog-Reset passiert.

Das steht sowas von klar drin, klarer gehts nicht:

"8.2 Reset Sources
The ATtiny25/45/85 has four sources of reset:
• Power-on Reset. The MCU is reset when the supply voltage is below the 
Power-on Reset threshold (VPOT).
• External Reset. The MCU is reset when a low level is present on the 
RESET pin for longer than the minimum
pulse length.
• Watchdog Reset. The MCU is reset when the Watchdog Timer period 
expires and the Watchdog is enabled.
• Brown-out Reset. The MCU is reset when the supply voltage VCC is below 
the Brown-out Reset threshold (VBOT)
and the Brown-out Detector is enabled."

von Kolja L. (kolja82)


Lesenswert?

Manfred schrieb:
> Nachteil ist jetzt natürlich, dass der Watchdog mit der
> Interrupt-Funktion belegt ist und nicht mehr für Notfälle zur Verfügung
> steht

Wenn ich den Wachhund nachts mit ins Bett lasse, anstatt ihn den Hof 
bewachen zu lassen, steht seine Funktion eben auch nicht mehr für 
Notfälle zur Verfügung...

von batman (Gast)


Lesenswert?

Manfred schrieb:
> Nachteil ist jetzt natürlich, dass der Watchdog mit der
> Interrupt-Funktion belegt ist und nicht mehr für Notfälle zur Verfügung
> steht.

Das war ja vorher auch so. Der WD hat nur 1 Sprungziel.

von Christian M. (Gast)


Lesenswert?

Manfred schrieb:
> Nachteil ist jetzt natürlich, dass der Watchdog mit der
> Interrupt-Funktion belegt ist

Georg schrieb:
> Ein ordentlicher Programmierer verwendet dafür einen Timer.

!

Gruss Chregu

von Thomas E. (thomase)


Lesenswert?

batman schrieb:
> Der WD hat nur 1 Sprungziel.

Nein er hat zwei.

Wenn sowohl der Interrupt als auch der Reset eingestellt sind, werden 
beide nacheinander ausgeführt. In der zuerst ausgeführten Timer-ISR hat 
man natürlich die Möglichkeit, die Ausführung des Reset zu unterbinden. 
Man mag es ja kaum glauben, aber auch das steht im Datenblatt:

"
• Bit 6 – WDIE: Watchdog Timeout Interrupt Enable
When this bit is written to one, WDE is cleared, and the I-bit in the 
Status Register is set, the Watchdog Time-out
Interrupt is enabled. In this mode the corresponding interrupt is 
executed instead of a reset if a timeout in the
Watchdog Timer occurs.
If WDE is set, WDIE is automatically cleared by hardware when a time-out 
occurs. This is useful for keeping the
Watchdog Reset security while using the interrupt. After the WDIE bit is 
cleared, the next time-out will generate a
reset. To avoid the Watchdog Reset, WDIE must be set after each 
interrupt."

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Manfred schrieb:
> Nachteil ist jetzt natürlich, dass der Watchdog mit der
> Interrupt-Funktion belegt ist und nicht mehr für Notfälle zur Verfügung
> steht.

Thomas E. schrieb:
> Watchdog Reset security while using the interrupt. After the WDIE bit is
> cleared, the next time-out will generate a
> reset. To avoid the Watchdog Reset, WDIE must be set after each
> interrupt.

Dahin wollte ich auch :)
Das Bit für den Interrupt muß man jedes Mal neu setzen, sonst geht der 
nächste Wachhund zum Reset.
Wenn sich das Steinchen also aufhängt, wird auch korrekt resettet.

Deshalb musst Du das WDIE-Bit in der Main-Schleife erneut setzen.
Also im WD-ISR nur ein Flag setzen und in der Main das WDIE setzen.
So ist sichergestellt, daß Dein Programm richtig läuft bzw. erst bei 
einer Fehlprogrammierung, einem Festrennen in irgendeinem Programmteil, 
das WDIE-Flag nicht mehr gesetzt wird und der nächste WD statt des ISR 
ein Reset ausführt - Problem gelöst. Dauert halt zwei WD-Perioden.

MfG

von S. R. (svenska)


Lesenswert?

Manfred schrieb:
> Ich habe den Watchdog in den Interrupt-Modus versetzt und nun lasse
> einen zyklischen Interrupt zum Aufwachen aus dem IDLE Mode zu.

Warum nimmst du dafür keinen Timer?

von Manfred - der andere (Gast)


Lesenswert?

Manfred schrieb:
> Weiterhin nutze ich den Watchdog, der so konfiguriert ist, dass er
> zyklisch 1x pro Sekunde einen Reset (nicht Interrupt) auslöst.
Wie kommt man auf eine solche Idee, ich nenne es Unsinnsdesign.

von batman (Gast)


Lesenswert?

Und im Notfall sollte er dann einen Interrupt statt Reset auslösen.

von Thomas E. (thomase)


Lesenswert?

batman schrieb:
> Und im Notfall sollte er dann einen Interrupt statt Reset auslösen.

Du bist einfach nur eine ahnungslose Fledermaus.

von Peter D. (peda)


Lesenswert?

Mit dem Watchdoginterrupt kann man auch aus dem Power-Down aufwachen, 
d.h. im Gegensatz zum Idle braucht man nur ~30µA.

von Georg (Gast)


Lesenswert?

S. R. schrieb:
> Warum nimmst du dafür keinen Timer?

Das habe ich auch schon gesagt und einige andere auch (schon in der 
ersten Antwort), aber der TO ist da zu 100% beratungsresistent. 
Wahrscheinlich ist er mit den Begriffen Timer und Interrupt schon völlig 
überfordert.

Also Handtuch werfen, wegen Hoffnungslosigkeit.

Georg

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Und was unterscheidet nun den WD von einem Timer?
Ja ... der Timer löst kein Reset aus ... der WD hier im Moment aber auch 
nicht (mehr).

Also fangt doch bitte an und erzählt, nicht nur dem TO, die Vorteile 
einen Timer für so Sachen zu benutzen und nicht den eh sonst nutzlos 
rumliegenden WD den Kram erledigen zu lassen.

Aber ja, Das haben wir noch NIE so gemacht und Das ist gaaanz schlechter 
Stil werden wohl recht weit vorne in der Liste auftauchen.

MfG

von Thomas E. (thomase)


Lesenswert?

Patrick J. schrieb:
> Aber ja, Das haben wir noch NIE so gemacht und Das ist gaaanz schlechter
> Stil werden wohl recht weit vorne in der Liste auftauchen.

Wenn man nichts anderes als den Atmega8 kennt, bleibt das auch so.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Manfred schrieb:
> im ATtiny45

Immerhin nahe dran

Und nun? Einfach dumm sterben lassen?

von Thomas E. (thomase)


Lesenswert?

Patrick J. schrieb:
> Manfred schrieb:
>> im ATtiny45
>
> Immerhin nahe dran

Ich meinte, daß die mit dem Timer nur den Atmega8 kennen. Dessen WD kann 
nämlich nur Watchdog und nicht Timer.

von Georg (Gast)


Lesenswert?

Thomas E. schrieb:
> Ich meinte, daß die mit dem Timer nur den Atmega8 kennen. Dessen WD kann
> nämlich nur Watchdog und nicht Timer

Und ausser dem WD hat der keinen Timer?? So dass man unbedingt den WD 
für Timing-Aufgaben benutzen muss?

Georg

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Dich stört also, daß hier der WD benutzt wird, um den µC aufzuwecken, 
statt das Gelump über einen 'normalen' Timer zu realisieren?

hmm ... klingt nach einem bockigem Kind ... Lügen darf man nicht sagen 
... neeeee

;)

von Georg (Gast)


Lesenswert?

Patrick J. schrieb:
> Dich stört also

Was mich stört ist dass Thomas sich abschätzig und überheblich über die 
äussert, die fürs Timing einen Timer empfehlen:

Thomas E. schrieb:
> Ich meinte, daß die mit dem Timer nur den Atmega8 kennen

Es ist mir schon klar, dass das halt die übliche Internet-Pöbelei ist, 
aber deswegen muss man das ja nicht unkommentiert stehen lassen. Auch 
wenn das sicher dazu führt, dass Thomas hier weiter um sich schlägt.

Georg

von Rainer V. (Gast)


Lesenswert?

Hallo,
der WD wird eigentlich dazu benutzt, dass das Programm bei einem Fehler 
nicht im Nirvana verschwindet. Dazu setzt man das WD-Intervall auf einen 
Wert größer als die "normale" Laufzeit des Programms und setzt den WD an 
geeigneter Stelle zurück, so dass er im regulären Betrieb nie auslöst. 
Hat der WD dann doch ausgelöst, dann gab es einen Fehler und das 
Programm wird neu gestartet. Nun kann man entweder hoffen, dass der 
Fehler zukünftig nicht mehr auftritt oder eine Prüfung - wie auch immer 
- durchführen und den Fehler vielleicht finden und beheben.
Uneigentlich kann man natürlich alles anders machen und wundert sich 
manchmal...
Schöne Feiertage, Rainer

von batman (Gast)


Lesenswert?

Upps, ach deshalb hat der den Hundekuchen nicht angerührt!? :O

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.