Ich hab nun nach diesem Thema (https://www.roboternetz.de/phpBB2/viewtopic.php?t=16501) ein neues gestartet.
Ich hab nun mit dem Watchdog einen Periodischen Reset. Ich hab auch von http://www.interq.or.jp/japan/se-inoue/e_pic2_1.htm herausbekommen, dass im Statusregister das TO-Bit auf 0 gesetzt wird, wenn der Watchdog ausgelöst wird.
Hier ein Ausschnitt aus meinem Quellcode:
Hab ich dese Init-Routine, wird der Watchdog nur einmal ausgeführt, und zwar dann wenn ich den PIC an die Versorgungsspannung anschliesse. Also wenn ich die Sumulation mit MPLAB durchführe, funktionierts, lass ichs aber auf dem PIC laufen, funktionierts nicht (Das ausführen des resets zeige ich mit LED's an). Kommentiere ich aber die zwei ZeilenCode:Init btfss STATUS_TO ; Ist das TO-Bit im Statusregister nicht gesetzt, wurde der goto reset ; Watchdog ausgelöst und die Initialisierung der Ports und ; des Timers wird übersprungen. ; 250 Hz-Timer-Interrupt einstellen bsf STATUS, RP0 ; auf Bank 1 umschalten movlw B'10001110' ; internen Takt zählen, Vorteiler für WDT verwenden movwf OPTION_REG bcf STATUS, RP0 ; auf Bank 0 zurückschalten ;bcf INTCON, T0IE ; Timer0 interrupt noch nicht erlauben ; Ports einstellen BSF STATUS, RP0 ; auf Bank 1 umschalten BCF T_ROT_OUT ; Port RA0 auf Ausgang schalten BSF T_ROT_IN ; Port RA1 auf Eingang schalten BSF T_WEISS_IN ; Port RA2 auf Eingang schalten BCF T_WEISS_OUT ; Port RA3 auf Ausgang schalten BCF T_STATUS_LED ; Port RA4 auf Ausgang BCF TRISB, 0 ; Ausgang BCF TRISB, 1 ; Ausgang BSF TRISB, 2 ; Eingang IR-Empfänger BCF TRISB, 3 ; Ausgang BSF TRISB, 4 ; Eingang BSF TRISB, 5 ; Eingang Schalter 1 BCF TRISB, 6 ; Ausgang BCF TRISB, 7 ; Ausgang BCF STATUS, RP0 ; auf Bank 0 zurückschalten bcf STATUS_LED ; Anzeige Power-on-Reset OK call Wait bsf STATUS_LED call Wait bcf STATUS_LED call Wait bsf STATUS_LED call Wait goto reset
aus, wird der Watchdog wie gewünscht ausgelöst. Das Problem ist dann nur, dass (warscheindlich) beim Initialisieren der Ports irgendwelche Spannungsschwankungen, welche als Signal Interpretiert werden können, an den Ausgängen anliegen.Code:btfss STATUS_TO ; Ist das TO-Bit im Statusregister nicht gesetzt, wurde der goto reset ; Watchdog ausgelöst und die Initialisierung der Ports und ; des Timers wird übersprungen.
Ich hab auch schon versucht, den "; 250 Hz-Timer-Interrupt einstellen"-Teil in der reset-Subroutine zu platzieren, damit der Watchdog nach jedem auslösen wieder eingestellt wird, aber das hat auch nichts gebracht...
Noch eine Frage:
Wird beim Auslösen des Watchdog überhaupt etwas zurückgesetzt, oder wird das Programm einfach neu gestartet? Also, muss ich nach dem Watchdog-Interrupt die I/O's und Timer neu Initialisieren? [edit] wenn ich das Programm in MPLAB simuliere, sieht es so aus wie wenn die I/O's zurückgesetzt werden...
Hat mir vielleicht jemand eine Lösung für das Problem? hab schon den halbem Tag damit vertrödelt...
Vielen Dank







Zitieren

Lesezeichen