Elektroda.pl
Elektroda.pl
X
Arrow Multisolution Day
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Miernik częstotliwości - moje wątpliwości

bolokonstruktor 28 Sie 2016 18:18 1398 7
  • #1 28 Sie 2016 18:18
    bolokonstruktor
    Poziom 7  

    Usiłuję napisać program takiego miernika i podczas analizy konfiguracji timer-ów w różnych tego typu projektach a szczególnie w jednym (ale o tym później) pogubiłem się trochę i pojawiły się wątpliwości.

    Do testów używam platformy arduino nano (atmega328p, 16MHz, 5V) i na chwilę obecną napisałem coś takiego:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Powyższy kod działa ale testowałem go przy stosunkowo małej częstotliwości bo sinus 20kHz z karty dźwiękowej PC (próbkowanie 96kHz) i programu Audacity. Może nie jest to jakiś precyzyjny generator ale zanim sklecę jakiś generator kwarcowy muszę rozwiać moje wątpliwości odnośnie programu.

    Założeniem moim jest aby wykorzystać maksymalne możliwości sprzętowe mikrokontrolera AVR (świadomie pomijam PIC-y) 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 (/64 /256) 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 tej strony który spełniał by moje założenia.

    Autor tego projektu użył również timer1 (16bit) jako podstawę czasu i timer0 (8bit) jako licznika impulsów ale z podziałem /256 co właśnie spowodowało moje wątpliwości co do dokładności pomiaru według mojego kodu.

    Moje zasadnicze pytanie:
    czy konfiguracja timer-ów z projektu do którego link wkleiłem powyżej zwiększa precyzyjność przy zliczaniu impulsów w stosunku do mojego kodu, a jeśli tak to jak skonfigurować tak timer0 w C/C++?

    Proszę o odpowiedź jak również konstruktywną krytykę.

    0 7
  • Arrow Multisolution Day
  • #2 28 Sie 2016 19:03
    2675900
    Użytkownik usunął konto  
  • Arrow Multisolution Day
  • #3 28 Sie 2016 19:21
    bolokonstruktor
    Poziom 7  

    No według autora projektu do którego link wkleiłem "...Miernik potrafi mierzyć częstotliwość do około 47% wartości kwarcu..." jak też według wielu innych źródeł mikrokontroler AVR jest w stanie zmierzyć częstotliwość do właśnie ok 50% częstotliwości taktowania więc wydaje mi się że gdyby wykonywał te przerwania w jednym takcie to częstotliwość którą byłby w stanie zmierzyć uC wyniosła by wtedy 100% częstotliwości taktowania, a tak to chyba robi to w kilku taktach.

    0
  • #4 28 Sie 2016 19:50
    2675900
    Użytkownik usunął konto  
  • Pomocny post
    #5 29 Sie 2016 09:42
    piotrva
    Moderator na urlopie...

    Ktoś pisze bzdury. Ta metoda da kilka procent fcpu.
    Lepiej zliczyć impulsy w określonym czasie za pomocą timera w trybie licznika. Drugim timerem mierzysz ten czas.
    Dla niskich częstotliwości lepiej mierzyć okres impulsu za pomocą ICP.

    0
  • #6 29 Sie 2016 10:11
    bolokonstruktor
    Poziom 7  

    Przyznam że ja wprowadziłem Was w błąd opisując program z linku który wkleiłem.
    Autor tegoż projektu nie użył preskalera w timer0 (coś mi się zwidziało) tylko timer0 jako licznika który zlicza impulsy do 256 (bo więcej chyba nie może) po czym następuje przepełnienie i przerwanie i jego obsługa w której zliczana jest ilość przepełnień która z kolei mnożona jest przez 256 + zawartość licznika przed przepełnieniem.

    Czyli otrzymałem odpowiedź:

    Cytat:
    Lepiej zliczyć impulsy w określonym czasie za pomocą timera w trybie licznika. Drugim timerem mierzysz ten czas.

    na moje zasadnicze pytanie co do dokładności pomiaru według mojego kodu albo dalej błędnie rozumuje?

    0
  • #7 29 Sie 2016 11:27
    BlueDraco
    Specjalista - Mikrokontrolery

    Zieew... Z jakiego to istotnego powodu nie użyjesz mikrokontrolera z wieloma 16- lub 32- bitowymi timerami, tańszego i przy okazji z kilkadziesiąt razy szybszego od ATmega, z którym nie miałbyś żadnych problemów tego typu?

    0
  • #8 29 Sie 2016 13:00
    bolokonstruktor
    Poziom 7  

    Bo traktuje ten projekt eksperymentalnie i przede wszystkim edukacyjnie.
    Na razie jako tako zaczynam ogarniać AVR-y 8bit i nie chce sobie mieszać.
    Ponadto od atmegi zacząłem i mam jakiś taki sentyment.

    Dziękuje za odzew i uważam temat za zamknięty.

    0