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
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.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; } // ============================================================================= =
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







Zitieren


Lesezeichen