Forum: Mikrocontroller und Digitale Elektronik Pic18f sleep mode


von bastler (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.