www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16F84 und WDT


Autor: Binnesmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Binnesmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Binnesmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.