AVR i pomiar okresu

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

Reply to
Dariusz Zolna
Loading thread data ...

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

Reply to
Konop

Konop pisze:

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

Reply to
Dariusz Zolna

Zibias pisze:

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

Reply to
Dariusz Zolna

Dariusz Zolna pisze:

Skorzystaj z "Input Capture Unit" Timera 16-bitowego.

pzdr mk

Reply to
mk

Dariusz Zolna 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 ;)...

Pozdrawiam Konop

Reply to
Konop

Konop pisze:

Dzięki. Muszę odejmować, bo mierzę 2 sygnały a 16-btowy timer jest jeden.

Dariusz Żołna

Reply to
Dariusz Zolna

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.