watchdog löst aus durch uart_senden

OP #720824
Lesenswert?
• ▲
▼
hi,
ich hab nen at90can.
ich habe mir bislang immer einige werte meines programmes über die 
uart-schnittstelle am bildschirm ausgeben lassen. seitdem ich einen 
watchdog im programm hinzugefügt habe, resetet sich der controller, 
sobald ich den ersten wert über die serielle schnittstelle ausgebe.
ich mein, ich hätte schonmal so ein ähnliches problem hier im forum 
gesehen, nur leider finde ich den beitrag nicht mehr.
der watchdog scheint sich nicht mit der seriellen ausgabe vertragen.
weiß jem. rat?

gruß
andreas
Gast #720830
Lesenswert?
• ▲
▼
wahrscheinlich betreibst du die serielle Schnittstelle im 
polling-Betrieb. Während einer printf()-Ausgabe kommt das Programm nicht 
zum Hauptprogramm/Watchdogreset zurück, entsprechend schlägt er Alarm. 
Entweder die watchdog-Zeit grösser wählen, als die längste Ausgabe 
dauert. Oder einen WDR-Befehl in die low-level-Routine putchar() 
reinbasteln oder die Schnittstelle im Interrupt betreiben (empfiehlt 
sich eigentlich sowieso fast immer).
OP #720862
Lesenswert?
• ▲
▼
mmmh, den prescaler hatte ich schon auf eine hohe zeit gesetzt. daran 
dürfte es eigentlich nicht liegen, es sei denn ich hab das mit dem 
beschreiben des registers nicht richtig gemacht. das ausschalten des wdr 
ist ja auch etwas aufwändiger.

void wdt_init(void)
{
WDTCR |=(1<<WDE);
WDTCR |=(1<<WDP2)|(1<<WDP1);      //1s
}

ist das so ok?
OP #720909
Lesenswert?
• ▲
▼
hat leider nix gebracht:(
hier meine drei wdt-funktionen:
void wdt_init(void)
{
WDTCR |= (1<<WDCE)|(1<<WDE);
WDTCR |=           (1<<WDE)|(1<<WDP2)|(1<<WDP1);      //1s
}

void wdt_reset(void)
{
asm volatile ("wdr");
}

void wd_off(void)
{
/* Write logical one to WDCE and WDE */
WDTCR = (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCR = 0x00;
}

wdt_init() ruf ich innerhalb der main() noch for der hauptschleife auf, 
wdt_reset() am ende der hauptschleife.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.