ATNEL tech-forum
https://forum.atnel.pl/

Dziwne wyniki pomiaru częstotliwości z uC
https://forum.atnel.pl/topic20051.html
Strona 1 z 1

Autor:  pajmon [ 22 sty 2018, o 16:35 ]
Tytuł:  Dziwne wyniki pomiaru częstotliwości z uC

Cześć.
Mój problem wygląda tak że napisałem prosty program aby moja ATmega88 mierzyła częstotliwość. Do testów wygenerowałem sygnał PWM o częstotliwości dokładnie 31250 Hz z innego uC i podałem ten sygnał na mój "miernik częstotliwości". Wynik wyświetlany na LCD niestety pokazuje błędną wartość 2025. Podając inne częstotliwości zauważyłem taką zależność że wynik zawsze jest mniejszy ok. 15.5 razy od rzeczywistej wartości. Sprawdziłem jeszcze ten sam soft na ATmedze328 i o dziwo wyniki były inne niż na ATmedze88. Dla sygnału PWM o częstotliwości 31250 pomiar wykazał 16023 Hz i w ogóle wyniki dla innych częstotliwości były niecałe 2 razy mniejsze. Z racji że nie jestem ekspertem w tych sprawach spodziewam się że rozwiązanie może być banalne. Dodam jeszcze że oba uC taktowane były tym samym kwarcem. Będę wdzięczny za każdą wskazówkę.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Autor:  mirekk36 [ 22 sty 2018, o 16:41 ]
Tytuł:  Re: Dziwne wyniki pomiaru częstotliwości z uC

DIAGNOZA jest prosta jak DRUT, źle napisałeś kod ...

wystarczy spojrzeć chociażby na polecenie sprintf wydawane w przerwaniu, że już o TAKIEJ MASAKRZE jak użycie (kompletnie niepotrzebnie) typu float to samobójstwo ... Ja bym powiedział, że twój program poprawnie działa - albo inaczej ... przewidywalnie ...

propozycje dla ciebie:

1. ZAPOMNIJ że prockach istnieje taki typ zmiennych jak float i uwierz, że bez niego da radę WSZYSTKO zrobić ;) no może prawie wszystko i to z tym, żebyś miał wyniki zmiennoprzecinkowe

2. Obejrzyj sobie ten poradnik:


3. i jeszcze te:
https://www.youtube.com/watch?v=_-rNu2pFTJk
https://www.youtube.com/watch?v=meu-XF5sSOY
https://www.youtube.com/watch?v=J82_Zop9cjE

żebyś zrozumiał jak działają przerwania w prockach i dlaczego nie robi się takiej masakry w przerwaniach ...

domyślam się po tym kodzie, że przesiadasz się świeżo dopiero z andruino na C i pewnie stąd takie błędy

Polecam ci książkę:

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

od niej warto zacząć

Autor:  pajmon [ 22 sty 2018, o 17:32 ]
Tytuł:  Re: Dziwne wyniki pomiaru częstotliwości z uC

Dziękuje za odpowiedz Panie Mirku.
Jeśli chodzi o tego float'a rzeczywiście jest tutaj zbędny. Był wcześniej int i funkcja itoa do konwersji na chary i wróciłem do tego. Idąc za Pańskimi radami wyrzuciłem z przerwania ISR(TIMER0_OVF_vect) if'a i wrzuciłem go do while'a. Niestety wyniki pomiarów są identyczne jak wcześniej.

Autor:  micky [ 22 sty 2018, o 18:53 ]
Tytuł:  Re: Dziwne wyniki pomiaru częstotliwości z uC

A poprawnie ustawiłeś częstotliwość? Nie masz właczonego jakiegoś podzielnika (jak np /16 lub /2 i /8)?

Autor:  pajmon [ 22 sty 2018, o 19:02 ]
Tytuł:  Re: Dziwne wyniki pomiaru częstotliwości z uC

Jeśli pytasz o częstotliwość taktowania procka to zawsze wył. w mkAVR Calculatorze CKDIV 8. A jeśli pytasz o częstotliwość sygnału PWM to wybrałem prescaler /1 czyli 8Mhz/256/1=31250hz. Chyba że nie o to pytasz.

Autor:  xentis [ 22 sty 2018, o 21:32 ]
Tytuł:  Re: Dziwne wyniki pomiaru częstotliwości z uC

pajmon napisał(a):
if'a i wrzuciłem go do while'a.
i bardzo dobrze ale...
Pytanie czy ten cały if w pętli while wyrabia się w czasie poniżej 1 sekundy (mamy tam operacje na wyświetlaczu +sprint+ wykonywanie pętli jest "siekane" przerwaniami) bo jeśli się nie wyrabia to całość się będzie rozjeżdżać. Musiałbyś po każdym pomiarze zatrzymywać zliczanie wyrzucić wyniki na wyświetlacz i dopiero inicjować kolejny pomiar.

Autor:  pajmon [ 22 sty 2018, o 22:27 ]
Tytuł:  Re: Dziwne wyniki pomiaru częstotliwości z uC

xentis a masz jakąś propozycje jak to zrobić? Ja zrobiłem tak że na początku if'a wyzerowałem wszystkie wykorzystane rejestry liczników i na końcu znowu je ustawiłem ale wyniki pomiarów bez zmian takie same ale nie wiem czy dobrze to robię :/

Autor:  xentis [ 23 sty 2018, o 08:31 ]
Tytuł:  Re: Dziwne wyniki pomiaru częstotliwości z uC

widzisz zerowanie liczników niewiele tu daje ponieważ w czasie wykonywania ifa przerwania nadal działają i nadal owe liczniki zapełniają, a jeśli if się długo (za długo) wykonuje to zauważ że zanim się skończy wykonywać to w pewnym momencie może dojść do takiej sytuacji że zmienna "overflow" międzyczasie przyjmie już wartość powyżej 122 więc if nie zostanie wywołany przez co cały mechanizm "obróci" dwa razy zanim pobierzesz z niego wynik i go znowu wyzerujesz.
Co do rozwiązania to na początku tego ifa możesz np zatrzymywać oba liczniki wpisując do ich rejestrów "0" pod parametry CSXX, natomiast pod koniec ifa już po wyzerowaniu wszystkiego ponownie je załączyć do pracy. Wówczas będzie pewność że to co ląduje na wyświetlaczu jest efektem pojedynczego cyklu.
Reasumując pomiar będzie wyglądał tak:
1 - start pomiaru
2 - stop pomiaru po jego dokonaniu
3 - obróbka wyniku i jego wyświetlenie
Całość będzie się cyklicznie wykonywać od 1 do 3 przy czym czas wykonywania pkt 3 wpływać będzie jedynie na odświeżanie wyniku na wyświetlaczu a nie na sam pomiar.

Autor:  pajmon [ 23 sty 2018, o 09:59 ]
Tytuł:  Re: Dziwne wyniki pomiaru częstotliwości z uC

xentis ja właśnie tak zrobiłem. Na początku if'a wpisałem TCCR0B=0 i TCCR1B=0 a na końcu ustawiłem zgodnie z wcześniejszymi ustawieniami i to nie pomogło.

Autor:  xentis [ 23 sty 2018, o 10:22 ]
Tytuł:  Re: Dziwne wyniki pomiaru częstotliwości z uC

ok to może problemem jest taki mały chochlik opisany tu http://atnel.pl/domyslna-promocja-do-typu-int.html
Masz wogule jakiś przyrząd którym możesz dokonać pomiaru częstotliwości (poza oczywiście budowanym)?
Spróbuj zacząć może od testowania tego na niższych częstotliwościach, a dopiero jak będzie działać ok zwiększać - będzie łatwiej szukać problemu...

Autor:  pajmon [ 23 sty 2018, o 13:18 ]
Tytuł:  Re: Dziwne wyniki pomiaru częstotliwości z uC

Jutro będę miał dostęp do generatora i oscyloskopu więc może to mi pomoże w odnalezieniu problemu.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/