Bascom a timer0
Bascom a timer0
Pisze sobie taki programik który ma przełączać diody led , procesor ATtiny2313 i sobie dywaguje :
Mogę użyć wewnętrznego oscylatora 1MHz, 4 MHZ i 8 MHz . W związku z tym ze dioda ma migać co sekundę to najlepiej użyć wolniejszego taktowania . Timer0 będzie wolniej narastał . Procesor ma mozlwiość podzielenia taktowania przez 8 to jaki crystal podać w bascomie ? np. wybieram 8MHz nie dziel przez 8 to mi daje taktowanie 8 Mhz jak podzielę przez 8 to chyba powinienem wpisać 1MHz ?
A jak ma sie taktowanie procesora do watchdoga ?
kiedys w sieci znalazłem kalkulator do obliczania Timerów moze ktos poda linka ?
Mogę użyć wewnętrznego oscylatora 1MHz, 4 MHZ i 8 MHz . W związku z tym ze dioda ma migać co sekundę to najlepiej użyć wolniejszego taktowania . Timer0 będzie wolniej narastał . Procesor ma mozlwiość podzielenia taktowania przez 8 to jaki crystal podać w bascomie ? np. wybieram 8MHz nie dziel przez 8 to mi daje taktowanie 8 Mhz jak podzielę przez 8 to chyba powinienem wpisać 1MHz ?
A jak ma sie taktowanie procesora do watchdoga ?
kiedys w sieci znalazłem kalkulator do obliczania Timerów moze ktos poda linka ?
Można to wiem , ale nie o to chodzi .
Chce doprowadzić do globalnej zmiany czasu w całym programie za pomocą zmiany zmiennej pomocniczej . E W tym celu chce uruchomić timer0 jako timer zliczał potem zamieniać zmienną i ja zmieniać tak zeby czasy załącz wyłącz ledy w zakresie czasów 1-2 sek powiedzmy . I tu mi tez pojawil się problem w watchdogiem bo przy czasach 6 sek juz powoduje resetowanie .
Chce doprowadzić do globalnej zmiany czasu w całym programie za pomocą zmiany zmiennej pomocniczej . E W tym celu chce uruchomić timer0 jako timer zliczał potem zamieniać zmienną i ja zmieniać tak zeby czasy załącz wyłącz ledy w zakresie czasów 1-2 sek powiedzmy . I tu mi tez pojawil się problem w watchdogiem bo przy czasach 6 sek juz powoduje resetowanie .
nie tak , zle zrozumialeś
- chce za pomoca jakiejś zmiennej zmieniać czas migania LED od 1 sek do 2 sekund
do tego chce uzyć timer0 ktory bedzie zliczał czas powiedzmy x ms mnozac wartosc tez zmiennej x dostane zakres czasów ktory chce miec .
A watchdog ma czuwać nad tym zeby w czasie np 15 s procedury procesor sie nie zawiesił
- chce za pomoca jakiejś zmiennej zmieniać czas migania LED od 1 sek do 2 sekund
do tego chce uzyć timer0 ktory bedzie zliczał czas powiedzmy x ms mnozac wartosc tez zmiennej x dostane zakres czasów ktory chce miec .
A watchdog ma czuwać nad tym zeby w czasie np 15 s procedury procesor sie nie zawiesił
Dlaczego miałby ci się zawiesić procesor ? Timer ci go nie zawiesi jeżeli nie zejdziesz ponizej 10ns z przerwaniami, a ty chcesz odmierzać czasy 100 do 1000x większe.
Wykorzystanie Watchdoga, jak nigdy z niego nie korzystałeś pośle ci program w malkny w pierwszej kolejności.
To masz tak:
1 000 000Hz(Fcpu)/64 (preskaler) = 15625 na wejście timera
Jak to sobie podzielisz przez 125 na stałe wpisane do CTC to masz 125 przerwan/sek które zliczasz sobie w zmiennej np. Czas i porównujesz z czas_zadany.
To już całkiem niezła podstawa czasu, co daje
125 przerwań = 1sek
250 = 2 sek
25 = 0,2 sek bo 1000ms/125=8ms, czyli 8ms x 25 = 200ms = 0,2 sek
Czyli podstawa czasu to 8ms, czyli przyzwoicie, nawet bardzo jak na miganie diodą LED. Lepszych wyników nie uzyskasz, a ponirzej 1MHz sobie nie schodz, bo mozesz stracić połączenie procesor-programator.
Wykorzystanie Watchdoga, jak nigdy z niego nie korzystałeś pośle ci program w malkny w pierwszej kolejności.
To masz tak:
1 000 000Hz(Fcpu)/64 (preskaler) = 15625 na wejście timera
Jak to sobie podzielisz przez 125 na stałe wpisane do CTC to masz 125 przerwan/sek które zliczasz sobie w zmiennej np. Czas i porównujesz z czas_zadany.
To już całkiem niezła podstawa czasu, co daje
125 przerwań = 1sek
250 = 2 sek
25 = 0,2 sek bo 1000ms/125=8ms, czyli 8ms x 25 = 200ms = 0,2 sek
Czyli podstawa czasu to 8ms, czyli przyzwoicie, nawet bardzo jak na miganie diodą LED. Lepszych wyników nie uzyskasz, a ponirzej 1MHz sobie nie schodz, bo mozesz stracić połączenie procesor-programator.
OK jutro sie tym pobawie ale ... mam takie opcje w procesorze wewnetrzny oscylator 8MHz i mozliwość podzielenia go przez 8 czyli jak rozumiem ma to dać oscylator 1 MHz czyli w bascomie powinienem wpisac 1 MHz . Czy dobrze mysle ?
a to jeszcze mozna zrobic podzielne przez 3 żeby ładniej się zwiększało czy zmniejszało .
a to jeszcze mozna zrobic podzielne przez 3 żeby ładniej się zwiększało czy zmniejszało .