www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Watchdog


Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest mal deinen SRCCode posten damit man sehen kann was falsch 
ist...

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hast du denn schon ausprobiert?

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

Müsste eigentlich gehn!

Gruß, Florian

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter Brüggemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter Brüggemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter Brüggemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.