Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

watchdog problem z ATMEGA168

nestor197
-
-
Posty: 13
Rejestracja: 19 sie 2007, o 19:28
Lokalizacja: Małopolska

watchdog problem z ATMEGA168

Postautor: nestor197 » 19 sie 2007, o 19:56

W moim układzie zainstalowałem procesor atmega168. (poprzednio był atmega8 i problemów w tym programie nie było)
A problem jest następujący:

Mój program w pewnym punkcie ma sie sam zresetować.
Rozwiązałem to następująco: skonfigurowałem watchdoga, potem zrobiłem stop watchdog a w punkcie w którym ma się program zresetować robię start watchdog (to jest pusta pętla więc czasu wystarczy)
No i po chwili atmega 8 wstaje bez problemu a na atmega 168 procesor jak by cały czas wisiał :(

Jak podłącze do układu programator to procesor odpowiada, ale program sie nie uruchamia, procek nie reaguje nawet na reset wykonany ręcznie pinem reset.

Dopiero po odłączeniu zasilania i włączeniu ponownym układ działa znów poprawnie.
Nie mam pojęcia dlaczego na atmega8 problemu nie było a przeciez procki sa praktycznie takie same, róznia sie tylko częstotliwością próbkowania watchdoga (jego zegara) w atmega 8 jest 1 MHz a w atmega 168 jest 128 Khz z tego co pamiętam, , ale nie powinno to robic problemu.
W fuse bitach tez próbowałem przestawiac konfigurację watchdog, ale na obu ustawieniach to samo- sam juz nie wiem co mam z tym zrobić.

Może ktoś miła podobny problem.
Proszę o pomoc !
Ostatnio zmieniony 19 sie 2007, o 20:37 przez nestor197, łącznie zmieniany 1 raz.

szymel
-
-
Posty: 212
Rejestracja: 16 sty 2005, o 16:42
Lokalizacja: Włocławek

Postautor: szymel » 19 sie 2007, o 21:25

Zapomniałeś o najważniejszej różnicy - tablica wektorów.

Piotrek

nestor197
-
-
Posty: 13
Rejestracja: 19 sie 2007, o 19:28
Lokalizacja: Małopolska

Postautor: nestor197 » 20 sie 2007, o 07:03

a czy jakos jaśniej by sie dało ? bo szczerze powiedziawszy nie wiem o co chodzi :(

[ Dodano: 20-08-2007, 08:08 ]
poprostu ie bardzo wiem o co chodzi z tą tablicą wektorów

[ Dodano: 20-08-2007, 21:12 ]
No i chyba nikt mi nie pomoze :(

Może jdnak Bardzo prosze o ppomoc

[ Dodano: 22-08-2007, 08:55 ]
Czy naprawdę nikt nie miał takiego problemu ?

Towarzysze pomożecie ??? .......................

Bibo
-
-
Posty: 6
Rejestracja: 22 sty 2008, o 19:39
Lokalizacja: Tychy

Postautor: Bibo » 22 sty 2008, o 20:46

Mam dokładnie ten sam problem jak nestor197 . Czy może ktoś się z tym uporał, bo ja wypróbowałem już wszystko, co mi przez parę tygodni przyszło do głowy...
Zamieszczam do prób programik (przeróbka przykładu wykorzystania Watchdoga z Help-a Bascoma-AVR). Program w symulacji działa prawidłowo a procek po Resecie się zawiesza.

Kod: Zaznacz cały

'$sim $regfile = "m168def.dat" $crystal = 8000000 $prog &HFF , &HCF , &HD7 , &HF9 'Ustawienia Fuse Bits itd. $baud = 19200 $hwstack = 32 $swstack = 10 $framesize = 40 Reset Watchdog 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 Config Watchdog = 2048 Start Watchdog For I = 1 To 100 Print I Cls : Lcd I Waitms 100 'Reset Watchdog Next End
Czekam na pomoc :632: albo tylko sprzętowy Watchdog mi pozostaje?...

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Postautor: pajaczek » 23 sty 2008, o 03:56

Program w symulacji działa prawidłowo a procek po Resecie się zawiesza.

Kod: Zaznacz cały

Waitms 100 'Reset Watchdog
Zawiesza, czy restartuje nonstop ??
albo tylko sprzętowy Watchdog mi pozostaje?...
No a to jaki jest, programowy??

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 23 sty 2008, o 19:34

Nie znam Bascoma, ale wydaje mi się że w 3 linijce od dołu masz wykomentowane polecenie resetowania Watchdog'a, co powoduje że po określonym czasie resetuje on cały procesor - i pewnie stąd problem, tak jak pisał pajączek, procesor się nie zawiesza tylko ciągle resetuje.

Symulacja działa prawidłowo pawdopodobnie dlatego że Watchdog się nie symuluje w Baskom.

Pozdrawiam
Marek

Bibo
-
-
Posty: 6
Rejestracja: 22 sty 2008, o 19:39
Lokalizacja: Tychy

Postautor: Bibo » 23 sty 2008, o 21:38

Zawiesza, czy restartuje nonstop ??
Po wywołanym przez Watchdoga resecie procesor zawiesza się na początku programu i nie reaguje nawet na reset zewnętrzny (zwarcie pinu Reset do GND), uruchamia sie dopiero po odłączenie i ponownym włączeniu zasilania.
No a to jaki jest, programowy??
Watchdog programowy to ten który jest tematem tego postu :611:
A watchdog sprzętowy może być jak na tej stronie http://www.pp.piwko.pl/index.php?menu=3&temat=1
Nie znam Bascoma, ale wydaje mi się że w 3 linijce od dołu masz wykomentowane polecenie resetowania Watchdog'a, co powoduje że po określonym czasie resetuje on cały procesor - i pewnie stąd problem, tak jak pisał pajączek, procesor się nie zawiesza tylko ciągle resetuje.
Instrukcję RESET WATCHDOG stosuje się do wyzerowania licznika układu Watchdog.
W następnej linijce jest i instrukcja STOP WATCHDOG która wyłącza watchdoga, ale w problemowym momencie do tego nie dochodzi bo procesor jest zawieszony. Jak by tego było mało, proces po zaprogramowaniu nowym wsadem ciągle "stoi", dopiero po wył/wł zasilania ożywa? :605:

Pozdrawiam

Edit Pajaczek: prosze nie pisac postow 1 po 2-gim, tylko uzywac edit.
Przepraszam jestem początkujący, w czasie jak odpisywałem pojawił się nowy post.
Ostatnio zmieniony 24 sty 2008, o 16:50 przez Bibo, łącznie zmieniany 2 razy.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Postautor: pajaczek » 23 sty 2008, o 23:39

Po wywołanym przez Watchdoga resecie procesor zawiesza się na początku programu i nie reaguje nawet na reset zewnętrzny (zwarcie pinu Reset do GND), uruchamia sie dopiero po odłączenie i ponownym włączeniu zasilania.
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.
No a to jaki jest, programowy??
Watchdog programowy to ten który jest tematem tego postu :611:
A watchdog sprzętowy może być jak na tej stronie http://www.pp.piwko.pl/index.php?menu=3&temat=1
Niezupelnie, to co jest tematem topica (nie postu) to jest wlasnie watchdog sprzetowy. To co pokazujesz pod powyzszym linkiem to watchdog ZEWNETRZNY... programowego niebardzo moge sobie wyobrazic - nie tyle wykonania, co sensu... program mialby zwalczac zawieszenia samego siebie??
Instrukcję RESET WATCHDOG stosuje się do wyzerowania licznika układu Watchdog.
W następnej linijce jest i instrukcja STOP WATCHDOG która wyłącza watchdoga, ale w problemowym momencie do tego nie dochodzi bo procesor jest zawieszony. Jak by tego było mało, proces po zaprogramowaniu nowym wsadem ciągle "stoi", dopiero po wył/wł zasilania ożywa? :605:
W wiekszosci mozemy sobie wyobrazic do czego sluza te komendy (sa dosc czytelne), jednak... czytaj wyzej, najpierw config pozniej reset, wezmy taki przyklad: co jesli np. defaultem (po starcie systemu) jest config 0, zas RESET ustawia jednoczesnie START... skutek?? permanentna zwiecha za sprawa watchdoga, ktory mial przed tym chronic :619: (to taki troche apokaliptyczna wersja, bo tak zdajsie nie jest).

Btw. W takim razie uklad Ci sie wogole programuje?? Ciekawe tylko czy skutecznie :608:

szymel
-
-
Posty: 212
Rejestracja: 16 sty 2005, o 16:42
Lokalizacja: Włocławek

Postautor: szymel » 24 sty 2008, o 10:33

Mam dokładnie ten sam problem jak nestor197 . Czy może ktoś się z tym uporał, bo ja wypróbowałem już wszystko, co mi przez parę tygodni przyszło do głowy...
Ciekawi mnie , czy przez ten czas zaglądałeś do dokumentacji M168(myślę że tak) i czy zauważyłeś to:
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: Zaznacz cały

Reset Watchdog Reset Mcusr.wdrf ' nie można zatrzymać watchdog'a , dopuki ten bit jest ustawiony Stop Watchdog
i napisz co się dzieje.

Piotrek

Bibo
-
-
Posty: 6
Rejestracja: 22 sty 2008, o 19:39
Lokalizacja: Tychy

Postautor: Bibo » 24 sty 2008, o 17:39

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! :597:
Ja w WDTCSR pojedyncze bity ustawiałem tak:

Kod: Zaznacz cały

Wdtcsr = 01011001
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 :631:

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

szymel
-
-
Posty: 212
Rejestracja: 16 sty 2005, o 16:42
Lokalizacja: Włocławek

Postautor: szymel » 24 sty 2008, o 21:59

...
Niestety modyfikacja kodu do tej postaci nic nie zmieniła :631:
No to pozostaje poeksperymentować bezpośrednio na rejestrach :|

Piotrek

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 25 sty 2008, o 19:17

Kod: Zaznacz cały

Start Watchdog For I = 1 To 100 Cls : Lcd I Waitms 100 Next End /
Może nie znam Bascoma, ale moim zdaniem powyższy fragment kodu musi prowadzić do ciągłego resetowania procesora.
Jeżeli polecenie START WATCHDOG powoduje uruchomienie Watchdoga, to trzeba go później co jakiś czas, kasować aby się nie przepełnił, natomiast za tym poleceniem nie ma instrukcji kasowania, za to jest opóźnienie około 10sekund, więc Watchdog się przepełnia i resetuje procesor i tak w koło.

A może się mylę?

Pozdrawiam
Marek

nestor197
-
-
Posty: 13
Rejestracja: 19 sie 2007, o 19:28
Lokalizacja: Małopolska

Postautor: nestor197 » 25 sty 2008, o 19:54

Aż mi smutno, że na moje pytanie niekt nie odpowiedział - a teraz cała lawina pomocy.

Ja do tej pory nie uporałem sie z problemem watchdoga :( w atmedze168

Pewnie jest to problem bascoma, niestety bardzo szkoda bo niektórych progreamów bez watchdoga sobie nie wyobrażam.

No ale będe obserwował odpowiedzi może komuś się w końcu uda odpalic tego watchdoga poprawnie

Naprawdę dzwonie to sie zachowuje że nawer reset sprzętowy nie pomaga- to już masakra :(

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Postautor: pajaczek » 25 sty 2008, o 21:29

A może się mylę?
Mylisz sie... ze sie mylisz. Czyli prosciej, masz racje :622: Ale tak miedzy nami, to juz o tym wspominalismy, duzo wczesniej.
Aż mi smutno, że na moje pytanie niekt nie odpowiedział - a teraz cała lawina pomocy.
A tak jakos wyszlo, nic osobistego uwierz mi (przynajmniej jesli o mnie idzie).

Tablica wektorow... czy dokladniej tablica wektorow przerwan.

Tablica umieszczona w okreslonym miejscu kodu (w przypadku AVR zaczynajaca sie pod adresem 0x0), zawierajaca adresy (a dokladniej instrukcje skokow do adresow) pod ktorymi znajduja sie funkcje obslugi przerwania. M8 i M168 maja rozniace sie wektory przerwan.

Choc osobiscie wydaje mi sie ze jest to jedynie luzno zwiazane z tym problemem, a przynajmniej z ta jego czescia na ktora masz wplyw.

Sprawdzcie jak Wam reaguje ten kod (tylko z mala podmianka 88 na 168) - odrazu mowie ze nie moj, tylko pochodzacy z online helpa bascoma.

Kod: Zaznacz cały

'----------------------------------------------------------------------------------------- 'name : watchd.bas 'copyright : (c) 1995-2007, MCS Electronics 'purpose : demonstrates the watchdog timer 'micro : Mega88 'suited for demo : yes 'commercial addon needed : no '----------------------------------------------------------------------------------------- $regfile = "m88def.dat" ' specify the used micro $crystal = 8000000 ' used crystal frequency $baud = 19200 ' use baud rate $hwstack = 32 ' default use 32 for the hardware stack $swstack = 32 ' default use 32 for the SW stack $framesize = 40 ' default use 40 for the frame space Dim B As Byte Dim Wdbit As Bit Print "Watchdog test" If Mcusr.wdrf = 1 Then ' there was a WD overflow Wdbit = 1 'store the flag End If Config Watchdog = 2048 'reset after 2048 mSec If Wdbit = 1 Then 'just print it now since it is important that CONFIG WATCHDOG runs early as possible Print "Micro was reset by Watchdog overflow" End If Start Watchdog 'start the watchdog timer Dim I As Word For I = 1 To 1000 Waitms 100 Print I 'print value B = Inkey() ' get a key from the serial port If B = 65 Then 'letter A pressed Stop Watchdog ' test if the WD will stop Elseif B = 66 Then 'letter B pressed Config Watchdog = 4096 'reconfig to 4 sec Start Watchdog 'CONFIG WATCHDOG will disable the WD so start it Elseif B = 67 Then 'C pressed Config Watchdog = 8192 ' some have 8 sec timer 'observe that the WD timer is OFF Elseif B = 68 Then 'D pressed Start Watchdog ' start it End If 'Reset Watchdog 'you will notice that the for next doesnt finish because of the reset 'when you unmark the RESET WATCHDOG statement it will finish because the 'wd-timer is reset before it reaches 2048 msec 'When you press 'A' you will see that the WD will stop 'When you press 'B' you will see that the WD will time out after 4 Sec 'When you press 'C' you will see the WD will stop 'When you press 'D' you will see the WD will start again timing out after 8 secs Next End

Bibo
-
-
Posty: 6
Rejestracja: 22 sty 2008, o 19:39
Lokalizacja: Tychy

Postautor: Bibo » 7 lut 2008, o 22:19

Zamieszczam kod programu z działającym Watchdogiem, ale tylko jak program nie używa wyświetlacza LCD:

Kod: Zaznacz cały

$regfile = "m168def.dat" $crystal = 8000000 $prog &HFF , &HCF , &HD7 , &HF9 'Ustawienia Fuse Bits itd. Reset Mcusr.wdrf ' nie można zatrzymać watchdog'a , dopuki bit jest ustawiony Config Watchdog = 2048 Stop Watchdog Config Lcd = 16 * 2 Dim A As Byte Config Pinc.3 = Output : Led1 Alias Pinc.3 Reset Led1 Config Pinc.1 = Output : Led2 Alias Pinc.1 Reset Led2 Wait 4 Set Led1 Start Watchdog For A = 1 To 50 Reset Led2 Waitms 100 Reset Watchdog Set Led2 Waitms 100 'Cls : Lcd A 'Z tą linią kodu progran nie działa, bez Watchdog działa prawidłowo Next Reset Led2 End
Może ma ktoś jakieś sugestie, co może być tego przyczyną?

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 8 lut 2008, o 20:08

Moim zdaniem przyczyną jest czas wykonania dwóch operacji na wyświetlczu LCD.
W pętli resetujesz WDT co około 200ms + czas potrzebny na operacje z LCD i widocznie jest to już trochę za dużo i WDT "stwierdza" że program się zawiesił i resetuje procesor.
Widzę dwie możliwości wyjścia z tego:
- zmniejszyć czasy opóźnień w pętli (waitms 100)
- zmniejszyć częstotliwość taktowania WDT.

Pozdrawiam
Marek

Bibo
-
-
Posty: 6
Rejestracja: 22 sty 2008, o 19:39
Lokalizacja: Tychy

Postautor: Bibo » 8 lut 2008, o 22:14

Moim zdaniem przyczyną jest czas wykonania dwóch operacji na wyświetlczu LCD.
W pętli resetujesz WDT co około 200ms + czas potrzebny na operacje z LCD i widocznie jest to już trochę za dużo i WDT "stwierdza" że program się zawiesił i resetuje procesor.
Widzę dwie możliwości wyjścia z tego:
- zmniejszyć czasy opóźnień w pętli (waitms 100)
- zmniejszyć częstotliwość taktowania WDT.
Nie w tym problem że program resetuje się w czasie obsługi wyświetlacza LCD, program wykonuje się do końca to znaczy po wyjściu z pętli For Next w której jest resetowany watchdog po upływie 2 sekund Watchdog resetuje procesor i się zawiesza - jak było opisane wcześniej... Obojętnie, w którym miejscu programu użyć instrukcji obsługi wyświetlacza zawsze procesor się zawiesza a bez nich program działa prawidłowo. :609:

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 9 lut 2008, o 10:30

Napisz może czego oczekujesz od tego progemu i jak rozpoznajesz że się zawiesił, ponieważ moim zdaniem on zawsze po wyjścia z pęli musi zawisnąć, dlatego że po wyjściu z pętli nie ma już nic, a to nie jest PC-et i nie ma systemu operacyjnego do którego mógłby wrócić.
Musisz dokładnie określić co procesor ma robić po zakończeniu pętli, jeżeli tego nie robisz to program wykonuje się dalej, tyle że tam nic nie ma i zawisa.

Marek

Bibo
-
-
Posty: 6
Rejestracja: 22 sty 2008, o 19:39
Lokalizacja: Tychy

Postautor: Bibo » 9 lut 2008, o 17:56

Napisz może czego oczekujesz od tego progemu i jak rozpoznajesz że się zawiesił, ponieważ moim zdaniem on zawsze po wyjścia z pęli musi zawisnąć, dlatego że po wyjściu z pętli nie ma już nic, a to nie jest PC-et i nie ma systemu operacyjnego do którego mógłby wrócić.
Musisz dokładnie określić co procesor ma robić po zakończeniu pętli, jeżeli tego nie robisz to program wykonuje się dalej, tyle że tam nic nie ma i zawisa.
Program który zamieściłem pokazuje do czego udało mi się dojść podczas prób rozwiązania problemów z niedziałającym Watchdogem nie jest celem samym w sobie.
Program dokładnie w tej formie jak jest zamieszczony z wyłączoną linią kodu

Kod: Zaznacz cały

'Cls : Lcd A
działa prawidłowo tak jak powinien.
W skrucie: po konfiguracji Watchdoga, wyświetlacza LCD, dwuch pinów jako wyjścia do podłączenia diód LED (żeby było widać co się z programem dzieje) obie diody świecą

Kod: Zaznacz cały

Reset Led1 Reset Led1
przez czas 4 sekundy czyli większy od ustawionego watchdoga na 2 sekundy ale program biegnie dalej bo watchdog jest wyłączony

Kod: Zaznacz cały

Stop Watchdog
po upływie 4 sekund dioda LED1 zostaje wyłączona i uruchomiony Watchdog program jest w pętli For Next dioda LED2 pulsuje i resetuje się Watchdog (50 razy) następnie dioda LED2 jest włączona 2 sekundy bo Watchdog resetuje procesor i program rozpoczyna się od początku zaświecają się obie diody LED i tak w kółko.
Natomiast po zaprogramowaniu procesora programem z aktywną linią kodu

Kod: Zaznacz cały

Cls : Lcd A
procesor po resecie od Watchdoga tak jak poprzednio po wyjściu z pętli For Next przestaje reagować procesor się zawiesza i nie reaguje nawet na reset zewnętrzny (zwarcie pinu Reset do GND), uruchamia się dopiero po odłączenie i ponownym włączeniu zasilania.

marek1
-
-
Posty: 104
Rejestracja: 11 kwie 2007, o 18:46
Lokalizacja: Cieszyn

Postautor: marek1 » 9 lut 2008, o 19:01

Przychodzą mi do głowy tylko dwa pomysły:

1. Spróbuj na końcu programu, bezpośrednio przed 'END' wpisać nieskończoną pętlę, aby na reset WDT program oczekiwał w tej pętli.

2. Może Bascom ma jakiś błąd - spróbuj sciągnąć ze strony http://www.hpinfotech.ro/html/download.htm
ograniczoną do 2kB kodu wersję programu Codevision - jest do środowisko do programowania AVR w C, ale zawiera też dużo bibliotek i ma Wizardy do konfuguracji procesora - jeżeli tam będzie działało to już znasz przyczynę.

Pozdrawiam
Marek

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 39 gości