Hallo, ich hab folgendes Problem, ich möchte gern meinen PIC 18f über die high/low Voltage detection in den sleep mode versetzen. das Funktioniert auch soweit. wird der PIC mit nur 3,3V statt 5 V versorgt, dann löst der Interrupt aus. welcher eine Variable setzt. durch setzen dieser Variable wird in der While(1) schleife im hauptprogramm eine IF Bedingung erfüllt, die zuächst die ein paar energiesparmaßnahmen erfüllt und dann in die SLEEP()Funktion aufruft. Leg ich nun wieder 5V an den PIC an, dann wacht dieser allerdings nichtmehr auf. in den Sleep mode kommt er allerdings vermutlich rein, denn wenn ich vor dem abschalten der 5V die Uhr im Pic setze, ein paar minuten warte und dann den PIC neu programmiere, wodurch er dann aufwacht, dann kann ich die korrekte Uhrzeit wieder auslesen, dies wäre nicht der fall wenn der PIC irgendwo hängen würde. Meine funktion des Interrupts, worduch der PIC schlafen gehen soll, also eine high oder low Voltage festgestellt werden soll, sieht folgendermaßen aus: void high_isr(void) { if(PIR2bits.LVDIF) HLVD_isr(); } void HLVD_isr(void) { PIE2bits.LVDIE = 0; // Interrupt disable HLVDCONbits.HLVDEN = 0; if(HLVDCONbits.VDIRMAG) { HLVDCONbits.VDIRMAG = 0; fSleep = 0; } else { HLVDCONbits.VDIRMAG = 1; fSleep = 1; } HLVDCONbits.HLVDEN = 1; while(!HLVDCONbits.IRVST); PIR2bits.LVDIF = 0; // Interrupt flag reset PIE2bits.LVDIE = 1;// Interrupt enable } Ich hoffe mir kann jemand helfen.
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.