-
        

Ergebnis 1 bis 7 von 7

Thema: Software-Reset?

  1. #1

    Software-Reset?

    Anzeige

    Gibt es eine möglichkeit, per software den PIC zu resetten? Ich hab ne Intrrupt-Routine, welche den PIC in einem bestimmten Intervall zurücksetzen soll falls die sortware mal hängenbleibt...
    Einfach aus der Interruptroutine an den Programmanfang herausspringen ist da natürlich nicht so schön. Oder hat jemand einen anderen Vorschlag?

    mfg

    [edit]
    hmm, hab noch was gefunden auf http://www.picbasic.org/forum/showth...oto=nextoldest:
    It all depends on the type of reset. If you want a full reset with all the pic regs going to there default state then you have to have a power out. Other wise just use @ goto 0
    Das scheint auch zu funktionieren. Nun habe ich aber bemerkt, dass ein kompletter Reset natürlich auch mit meiner einleitenden Init-Routine alle meine Register zurücksetzt. Gibt es nun eine möglichkeit, aus der Interrupt-Routine an einen beliebigen Ort zu springen? Das hauptproblem ist ja, dass die Rücksprungadresse der Interruptroutine noch im Stack ist. Kann man den Stack irgendwie löschen?

    mfg

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    jetzt mal abgesehen vom SoftwareReset,
    PICs haben doch auch einen Watchdog, sollte etwas einfacher gehen damit,
    welchen PIC verwendest DU ?

  3. #3
    benutze den 16F84

    [edit]
    Ist es auch möglich, den Watchdog Manuell auszulösen?

    Ich betreibe den PIC mit 4Mhz. Ein Befehl benötigt also 1ms.
    Der Watchdog wird alle 18ms ausgelöst (laut sprut, toleranzbereich 7ms...33ms).
    Jetzt müsste ich also nach jedem 7. Befehl den Watchdog zurücksetzen?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    26.07.2005
    Beiträge
    37
    Hallo mabuhay,

    wenn du deinen PIC mit 4 MHz taktest, dann sind das 1 Million instruction cycles pro Sekunde. Leider kenne ich deinen Typ nicht, aber ich gehe davon aus, dass er - wie die größeren - eine Befehls-Pipeline hat. Dann sind das bis zu 1 Million Befehle pro Sekunde. Ein Befehl dauert also ab 1 µs, nicht 1 ms.

    Viele Grüße,
    Bernhard

  5. #5
    Oh ja danke, da bin ich ein wenig mit den Stellen verrutscht.

    Ich hab das mit dem Watchdog nun versucht. Ich hab aber bemerkt, dass beim Reset, wenn die Init-Routine durchlaufen wird und wenn die I/O's wieder definiert werden, ich irgendein Signal an den Ausgängen habe.

    Gibt es nun irgend eine Möglichkeit, in bestimmten Zeitintervallen an eine bestimmte Stelle im Programm zu springen, und dann auch dort fortzufahren? Wenn ich den Timer verwende, sollte ich ja am ende der Interruptroutine wieder mit "retfie" an den Ort zurückspringen, an welchem der Interrupt eingesetzt hat...

    mfg

    [edit]
    Wird beim auslösen des Watchdog (wie beim Timer0 das TOIF) ein Interrupt-Flag gesetzt? Dann könnte ich dieses Flag abfragen. Die frage ist natürlich, ob dieses Flag bei PowerOn zurückgesetzt wird.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Ich bin jezt nicht aus der PIC-welt,
    aber beim AVR gibts ein Register, in dem man nach einem Reset nachschauen kann was der Grund des Resets war (zB. Watchdog, Power on, ext. Reset, Brown out ), und kann evtl. anders in der Init-Routine reagieren.
    Evtl. gibts das beim PIC auch (Das Statusregister scheint etwas dazu zu wissen) !?

  7. #7
    ja, ich hab was im Statusregister gefunden. Hab jetzt nur noch n kleines Problem mit dem Watchdog. Hab dazu hier (http://www.roboternetz.de/phpBB2/viewtopic.php?t=16520 ein neues Thema gestartet.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •