Forum: Mikrocontroller und Digitale Elektronik 16F84 und WDT


von Binnesmann (Gast)


Lesenswert?

Hallo,

kämpfe gerade mit einer simplen Sache - Komme aber nicht auf eine
Lösung.

Ich möchte aus der Software einen Reset erzwingen ohne einen Portpin
dafür zu Opfern. Jetzt habe ich mir gedacht, der WDT läuft. Den kann
ich dazu missbrauchen. Jetzt habe ich nur das Prob, das selbst wenn ich
den Prescaler änder, bzw. den Zähler schon auf FFh setze, der WDT den
Pic erst wieder beim normalen nächsten Auslösen Resetet.

Denke ich zu kurz - oder zu weit? Ich möchte einfah nicht ca. 1,5 sek.
warten, weil ich ja nicht weiß wie lange der Zähler schon läuft.

Danke Binnesmann

von Steffen (Gast)


Lesenswert?

Den Zähler kannst Du aus der Software heraus nicht ändern, da der WDT
völlig unabhängig vom Rest des PIC´s arbeitet.

Warum springst Du nicht einfach an den Programmstart (goto 0x00)?

Steffen

von Binnesmann (Gast)


Lesenswert?

Hallo,

ich bin mir da nicht sicher wie tief ich im "Dschungel" des Stacks
stecke. Um alles wieder jungfräulich zu haben, dachte ich mir, das
dieser Weg wohl der beste und einfachste wäre.

Gruß

Binnesmann

von Steffen (Gast)


Lesenswert?

Wenn das Programm sauber geschrieben ist, dann sollte es doch irgendwo
eine MainLoop geben. Dort könnte man dann ein Flag auswerten, welches
irgendwo im Unterprogramm gesetzt wird, und dann auf 00 springen. Der
Stack sollte dann eigentlich lehr sein.

Steffen

von Binnesmann (Gast)


Lesenswert?

Gar nicht so dumm....

Wie gesagt war gestern schon spät und nach 2 Stunden vor so einem
Problem sieht man den Wald vor Bäumen nicht.

Danke

Binnesmann

von Peter D. (peda)


Lesenswert?

Springe einfach nach 0000, der Stack interessiert nicht.

Hat die CPU einen Hardwarestack (z.B. PIC), so ist es egal, wo der
steht, man kann unendlich viel CALLen. Und eben nur die letzten 2 (8)
bleiben erhalten, d.h. von dort kanns auch wieder RETurn gehen.


Und CPUs mit Softwarestack (z.B. AVR) müssen diesen eh initialisieren.


Peter

von Steffen (Gast)


Lesenswert?

@Peter

Das ist zwar so richtig, es ist aber nicht gerade die saubere Art der
Programmierung.

Ich würde mich jedenfalls nicht darauf verlassen, das es immer
funktioniert.

Steffen

von Peter D. (peda)


Lesenswert?

Zumindest lt. Datenblatt ist es so.

Ist ja auch sinnvoll. Wenn schon ein Hardwarestack, d.h. kein
Softwarezugriff möglich, dann sollte er auch quasi selbstreparierend
sein.
Ich vermute mal, der wird beim Reset garnicht auf Null gesetzt, sondern
steht einfach irgendwo.



Peter

von Steffen (Gast)


Lesenswert?

Auf jeden Fall wird dann die Emulation nicht funktionieren, da z.B. beim
ICE2000 (jedenfalls bei einigen Prozessormodulen) der Stack nicht als
echter Ringpuffer integriert ist. Der nimmt auch mal 10 Werte auf. Er
meldet sich zwar, das der Stack übergelaufen ist aber wenn man die
Meldung abschaltet ...

Gar nicht mal so schlecht wenn man dann eine Stacktiefe von 10 oder
mehr zur Verfügung hat. Nur im Zielsystem mit Prozessor sieht´s dann
nicht so gut aus :-(.

Wie gesagt, auf solche Sachen würde ich lieber verzichten und etwas
"sauberer" programmieren.

Steffen

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.