Miernik częstotliwości do 100MHz
W kilu słowach: potrzebowałem miernika, to sobie go zrobiłem:-)
Dlaczego mój? Widziałem sporo częstotliwościomierzy w Internecie, ale większość pasujących mi była oparta na mikrokontrolerze PIC, z którym nie mam doświadczenia (i nie wiem czy chcę mieć), miały zakres do ok. 50MHz i były średnio dokładne.
Natomiast zbudowanie miernika częstotliwości na znanym mi AVR też nie było zbyt proste ze względu na maksymalną częstotliwość jaką ten procesor może obsłużyć bezpośrednio, a która jest typowo 2 razy mniejsza od częstotliwości taktowania (a ta jest max. 20MHz). W takim wypadku potrzebowałem wstępnego dzielnika/preskalera. Szukając czegoś co by się nadawało natrafiłem na sporo rozwiązań, które jednak zazwyczaj były niedostępne w 'sklepie za rogiem’. Przyciśnięty to muru sprawdziłem jednak swoje zapasy 'przydasi’ i znalazłem tam 74HC393, który ma w środku dwa liczniki/dzielniki /16 pracujące z częstotliwością do 100MHz! Od tego momentu reszta była już prosta 🙂
Z zapasów również wygrzebałem mały i tani wyświetlacz LCD sterowany po SPI, zrobiłem prototyp i w zasadzie odpalił 'od kopa’ 🙂
Schemat:
Prototyp:
Jak prototyp zadziałał, to przyszedł czas na normalną płytkę:
Robienie płytki:
Zmontowane:
Ponieważ miałem problemy w prototypie z częścią wejścia analogowego na tranzystorze, a jak się okazało samo wejście TTL/CMOS mi wystacza, to nie montowałem tranzystora i okolic.
Testowanie:
Oprogramowanie:
Pierwszą działającą wersję było dosyć prosto napisać, ale później okazało się, że nawet pomiar samego siebie jest z małym błędem. Po małym główkowaniu okazało się, że błąd jest równy dokładnie ilości taktów pomiędzy odczytem wartości z liczników a ich skasowaniem. Dopisałem poprawkę na to i teraz pomiar jest już całkiem dokładny (na ile dokładny jest generator zegara w procesorze). Pozostał jeszcze jeden błąd, który czasem może się objawić: nieatomowe odczytywanie liczników, co może powodować ich zmianę w czasie odczytu, ale to sobie zostawię na później 🙂
Na dzisiaj działa tak jak chciałem:-)
I jednak rzecz o której prawie zapomniałem: na port szeregowy również przesyłane są zmierzone wartości, więc można sobie to podłączyć do komputera i coś tam dalej z tym robić 🙂
Pliki do Eagle i źródło programu w asemblerze można ściągnąć tutaj.
Hi
I would love to make this project, but LCD you are using is not easy to get, most electronic
stores sell 2×16 lcd’s
Alnoor
Hi Alnoor,
I’m aware that this lcd I’ve used is quite rare, but at the time I had to build this frequency counter, I hadn’t anything else.
Some time ago I’ve got standard 2×16 lcd, so it’s possible that some day I’ll do more friendly version:-)
Dzień dobry,
czy tym miernikiem można zmierzyć częstotliwość na linii o napięciu wyższym niż 5V, np. 12V?
A co się stanie jeśli podłączę napięcie ujemne -5V? Ulegnie uszkodzeniu?
Pozdrawiam.
Tak jak pisałem, stopień wejściowy na tranzystorze niezbyt działał, a że go nie potrzebowałem, to już dalej tematu nie drążyłem. Czyli obecnie ma wejście tylko TTL. Jakby wejście podłączyć przez jakiś rezystor, to pewnie układ by wytrzymał ujemne napięcia, jak i za duże dodatnie, bo to powinny przyciąć diody zabezpieczające wewnątrz licznika. Teoretycznie im większy rezystor, tym bezpieczniej, ale z drugiej strony za duży albo wprowadzi problem z wysterowaniem, albo obetnie pasmo wraz z pojemnościami wejściowymi układu. No i jeszcze zależy co będzie mierzone. Najlepiej poeksperymentować 🙂
Dziękuję za informację. Mierzyć będę głównie TTL, ale czasem może się w projekcie trafić linia z ujemnym napięciem. Bardziej chodzi o to, żeby przy pomyłce w podłączeniu nie umarło. W sumie to zrobię sobie mały zapas licznika :).
Wyświetlacz kupiony, będę składał.
Jeszcze jedno. Chciałbym przerobić program do obsługi LCD na HD44780. Czy mogę?
Gratulujemy wykonanej pracy! Potrzebne były do niej niemałe umiejętności, a Pański miernik częstotliwości posiada naprawdę zadowalające parametry. W dobie coraz to nowocześniejszy urządzeń, warto jednak również mieć w zapasie sprzęt od producenta 🙂
Dziękuję.
A od producenta mam już generator funkcyjny z miernikiem częstotliwości do 100MHz oraz oscyloskop cyfrowy. Dla wyższych częstotliwości mogę też użyć rtl-sdr z TCXO 🙂
Dzień dobry, czy miernik mierzy z dokładnością 3 miejsc po przecinku dla około 2 KHz, oraz czy można gotowy wynik pomiaru przesłać do Arduino celem dalszej obróbki ( pomnożenia przez liczbę …. ).
I ostatnie pytanie czy można wyzwolić pomiar impulsem rosnącym i zakończyć malejącym (TTL).
Dziękuję za info
Żeby zmierzyć częstotliwość z dokładnością do 3 miejsc po przecinku, to przy tej metodzie pomiaru, pojedynczy pomiar musiałby trwać ok. 16 MINUT.
A przy tak niskich częstotliwościach, to sygnał najprościej byłoby podłączyć bezpośrednio do tego Arduino.
Witam, miałbyś kod w c lub języku ide? Bo assembler to czarna magia dla mnie.