Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 10 mar 2025, o 13:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 28 sie 2016, o 15:08 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 10 kwi 2016
Posty: 6
Pomógł: 0

Usiłuję napisać program takiego miernika i podczas analizy konfiguracji timer-ów pojawiły się wątpliwości.
Do testów używam płytki arduino nano (atmega328p, 16MHz, 5V) i na chwilę obecną napisałem coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Powyższy kod działa ale testowałem go przy stosunkowo małej częstotliwości bo sinus/prostokąt 20kHz z karty dźwiękowej.
Założeniem moim jest aby wykorzystać maksymalne możliwości sprzętowe mikrokontrolera do pomiaru częstotliwości (czyli przy taktowaniu 16MHz pomiar do ok 8MHz o dokładności 1Hz) aby później przy zastosowaniu preskalera np SAB6456 uzyskać wystarczającą dokładność przy pomiarze wyższych częstotliwości.

Moje wątpliwości pojawiły się gdy natknąłem się na projekt miernika częstotliwości z takiej strony: http://mdiy.pl/miernik-czestotliwosci-na-avr-od-1hz-do-10mhz/ który spełniał by moje założenia.
Autor powyższego projektu użył również timer1 jako podstawę czasu i timer0 jako licznika impulsów ale z preskalerem 256 co właśnie spowodowało moje wątpliwości co do dokładności pomiaru mojego kodu.

I w końcu moje zasadnicze pytanie:
czy konfiguracja timer-ów z projektu do którego link wkleiłem powyżej zwiększa dokładność przy pomiarze częstotliwości w stosunku do mojego kodu, a jeśli tak to jak skonfigurować tak timer0 w C?



Ostatnio edytowano 28 sie 2016, o 15:29 przez BoloKonstruktor, łącznie edytowano 4 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sie 2016, o 15:10 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3219
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

Listingi wstawiamy tak: topic7402.html

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sie 2016, o 15:51 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 10 kwi 2016
Posty: 6
Pomógł: 0

Z informacji zawartych w tym poście (topic7402.html) wynika że powinienem zastosować:
Kod:
syntax=C++

tym czasem w skrypcie obsługującym to forum zaimplementowano
Kod:
syntax=cpp
co jak się okazało jest prawidłowe

Taka nieprecyzyjność i jednocześnie dezinformacja ze strony moderatora w dodatku na forum traktującym o programowaniu powoduje iż wycofuje się z zadanego wcześniej pytania i nie mam więcej pytań oraz wnoszę o zamknięcie lub usunięcie tego wątku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sie 2016, o 16:06 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3219
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

Jeezu, serio będziesz się kłócił o 2 (!) znaki? A może to test na samodzielne myślenie? Jakoś reszta forum nie ma z tym problemu.

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sie 2016, o 23:29 
Offline
Nowy

Dołączył(a): 16 maja 2016
Posty: 24
Pomógł: 3

Nie uda ci się uzyskać dokładności 1Hz przy 8MHz. A to dlatego, że ograniczeniem jest tu dokładność źródła taktowania (o czym zresztą jest napisane na wymienionej stronie). A to dlatego, że przy 1MHZ dokładność 1Hz wymagałaby dokładności źródła taktowania (zegara) lepszej niż 1ppm (ppm=części na milion). Tymczasem tanie kwarce mają dokładność rzędu 100ppm. Lepsze (droższe) kwarce są dokładniejsze okło 20ppm, specjalne termostatowane (TXCO) osiągają kilka ppm. Wyjściem może być zastosowanie scalaka DS3231 o max dokładności 2ppm.
Kolejną sprawą są opóźnienia między powstaniem przerwania, wywołaniem i obsługą. A to zajmie kilkanaście cykli zegara, czyli 1-2us co daje kolejne 2ppm.
Realnie patrząc - można łatwo uzyskać 4 cyfry znaczące, 5 cyfr znaczących przy pewnym wysiłku, 5 i 1/2 to praktyczny szczyt możliwości. Oczywiście nic nie stoi na przeszkodzie by miernik pokazywał 6,9 czy 12 cyfr. Tylko po co skoro i tak wartości ich będą przypadkowe.

Co do projektu, to nie dopatrzyłem się preskalera w liczeniu impulsów.
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Licznik zlicza do 256, a każde przepełnienie zwiększa licznik przepełnień.
Sam preskaler pracuje asynchronicznie i wyrabia sie do około 50MHz (z tego co pamiętam - warto sprawdzić).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO