Nie dokoñca zrozumia³em jak uruchomiæ watchdoga w tym AVRku. Watchdog ma resetowac kontroler po 1 sekundzie. Wydaje mi sie ¿e wystarczy ustawiæ to tak :
WDTCSR = (1<<WDP2) | (1<<WDP1);
ale czy napewno ?
Nie dokoñca zrozumia³em jak uruchomiæ watchdoga w tym AVRku. Watchdog ma resetowac kontroler po 1 sekundzie. Wydaje mi sie ¿e wystarczy ustawiæ to tak :
WDTCSR = (1<<WDP2) | (1<<WDP1);
ale czy napewno ?
Zagl±dnij do noty katalogowej, tam s± gotowe procedury, tylko przekleiæ. Aby zmodyfikowaæ preskaler trzeba wpierw ustawiæ bit WDCE tego rejestru, podobnie jak to ma miejsce podczas zerowania pieska. Kolejna sprawa to jeszcze w³±czenie watchdoga i jego skonfigurowanie (co ma siê dziaæ po przekroczeniu czasu).
Micha³
Zagl±da³em. Ja chce siê nauczyæ, a nie przeklejaæ gotowy kod. Skoro pytam to oznacza, ¿e nie zrozumia³em tego opisu.
Jakto podobnie jak podczas zerownia ? Przecie¿ zeruje siê jedn± instrukcj± WDR.
No w³a¶nie, to mo¿e wspólnie to zrobimy, bo ja pewnien nie jestem. Kolejna propozycja :
WDTCSR = (1<<WDCE) | (1<<WDE); WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP1);
Piotr Chmiel napisał(a):
[...]Korzystaj z biblioteki standardowej gdzie tylko można. Jak w kolejnym projekcie zechcesz zmienić procesor, nie trzeba będzie połowy kodu pisać od nowa.
Aby włączyć watchdoga wystarczy dołączyć plik <avr/wdt.h> i napisać:
wdt_enable (WDTO_1S);
Ta funkcja zapewnia konfigurację watchdoga przy wyłączonych przerwaniach (ważne!) i z właściwą kolejnością zapisów. Resztę doczytasz w dokumentacji avr-libc. Jeżeli chcesz jednak wszystko zrobić na piechotę
- po prostu przepisz kawałek funkcji _wdt_write z pliku avr/wdt.h.
Nie korzystam z GCC. I nie chce korzystaæ z "gotowców", a jak zmienie procka to bêde przerabia³. Chcia³em siê dowiedzieæ jak skonfigurowac WD na piechote, ale póki co wszyscy tylko gotowce polecaj±.
Have something to add? Share your thoughts — no account required.
Ask the community — no account required