Forum: Mikrocontroller und Digitale Elektronik Watchdog konfigurieren


von Thomas (Gast)


Lesenswert?

Jo Hallo
Ich würd gern mein Controller am Ende des Programms in Sleep-Modus 
setzen und ihn mit dem Watchdog-Timer der nicht vom Sleep-Modus 
beeinflußt wird wieder aufwecken. Wenn der Sleep-Modus gesetzt ist tut 
der Watchdog nach ablauf seiner Zeit ein Wake-Up durchführen.
Wie muss ich denn das konfigurieren, hab hier mal ein kleiner Quelltext 
der beim simulieren mit MPLAB aber nicht gefuntzt hat. Weiß aber auch 
nicht ob man den Watchdog mit dem
MPLAB Sim simulieren kann. Würd mich freuen wenn jemand mir ein kleiner 
Quelltext postet wie man Watchdog + Sleep richtig ins Programm einbaut.

#include <16f872.H>
#fuses HS,WDT,NOPROTECT   //Watchdog einbinden WDT

main()
{
setup_wdt(WDT_18MS);      //Watchdog 18ms stellen

while(1)                  //Dauerschleife
 {
 *
 *                        //*Programm
 *
 restart_wdt();           //Watchdog starten
 sleep();                 //Sleepmodus aktivieren
 }
}

von Thomas (Gast)


Lesenswert?

Kann mir den keiner Helfen, ein Tip würd ja schon reichen. Wenn Ihr nur 
was über den Watchdog wisst könnt Ihr das auch Posten.
Gruß
       Thomas

von Fernando Heitor (Gast)


Lesenswert?

Dieses Programm funktioniert 100%.
Der Watchdogtimer schaltet automatisch den SLEEP-Modus ab, nach ca. 2,3 
sek.


#include <16F873.h>
#use delay(clock=4000000)
#fuses XT,WDT

void main() {

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(FALSE);
   setup_counters(RTCC_INTERNAL,WDT_2304MS);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_ccp2(CCP_OFF);

   while(1) //Dauerschleife
   {
       delay_ms(200);
      output_low(PIN_C1);
      restart_wdt(); //Watchdog starten
      sleep(); //Sleepmodus aktivieren
      switch (restart_cause())                      // Mit dieser 
Funktion überwachst du  alle Reset Funktion
      {                                                        // wie 
auch der Watchdogtimer im Schlafmodus
         case WDT_FROM_SLEEP:
         output_high(PIN_C1);

      }
   }

}


Ich hoffe ich konnte dir helfen

Gruss
Fernando Heitor

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.