-
1. Data: 2009-09-10 19:27:54
Temat: AVR i pomiar okresu
Od: Dariusz Zolna <a...@u...com>
W jaki sposób ustawić timer w powiedzmy Atmega8, żeby jak najdokładniej
mierzyć czas pomiędzy dwoma kolejnymi impulsami? Wiem że jest taki tryb
pracy timera, ale coś nie mogę załapać jak go skonfigurować.
Teraz wykonuję to zadanie używając INT0 w którym odczytuję TCNT1 i
odejmuję jego poprzednią wartość. Niestety jest to dosyć niedokładne, bo
o ile na oscyloskopie mam stabilny przebieg, to przy 2000Hz zmierzona
przeze mnie częstotliwość waha się w zakresie kilkudziesięciu Hz (i to
jest też max tego co potrzebuję mierzyć, zależy mi za to na dokładności
i szybkości pomiaru, nie mogę uśredniać).
Dariusz Żołna
-
2. Data: 2009-09-10 20:23:47
Temat: Re: AVR i pomiar okresu
Od: Konop <k...@g...pl>
> W jaki sposób ustawić timer w powiedzmy Atmega8, żeby jak najdokładniej
> mierzyć czas pomiędzy dwoma kolejnymi impulsami? Wiem że jest taki tryb
> pracy timera, ale coś nie mogę załapać jak go skonfigurować.
> Teraz wykonuję to zadanie używając INT0 w którym odczytuję TCNT1 i
> odejmuję jego poprzednią wartość. Niestety jest to dosyć niedokładne, bo
> o ile na oscyloskopie mam stabilny przebieg, to przy 2000Hz zmierzona
> przeze mnie częstotliwość waha się w zakresie kilkudziesięciu Hz (i to
> jest też max tego co potrzebuję mierzyć, zależy mi za to na dokładności
> i szybkości pomiaru, nie mogę uśredniać).
A jak zbocza sygnału?? Ostre?? Bo bez tego, to możesz mieć różny moment
wejścia do przerwania... w czym piszesz? w C czy w gołym ASM? Są jakieś
fragmenty kodu, na czas których blokujesz przerwania??
Spróbuj od razu po wejściu do procedury przerwania przełączać jakiś
pin... ciekawy jestem,czy ten przebieg też będzie stabilny...
I napisz jeszcze z jaką częstotliwością popędzasz ten timer....
Pozdrawiam
Konop
-
3. Data: 2009-09-10 20:30:55
Temat: Re: AVR i pomiar okresu
Od: Dariusz Zolna <a...@u...com>
Konop pisze:
> A jak zbocza sygnału?? Ostre?? Bo bez tego, to możesz mieć różny moment
> wejścia do przerwania... w czym piszesz? w C czy w gołym ASM? Są jakieś
> fragmenty kodu, na czas których blokujesz przerwania??
> Spróbuj od razu po wejściu do procedury przerwania przełączać jakiś
> pin... ciekawy jestem,czy ten przebieg też będzie stabilny...
> I napisz jeszcze z jaką częstotliwością popędzasz ten timer....
Sygnał jest uformowany, zbocza ostre. Piszę w gcc, przerwań nie blokuję
niczym innym oprócz ich własnych procedur. Kwarc 16MHz, dzielnik 256,
czyli zegar taktuję 62500Hz.
Z tym przełączaniem pinu dobry patent, podepnę drugi kanał i sprawdzę co
się dzieje.
Dariusz Żołna
-
4. Data: 2009-09-10 20:46:18
Temat: Re: AVR i pomiar okresu
Od: "Zibias" <q...@p...onet.pl>
Użytkownik "Dariusz Zolna" <a...@u...com> napisał w wiadomości
news:h8bnls$jk0$1@inews.gazeta.pl...
Konop pisze:
> A jak zbocza sygnału?? Ostre?? Bo bez tego, to możesz mieć różny moment
> wejścia do przerwania... w czym piszesz? w C czy w gołym ASM? Są jakieś
> fragmenty kodu, na czas których blokujesz przerwania??
> Spróbuj od razu po wejściu do procedury przerwania przełączać jakiś pin...
> ciekawy jestem,czy ten przebieg też będzie stabilny...
> I napisz jeszcze z jaką częstotliwością popędzasz ten timer....
Sygnał jest uformowany, zbocza ostre. Piszę w gcc, przerwań nie blokuję
niczym innym oprócz ich własnych procedur. Kwarc 16MHz, dzielnik 256,
czyli zegar taktuję 62500Hz.
Z tym przełączaniem pinu dobry patent, podepnę drugi kanał i sprawdzę co
się dzieje.
Dariusz Żołna
Myślę, że najprościej to nie odejmować TCNT1, tylko odczytywać,
a dokładniej przepisać do pamięci, po czym wyzerować
TCNT1 i wyjść z obsługi przerwania. Licznik liczy od zera wtedy.
Druga ważna sprawa, TCNT1 jest 16bitowym czyli masz max 65535 zliczeń.
Trzeba tak dobrać preskaler zegara, żeby dla tych 2kHz liczba zliczeń
taktów zegarowych była "spora" czyli w okolicach powiedzmy 60000.
Nie napisałeś jaki masz zegar w tym ATmega. Najlepiej jakiś stabilny
kwarc. Masz do wyboru podział na: 1,8,64,256,1024
Zakładając, ze masz zegar 8MHz to okres dla 2kHz to 0,0005s
Dla preskalera przez 1 czyli dla zegara bezpośrednio da to zaledwie
4000 zliczeń.co daje rozdzielczość ok. 0,5Hz
Jak dasz kwarc 16Mhz to będziesz miał 2 razy więcej zliczeń.
Osiągniesz wtedy 0,25Hz
Ale oczywiście o ile sygnał jest stabilny.
Druga metoda, to w przerwaniu zliczasz określoną liczbę impulsów,
na przykład 16. Dopiero po zliczeniu odczytujesz licznik i go zerujesz
do następnego pomiaru. Wtedy dla zegara 8MHz dostaniesz 64000zliczeń.
Wtedy rozdzielczość będziesz miał większą, ale kosztem czasu pomiaru.
Ale pomiar będzie trwał "tylko" 0,008sek. Może to wystarczy
Zbyszek
(pisałem to wcześniej ale się nie wysłało...)
-
5. Data: 2009-09-10 20:48:53
Temat: Re: AVR i pomiar okresu
Od: "Zibias" <q...@p...onet.pl>
Użytkownik "Dariusz Zolna" <a...@u...com> napisał w wiadomości
news:h8bnls$jk0$1@inews.gazeta.pl...
Konop pisze:
> A jak zbocza sygnału?? Ostre?? Bo bez tego, to możesz mieć różny moment
> wejścia do przerwania... w czym piszesz? w C czy w gołym ASM? Są jakieś
> fragmenty kodu, na czas których blokujesz przerwania??
> Spróbuj od razu po wejściu do procedury przerwania przełączać jakiś pin...
> ciekawy jestem,czy ten przebieg też będzie stabilny...
> I napisz jeszcze z jaką częstotliwością popędzasz ten timer....
Sygnał jest uformowany, zbocza ostre. Piszę w gcc, przerwań nie blokuję
niczym innym oprócz ich własnych procedur. Kwarc 16MHz, dzielnik 256,
czyli zegar taktuję 62500Hz.
Z tym przełączaniem pinu dobry patent, podepnę drugi kanał i sprawdzę co
się dzieje.
Dariusz Żołna
W sumie masz odpowiedź, bo jak 16MHz podzielisz na 256 i policzysz
impulsy dla jednego okresu 2KHz to wyjdzie raptem 31 zliczeń, czyli
rozdzielczość raptem 2000Hz/31 -> 64Hz
Daj z dzielnikiem 1
-
6. Data: 2009-09-10 21:14:53
Temat: Re: AVR i pomiar okresu
Od: Dariusz Zolna <a...@u...com>
Zibias pisze:
> Użytkownik "Dariusz Zolna" <a...@u...com> napisał w wiadomości
> news:h8bnls$jk0$1@inews.gazeta.pl...
> Konop pisze:
>> A jak zbocza sygnału?? Ostre?? Bo bez tego, to możesz mieć różny moment
>> wejścia do przerwania... w czym piszesz? w C czy w gołym ASM? Są jakieś
>> fragmenty kodu, na czas których blokujesz przerwania??
>> Spróbuj od razu po wejściu do procedury przerwania przełączać jakiś pin...
>> ciekawy jestem,czy ten przebieg też będzie stabilny...
>> I napisz jeszcze z jaką częstotliwością popędzasz ten timer....
>
>
> Sygnał jest uformowany, zbocza ostre. Piszę w gcc, przerwań nie blokuję
> niczym innym oprócz ich własnych procedur. Kwarc 16MHz, dzielnik 256,
> czyli zegar taktuję 62500Hz.
> Z tym przełączaniem pinu dobry patent, podepnę drugi kanał i sprawdzę co
> się dzieje.
>
> Dariusz Żołna
>
> W sumie masz odpowiedź, bo jak 16MHz podzielisz na 256 i policzysz
> impulsy dla jednego okresu 2KHz to wyjdzie raptem 31 zliczeń, czyli
> rozdzielczość raptem 2000Hz/31 -> 64Hz
>
> Daj z dzielnikiem 1
No i super, dzięki, błąd przy najwyższych częstotliwościach nie wynosi
teraz więcej niż 3Hz, co jest w pełni akceptowalne.
Jak to człowiek czasem się zakałapućka i nie pomyśli o takiej prostej
sprawie :) Ja szukałem problemów raczej w czasie wykonywania procedury
przerwania lub kolizji przerwań :)
Pozdrawiam,
Dariusz Żołna
-
7. Data: 2009-09-10 21:23:21
Temat: Re: AVR i pomiar okresu
Od: mk <r...@m...remove>
Dariusz Zolna pisze:
> W jaki sposób ustawić timer w powiedzmy Atmega8, żeby jak najdokładniej
> mierzyć czas pomiędzy dwoma kolejnymi impulsami? Wiem że jest taki tryb
> pracy timera, ale coś nie mogę załapać jak go skonfigurować.
> Teraz wykonuję to zadanie używając INT0 w którym odczytuję TCNT1 i
> odejmuję jego poprzednią wartość. Niestety jest to dosyć niedokładne, bo
> o ile na oscyloskopie mam stabilny przebieg, to przy 2000Hz zmierzona
> przeze mnie częstotliwość waha się w zakresie kilkudziesięciu Hz (i to
> jest też max tego co potrzebuję mierzyć, zależy mi za to na dokładności
> i szybkości pomiaru, nie mogę uśredniać).
Skorzystaj z "Input Capture Unit" Timera 16-bitowego.
pzdr
mk
-
8. Data: 2009-09-11 14:11:06
Temat: Re: AVR i pomiar okresu
Od: Konop <k...@g...pl>
Dariusz Zolna pisze:
> Zibias pisze:
>> Użytkownik "Dariusz Zolna" <a...@u...com> napisał w wiadomości
>> news:h8bnls$jk0$1@inews.gazeta.pl...
>> Konop pisze:
>>> A jak zbocza sygnału?? Ostre?? Bo bez tego, to możesz mieć różny
>>> moment wejścia do przerwania... w czym piszesz? w C czy w gołym ASM?
>>> Są jakieś fragmenty kodu, na czas których blokujesz przerwania??
>>> Spróbuj od razu po wejściu do procedury przerwania przełączać jakiś
>>> pin... ciekawy jestem,czy ten przebieg też będzie stabilny...
>>> I napisz jeszcze z jaką częstotliwością popędzasz ten timer....
>>
>>
>> Sygnał jest uformowany, zbocza ostre. Piszę w gcc, przerwań nie blokuję
>> niczym innym oprócz ich własnych procedur. Kwarc 16MHz, dzielnik 256,
>> czyli zegar taktuję 62500Hz.
>> Z tym przełączaniem pinu dobry patent, podepnę drugi kanał i sprawdzę co
>> się dzieje.
>>
>> Dariusz Żołna
>>
>> W sumie masz odpowiedź, bo jak 16MHz podzielisz na 256 i policzysz
>> impulsy dla jednego okresu 2KHz to wyjdzie raptem 31 zliczeń, czyli
>> rozdzielczość raptem 2000Hz/31 -> 64Hz
>>
>> Daj z dzielnikiem 1
>
> No i super, dzięki, błąd przy najwyższych częstotliwościach nie wynosi
> teraz więcej niż 3Hz, co jest w pełni akceptowalne.
> Jak to człowiek czasem się zakałapućka i nie pomyśli o takiej prostej
> sprawie :) Ja szukałem problemów raczej w czasie wykonywania procedury
> przerwania lub kolizji przerwań :)
No to już wiesz czemu o to pytałem ;)... A zapytam - robisz teraz tak,
że odczytujesz i zerujesz, czy dalej coś odejmujesz?? Jeśli odejmujesz -
to pamiętaj, że jest to metoda dobra, gdy później uśredniasz wynik...
sądze, że w Twoim przypadku odczyt-zerowanie da lepszą stabilność wyniku
;)...
Pozdrawiam
Konop
-
9. Data: 2009-09-11 14:22:34
Temat: Re: AVR i pomiar okresu
Od: Dariusz Zolna <a...@u...com>
Konop pisze:
> No to już wiesz czemu o to pytałem ;)... A zapytam - robisz teraz tak,
> że odczytujesz i zerujesz, czy dalej coś odejmujesz?? Jeśli odejmujesz -
> to pamiętaj, że jest to metoda dobra, gdy później uśredniasz wynik...
> sądze, że w Twoim przypadku odczyt-zerowanie da lepszą stabilność wyniku
> ;)...
Dzięki. Muszę odejmować, bo mierzę 2 sygnały a 16-btowy timer jest jeden.
Dariusz Żołna