Przede wszystkim dziękuje za zainteresowanie.
To moze wywal ten pierwszy reset i stop watchdoga, co?? Z helpa wynika ze nie wykonuje sie tego przed pierwsza konfiguracja watchdoga, dopiero wowczas nalezy sterowac (start/stop/reset) watchdogiem. Nie kojaze teraz co tam bascom wyczynia, byc moze wchodzi gdzies w kompetencje przerwania, albo startuje watchdoga przy okazji jego resetu.
W tym przypadku to nie ma żadnego znaczenia dla działania programu czy na początku programu są instrukcje Reset, Stop czy Config Watchdog, umieściłem je w tym przykładzie bo przeczytałem na jakimś forum żeby na początku programu zatrzymać watchdoga. Chciałem pominąć te sugestie...
Btw. W takim razie uklad Ci sie wogole programuje?? Ciekawe tylko czy skutecznie
Układ się programuje skutecznie bardziej złożonymi programami to jest tylko przykład do rozwiązania problemu z watchdogiem.
szymel
Ciekawi mnie , czy przez ten czas zaglądałeś do dokumentacji M168(myślę że tak) i czy zauważyłeś to:
Atmel , w dokumentacji do ATMega168 , między innymi napisał/a:
Bit 3 - WDE: Watchdog System Reset Enable
WDE is overridden by WDRF in MCUSR. This means that WDE is always set when WDRF is
set. To clear WDE, WDRF must be cleared first. This feature ensures multiple resets during con-
ditions causing failure, and a safe start-up after the failure.
Pan M.Alberts niestety nie zauważył(przynajmniej w v1.11.8.7 i na dokładkę potraktował M168 jak M8 , jeśli chodzi o konfigurację rejestru WDTCSR.Config Watchdog=2048 , konfiguruje go na 2s , a poza tym max wartość dla M168 to 1024(ale też nie powoduje prawidłowego zapisu do WDTCSR).Poprostu autor Bascoma nie zauważył , że w M168 przybył nowy bit WDP3.Cóż , nikt nie jest doskonały , a i tak Bascom to niezłe narzędzie
Spróbuj dopisać
Kod:
Kod: Zaznacz cały
Reset Watchdog
Reset Mcusr.wdrf ' nie można zatrzymać watchdog'a , dopuki ten bit jest ustawiony
Stop Watchdog
Zaglądałem nieraz tylko ze zrozumieniem problem....
Co do czasów watchdoga (bity WDP3..0) ustawienie 2048 to 2 sekundy, 4096 dla 4sekund i 8191 to przerwanie po 8 sekundach, działa prawidłowo.
Nie potrafiłem wcześniej ustawić bitów w MCUSR a to takie proste!
Ja w WDTCSR pojedyncze bity ustawiałem tak:
Jednak z MCUSR to mi nie wychodziło, przynajmniej tak pokazał symulator w Bascomie i zrezygnowałem. Twoja sugestia
szymel wygląda w symulacji bardzo optymistycznie, zaraz muszę to sprawdzić.
Niestety modyfikacja kodu do tej postaci nic nie zmieniła
Kod: Zaznacz cały
$regfile = "m168def.dat"
$crystal = 8000000
$prog &HFF , &HCF , &HD7 , &HF9
Reset Watchdog
Reset Mcusr.wdrf
Stop Watchdog
Config Watchdog = 2048
Stop Watchdog
Config Pinb.4 = Output : Config Pinb.3 = Output : Config Pinb.2 = Output : Config Pinb.1 = Output
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.1 , E = Portc.2 , Rs = Portc.4
Dim I As Word
Start Watchdog
For I = 1 To 100
Cls : Lcd I
Waitms 100
Next
End