Witam. Chciałem w celach edukacyjnych zrobić częstotliwościomierz. Ponieważ nie mam za bardzo skąd wziąć zewnętrznych impulsów postanowiłem, że jeden pin procka będzie je generował, a przerwanie int0 będzie liczyć ile tych impulsów było. Do odmierzenia czasu posłużył timer1, który ma odliczyć sekundę (więc wynik od razu w Hz). Po upływie sekundy ma się wyświetlić ilość liczonych impulsów. Wyzerować wszystkie zmienne i zacząć od nowa. Problem w tym, że obliczenia ilości impulsów są różne z tym co wyświetla mikrokontroler.Poniżej zamieszczam kod.
Nóżka pind.7 połączona z pind.4 procek atmega8 kwarc 16 MHz.
Dodam, że układ docelowo ma służyć w celu pomiaru częstotliwości nie większych niż koło 100kHz. Taki ukłas w teori wydaje mi się, że powinien mierzyć do 8 MHz.
Policzyłem jeszcze raz i jednak się zgadza. Jednak nie zamykam tematu, bo jestem ciekaw czy takie podejście jest dobre, czyli zliczać impulsy w przerwaniu int0 ? I co jeszcze może być źródłem sygnałów, żeby sprawdzić, że to dobrze działa?
Dodano po 2 [godziny] 35 [minuty]:
Jeszcze jedno podczas różnych ustawień zauważyłem, że :
1.)prescaler timera0 ustawiony na 1, oraz timer0=95 znacznie fałszuje wynik z obliczeniami (praktycznie nie ma różnicy z ustawieniem timera0=0)
a z prescalerem =8 już jest dużo lepiej (różnica pomiędzy pomiarem a obliczniami 100Hz)
2.)zmiana typu zmiennych z long na single również znacząco wpływa na wynik pomiaru, czyli coś jest nie tak.
Nóżka pind.7 połączona z pind.4 procek atmega8 kwarc 16 MHz.
Dodam, że układ docelowo ma służyć w celu pomiaru częstotliwości nie większych niż koło 100kHz. Taki ukłas w teori wydaje mi się, że powinien mierzyć do 8 MHz.
Kod: text
Policzyłem jeszcze raz i jednak się zgadza. Jednak nie zamykam tematu, bo jestem ciekaw czy takie podejście jest dobre, czyli zliczać impulsy w przerwaniu int0 ? I co jeszcze może być źródłem sygnałów, żeby sprawdzić, że to dobrze działa?
Dodano po 2 [godziny] 35 [minuty]:
Jeszcze jedno podczas różnych ustawień zauważyłem, że :
1.)prescaler timera0 ustawiony na 1, oraz timer0=95 znacznie fałszuje wynik z obliczeniami (praktycznie nie ma różnicy z ustawieniem timera0=0)
a z prescalerem =8 już jest dużo lepiej (różnica pomiędzy pomiarem a obliczniami 100Hz)
2.)zmiana typu zmiennych z long na single również znacząco wpływa na wynik pomiaru, czyli coś jest nie tak.