jak szybko liczy 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
Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

jak szybko liczy timer0?

Post autor: matrix » 27 wrz 2009, 15:03

słuchajcie, jeśli skonfiguruję sobie coś takiego przy rezonatorze 4MHz:

Kod: Zaznacz cały

$regfile = "2313DEF.dat"
Config Timer0 = counter , Prescale = 8 , Edge = Rising
load timer0 = 0
to do ilu doliczy mi ten timer w ciągu 1ms?
a w ciągu 1,5ms?
jak to policzyć? jakie zalżności? możecie wytłumaczyć mi to łopatologicznie?

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 27 wrz 2009, 15:14

w ciągu 1ms do 250 a w ciągu 1,5ms do 375.
Ostatnio zmieniony 27 wrz 2009, 15:18 przez snow, łącznie zmieniany 2 razy.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 27 wrz 2009, 15:15

snow pisze:w ciągu 1ms do 4000 a w ciągu 1,5ms do 6000.
ale jak to policzyć? przedstaw mi zależność. wzór jakiś. chce wiedzieć a nie znać tylko suche liczby.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 27 wrz 2009, 15:20

Poprawiłem;)

Jeżeli masz zegar o jakiejś częstotliwości to znaczy że z połową tej częstotliwości zliczy ci impulsy bo zegar licznika jest synchroniczny z zegarem procesora. Zliczane jest jednym zboczem zegara stąd połowa częstotliwości. Przejrzyj PDF od procesora i tam jest wszystko wytłumaczone. 4MHz=0,00000025s, ponieważ licznik liczy na zbocze narastające więc bez preskalera zliczy co 0,0000005s. Jak dasz preskaler to czas się wydłuży.

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 27 wrz 2009, 15:34

Proporcja:
1s - 4 miliony zliczeń (szybkość kwarcu)
1ms - X
X= (4M * 1ms) / 1s = 4M / 1000 = 4000

4000 impulsów wygeneruje kwarc w czasie 1ms, 6000 w czasie 1,5ms.

Wartość tą należy podzielić przez wybrany dla timera podzielnik, czyli 8.
Wyjdzie 500 impulsów dla 1ms, 750 dla 1,5ms.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 27 wrz 2009, 15:58

M@rek pisze:Wyjdzie 500 impulsów dla 1ms, 750 dla 1,5ms.
Oczywiscie po zastosowaniu licznika 16-bitowego. Niemniej T0 jest 8-bitowy, wiec wyjdzie 500-256 oraz 750-2*256, bo maksymalna wartosc w T0 to 255.

ODPOWIEDZ