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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren