Bascom a timer0

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Marek S
-
Posty: 13
Rejestracja: 23 lip 2007, 15:13
Lokalizacja: Katowice
Kontakt:

Bascom a timer0

Post autor: Marek S » 09 mar 2014, 9:01

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 ?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 09 mar 2014, 11:03

Jak dobrze pamiętam ATTiny2313 można puścić na 1MHz z wewnętrznego oscylatora RC, więc kwarcu w ogóle nie trzeba.
Watchdog ma swój własny niezależny oscylator kilkadziesiąt KHz, niezależny od taktowania CPU.

Marek S
-
Posty: 13
Rejestracja: 23 lip 2007, 15:13
Lokalizacja: Katowice
Kontakt:

Post autor: Marek S » 09 mar 2014, 11:32

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 .

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 09 mar 2014, 16:01

A po co uruchamiasz watchdog jak nie chcesz z niego korzystać ?
Dynamiczna zmiana taktowania CPU jest możliwa, wymaga to korzystania z zdefiniowanych wartości wpisywanych na początku programu, i ewentualnie zmieniany puxniej, przez specjalną procedurę.

Marek S
-
Posty: 13
Rejestracja: 23 lip 2007, 15:13
Lokalizacja: Katowice
Kontakt:

Post autor: Marek S » 09 mar 2014, 16:31

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ł

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 09 mar 2014, 19:10

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.

Marek S
-
Posty: 13
Rejestracja: 23 lip 2007, 15:13
Lokalizacja: Katowice
Kontakt:

Post autor: Marek S » 09 mar 2014, 20:24

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 .

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 09 mar 2014, 22:04

Tak to da ci 1MHz jak włączysz podzielnik 8.
a to jeszcze mozna zrobic podzielne przez 3 żeby ładniej się zwiększało czy zmniejszało .
Aż takich cudów nie oczekuj, to nie jest PC, czy jaki wypasiony ARM.

Marek S
-
Posty: 13
Rejestracja: 23 lip 2007, 15:13
Lokalizacja: Katowice
Kontakt:

Post autor: Marek S » 09 mar 2014, 22:11

Jeszcze dla pewności zapytam , czy w bascomie jako crystal mam wpisac 1 HMz ?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 10 mar 2014, 9:49

TAK.

ODPOWIEDZ