Nach Monaten mit anderen Baustellen bin ich zurück beim Watchdog. (M)EIN Problem: bei laufendem LCD hängt sich der Controller nach reproduzierbaren 11:15 min auf . . . :-/
Folgende Codeschnippsel wurden erstellt als Zusatz/Einfügung bei sonst problemlosen (bis auf den LCD-Bug) Steuerungsablauf. Damit war ein Test geplant, ob erstmal ne quick´n dirty Lösung per WDT möglich wäre
Code:
// Im Main nach Includierung der
#include <avr/interrupt.h> //
#include <avr/wdt.h> //
// Mainmodul
//..
Isecundn = 1; // Sekundenzähler max 9Stunden - NUR hier nullen
Itmr_RES = 0; // Sekundenzähler für RESET
wdt_init( );
TC2TMR_init(); // Init Timer/Cntr2-Interrupt 20 kHz/50 µsec tmr
// . . .
// Ende Main
//
// Im getrennten Timermodul nach erreichen einer Sekunde:
// . . .
Itmr_RES ++; // Resettimer wegen LCD-Fehlfunktion
if ( Itmr_RES == 30 ) // Zeit erreicht ??
{ //
Itmr_RES = 0; // Setze Timer vorsichtshalber zurück
wdt_enable( 1);
} // Ende if ( Itmr_RES ==
//
// ============================================================================= =
//void wdt_init(void) __attribute__((naked)) __attribute__((section(".init1")));
// ...
// ENde timer-Funktion
void wdt_init(void)
{
MCUSR = 0;
wdt_disable();
DDRA = (1<<PA0);
PORTA &= ~(1<<PA0);
return;
}
// ============================================================================= =
Das funktionierte mit seltsamer Konsequenz: es lief EINMAL ab, stoppte nach dreissig Sekunden, seit der Zeit geht garnix mehr. Nur die Heartbeat-LED - hier üblich auf PC6 - ging auf halbe Kraft bzw. 90 Hz.
Seltsam: Flashen - mit Verify - ist möglich, Fuses setzen und lesen ist möglich. Flashen eines früher sauber lauffähigen Programms ist möglich - aber die Funktion bleibt wie vorher: Heartbeat-LED auf halbe Kraft bzw. 90 Hz. Ansonsten läuft das früher sauber lauffähige Programm nicht :.-.((
Frage: hat jemand von Euch einen ungefähren Tip was los ist?
Danke im Voraus
Lesezeichen