Forum: Mikrocontroller und Digitale Elektronik Watchdog


von Mario (Gast)


Lesenswert?

Hallo
Ich habe schon im Tutorial uä Seiten durchsucht und komme nicht klar. 
Ich benutze Codevision ein Mega163 und möchte doch nur mein Watchdog 
Timer aktivieren.Hab auch schon einige Beispiele ausprobiert aber komme 
nicht zum Zuge.
Hat noch jemand ein guten Tip auf Lager?
mfg Mario

von Mario (Gast)


Lesenswert?

Hat denn keiner ne Idee? Bin immer noch nicht hinter das Geheimnis des 
Watchdogs gekommen. Hab mein mega163 schon fast tot-geflasht -:(
Gruß Mario

von Marc (Gast)


Lesenswert?

Du solltest mal deinen SRCCode posten damit man sehen kann was falsch 
ist...

von Florian Pfanner (Gast)


Lesenswert?

Was hast du denn schon ausprobiert?

WDE und WDP2-WDP0 (nach bedarf) im WDTCR-Register setzen.

Müsste eigentlich gehn!

Gruß, Florian

von Mario (Gast)


Lesenswert?

Hallo
Bin leider erst jetzt dazu gekommen eure Tips zu lesen. Ich habe das 
WDTCR Register mit WDTCR=0x08 initialisiert.Soll  OSC/16 sein. Ich weiß 
meine ganzen Versuche schon alle nicht mehr. Hab´s auch mit einer 
asm-einbindung versucht. Ich habe eine ganz einfache while Schleife wo 
portb (LED) blinkt. Sollte das Programm nicht neu starten wenn der 
Watchdog nicht resettet wird?
Gruß Mario

von mikki merten (Gast)


Lesenswert?

Du musst natürlich auch das MCUCSR auswerten um die Quelle des Reset 
(Power On Reset, Watch Dog, Brown Out, Reset) bestimmen zu können.

von Dieter Brüggemann (Gast)


Lesenswert?

Hallo Mario

Hast du vielleicht einen Denkfehler in deinen Überlegungen. So wie du 
schreibst, hast du nur eine Schleife, wo eine LED blinkt. Wenn der WDT 
nicht zurück gesetzt wird, startet das Porgramm neu und ist doch wieder 
in der Schleife. Das geht so schnell, das merkst du gar nicht, wenn er 
neu startet. Bau vor der Schleife doch mal eine Tastenabfrage ein, damit 
deine LED nur blinken kann, wenn die Taste einmal gedrückt wurde. Oder 
eine andere LED, die vor deiner Schleife an geht und nach 2 Sekunden 
wieder ausgeht, damit du sehen kannst ob er neu startet oder nicht.

Nur so als Anregung.

MFG
Dieter

von Mario (Gast)


Lesenswert?

Hallo miki
Mit dem MCUSR Register hab ich auch schon rum probiert.Wenn ich meine 
Pausen zwischen den led1 und led0 raus nehme startet das Ding 
seltsamerweise nach ca 2sec neu.Hab WDTCR auch mit F geladen.Sind 
ca.2sec. Sobald ne Pause mit bei ist gehts nicht mehr.Pause ist auch nur 
100ms

von Mario (Gast)


Lesenswert?

Hi Dieter
Dank dir für den Hinweis.Ich habe beim Programmstart ne 2sec Pause wo 
1LED leuchtet. Wenn ich per Hand resette haut das auch hin.Bin echt 
platt
Gruß Mario

von Dieter Brüggemann (Gast)


Lesenswert?

Hallo

Klappt das denn jetzt mit dem WDT oder nicht ? Kommt nicht so klar 
rüber, glaube aber eher nicht. Häng deinen Code doch mal mit rein, falls 
es noch nicht klappt.

MFG
Dieter

von Mario (Gast)


Lesenswert?

Hallo Dieter
Es klappt leider immer noch nicht.Den Code benutze ich jetzt nur zum 
probieren des WDT. (nicht lachen :-))

WDTCR=0x0F;
a=MCUSR;
PORTB=255;
PORTB.0=0;
delay_ms(3000);
while (1)
      {
      if(a>=8)#asm ("rjmp 0")
      PORTB=0;
      delay_ms(50);
      PORTB=255;
      delay_ms(50);
      };


Die Sache mit dem MCUSR war noch ein Versuch ---> der sicherlich voll 
daneben war

von Mario (Gast)


Lesenswert?

es ist seltsam....
nehme ich die delay_ms(50) raus funktioniert es.
Den Test mit den LED´s hab ich mal abgebrochen.Das eigentliche Prog 
sieht so aus (ausschnitt):

i=0;j=0;
 while(j!=2)
  {
   if(rx_buffer[i]==13)j++;
    i++;
  }

Ich möchte damit in der Zeichenkette "rx_buffer" das zweite 
Enter-zeichen suchen. Haut auch alles hin. Aber wenn keins da ist, 
wollte ich den watchdog benutzen.Der möchte aber nicht.
gruß Mario

von Dieter Brüggemann (Gast)


Lesenswert?

Hallo Mario

Schaltest du in der delay Routine vielleicht die Interrupts aus. Weiß 
zwar imMoment nicht genau, ob die braucht für den WDT. Aber von der 
Logik her, dürfe dein Programm gar nicht bis zu der Schleife laufen. Bei 
WDTCR=0x0F; kommt ja bei 5 Volt ca. alle 1,9 s ein Neustart. Bei deinem 
Delay am Anfang von 3000 ms würde ja schon ein Neustart kommen, d.h. die 
Schleife würde er nie erreichen.

Oder sehe ich das so falsch ??

MFG
Dieter

von Mario (Gast)


Lesenswert?

Hallo Dieter

Das mit der Pause dachte ich mir ja auch.Hab sie ja dann auch nur auf 
50ms gesetzt.Aber ich probiere jetzt mit der UART und den RX-IRQ rum.
Selbst da möchte mein watchdog nicht (wenn kein Enter empfangen wird).

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.