Hallo, in meinem Programm für den 16F84A möchte ich mal den Watchdog benutzen, wenn es diese Funktion schon gibt. So wie ich das sehe, muß ich das PSA-Bit setzen, aber dann geht TMR0 nicht mehr, oder? Ich brauche aber den Timer. Wenn ich dann auch noch das entsprende config-Bit setze, mußt der WDT eingeschaltet sein. Und wie geht es dann weiter? Muß ich dann in zyklischen Abständen im Programm das \TO-Bit abfragen? Ein kurzer Beispielcode wäre sehr hilfreich Gruß Thomas
Thomas M. schrieb: > So wie ich das sehe, muß ich das > PSA-Bit setzen, Nein du mußt nicht. mit dem Bit wird lediglich festgelegt ob der Timer den Prescaler verwendet oder der Watchdog. (Beides geht nicht). Thomas M. schrieb: > Wenn ich dann auch noch das entsprende config-Bit setze, mußt > der WDT eingeschaltet sein. richtig. Thomas M. schrieb: > Muß ich dann in > zyklischen Abständen im Programm das \TO-Bit abfragen? nein, du rufts in zyklischen Abständen im Hauptprogramm (nicht Interrupt) CLRWDT auf. Das ganze sollte so gestaltet sein daß der Aufruf nur dann erfolgt wenn alle wichtigen Programmteile auch zyklisch abgearbeitet werden. Gruß Anja
Anja schrieb: > Thomas M. schrieb: >> So wie ich das sehe, muß ich das >> PSA-Bit setzen, > > Nein du mußt nicht. mit dem Bit wird lediglich festgelegt ob der Timer > den Prescaler verwendet oder der Watchdog. (Beides geht nicht). Ist es ein Problem, wenn der Timer den Prescaler benutzt und der Watchdog nicht? Wie ich schon schrieb, ich brauche den Prescaler für den Timer. > nein, du rufts in zyklischen Abständen im Hauptprogramm (nicht > Interrupt) CLRWDT auf. Das ganze sollte so gestaltet sein daß der Aufruf > nur dann erfolgt wenn alle wichtigen Programmteile auch zyklisch > abgearbeitet werden. Ok, und in welchen Abständen, bzw. wie kriegt man die raus? Ich schätze mal, das hängt an der Quarzfrequenz Thomas
Thomas M. schrieb: > Ok, und in welchen Abständen, bzw. wie kriegt man die raus? Ich schätze > mal, das hängt an der Quarzfrequenz Steht im Datenblatt. Ohne Prescaler warens glaub ich so minimal 7 ms. Gruß Anja
Alle 18ms wird er ausgelöst. Hat mit dem externen Quarz nichts zu tun. Siehe Datenblatt.
Hi, Stefan schrieb: > Alle 18ms wird er ausgelöst. Hat mit dem externen > Quarz nichts zu tun. > Siehe Datenblatt. Naja, indirekt hat es schon mit dem externen Quarz zu tun. Der WDT hat freilich seinen eigenen, völlig unabhängigen, internen Oszillator der dafür sorgt das ungefähr alle 18ms? (nicht selbst ins DB geschaut) ein impuls ausgelöst wird. Dieser kann dann wahlweise durch den Teiler geleitet werden oder würde ohne rücksetzen direkt einen Reset auslösen. Dieser absolute Zeitabstand ist also völlig vom Quarz unabhängig. Je schneller aber der externe Quarz ist, um so schneller werden die BEfehle abgearbeitet. Übersetzt bedeutet das, das man mehr sonstige Befehle zwischen zwei "clrwdt" belassen kann. Es ist also die Frage ob es zu schaffen ist das in dem Program zwischen zwei CLRWDT egal in welchem "normalen" Betriebszustand niemals mehr als 18ms liegen. Klappt das, so kann man problemlos den WDT ohne Vorteiler betreiben. Bei 4Mhz oder mehr Taktfrequenz ist das oft überhaupt kein Problem. Betreibt man den Pic aber nur mit 37KHz Uhrenquarz (bei den allerersten "L" Typen z.B. üblich gewesen wenn man wirklich "LowPower" haben wollte) kann es schon verdammt eng werden. Gerade wenn man viel mit Verzweigungen arbeitet die sich letztendlich ja nur mit btfsc/btfss befehlen realisieren lassen und eine gewisse Abfolge von Befehlen in zwingender ununterbrochender Reihenfolge von Flag Manipulationen und Befehlsaufrufen erfordern ein echter Knackpunkt ;-) Gruß Carsten
Vielen Dank! Stimmt, ich habe die 18 ms gefunden. Bei meiner Schleifendauer von 100µs reicht tatsächlich ein einziges clrwdt am Anfang der mainloop, egal welche Verzweigung mein Programm nimmt Gruß Thomas
Thomas M. schrieb: > Stimmt, ich habe die 18 ms gefunden. das ist nur die typische Zeit. Wenn Du sichergehen willst daß der Watchdogreset nicht versehentlich getriggert wird solltes Du immer die minimum Zeit von 7 ms als Kriterium verwenden. Gruß Anja
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.