
Miernik częstotliwości o całkiem niezłych parametrach, bo potrafiący mierzyć częstotliwości od 1Hz do 10MHz (9,999,999Hz) z rozdzielczością 1Hz w całym zakresie. Idealny do generatorów funkcyjnych lub jako zwykły miernik. Do tego tani i prosty w wykonaniu, z ogólnodostępnych części, a małe wymiary pozwolą go zamontować w panelu dowolnego urządzenia.
Układ składa się z siedmu wyświetlaczy 7-segmentowych, uProcesora AVR Attiny2313, oraz garści tranzsytorów i rezystorów. Całą pracę wykonuje AVR i nie są tutaj potrzebne inne układy. Działanie jest proste, układ zlicza impulsy podane na wejście w czasie 1 sekundy i wyświetla wynik. Najważniejszą rzeczą jest bardzo dokładna podstawa czasu, której odliczaniem zajmuje się 16 bitowy Timer1 w trybie CTC. Drugi, 8 bitowy timer pracuje w roli licznika Counter0 i zlicza on impulsy podawane na jego wejście, t.j. pin T0. Co 256 impulsów wywołuje przerwanie w którym program zwiększa mnożnik. Po nadejściu przerwania 1 sekundy, zawartość tego mnożnika jest mnożona przez 256 (przesuwana w lewo o 8 bitów). Reszta impulsów które zdążył nabić licznik jest z niego spisywana i dodawana do wyniku mnożenia. Następnie wartość ta jest rozbijana na pojedyncze cyfry aby można było je wyświetlić na pojedynczych wyświetlaczach. Po tym, zaraz przed wyjściem z przerwania 1 sekundy, jednocześnie zerowane są oba liczniki i pomiar rozpoczyna się od nowa. W wolnym czasie procesor zajmuje się multipleksowaniem wyświetlaczy. Więcej szczegółów w kodzie źródłowym który zamieszczam w załączniku.
Rozdzielczość vs dokładność:
Dokładność zależy od źródła zegarowego jakim jest taktowany miernik. Sam kod może sporadycznie dodać jeden impuls przy bardzo wysokich częstotliwościach ale jest to praktycznie pomijalne. Kwarc jaki zastosujemy powinien być dobrej jakości, i mieć możliwie małe ppm (tolerancję). Najlepiej jeśli jego częstotliwość będzie podzielna przez 1024, np kwarce 16MHz lub 22.1184MHz. Aby uzyskać pomiar do 10MHz, należy użyć kwarcu powyżej 21MHz, np wcześniej wymieniony 22.1184Mhz. Miernik potrafi mierzyć częstotliwość do około 47% wartości kwarcu, więc dla 20MHz uzyskamy nie całe 10MHz, a dla 16MHz nie całe 8MHz – dla tego kwarc 22.1184Mhz będzie idealny i warto się w taki zaopatrzyć. Niestety nie jest on zbyt popularny, i jeśli taki znajdziemy, to będzie miał tolerancję rzędu 100ppm co się nie nadaje jako jakikolwiek wzorzec do pomiaru. Jeśli mamy inne urządzenie dokładnie mierzące częstotliwość (np oscyloskop ze sprzętowym pomiarem), możemy nasz układ skalibrować poprzez dołączenie małego trymerka (rzędu 1p-10p) do jednej z nóg kwarcu i do masy, i nim podregulować częstotliwość oscylacji w taki sposób aby pomiar pokrywał się z pomiarem oscyloskopu. Jeśli nie mamy takiej możliwości, musimy poszukać kwarcu z małym ppm, użyć generatora kwarcowego, lub po prostu założyć że kwarc będzie pracował równo z tym co podaje producent.
W załączniku znajdują się skompilowane wsady pod różne kwarce, ale możemy skompilować go sami pod własny. W Crystal wpisujemy częstotliwość kwarcu, a w Compare wpisujemy wynik dzielenia tej częstotliwości przez 1024, (nie wpisujemy reszty po kropce jeśli kwarc nie jest podzielny przez 1024).
Przebieg:
Na wejście można dodać w zasadzie dowolny przebieg 0-5V, nie tylko prostokąt. Układ świetnie zlicza sinus czy trójkąt, zliczenie jest dokonywane podczas zbocza opadającego przy napięciu 0.8V. Należy mieć na uwadze że wejście nie jest w żaden sposób zabezpieczone przed wyższymi napięciami. Wejście nie jest podciągnięte do zasilania, jest to wejście o wysokiej impedancji więc nie obciąży mierzonego układu – przysuwając palec, miernik pokaże 50Hz z sieci

Wyświetlacz:
Siedem wyświetlaczy 7-segmentowych sterowanych naprzemiennie, ze wspólną anodą (wspólny plus). Jeśli jasność jest zbyt niska, można zmienić rezystory ograniczające prąd segmentów na mocniejsze, należy jednak pamiętać aby nie przekroczyć 40mA w impulsie dla jednego pinu mikrokontrolera. Również zastosowane wyświetlacze mają swoj limit prądu chwilowego i należałoby się do tego stosować. Domyślnie rezystory te wynoszą 100ohm. Wyświetlacze niepotrzebne, t.j. te które wskazują zera są wygaszone aby ułatwić odczyt. Przykładowo dla wyniku „0.000.980″ zobaczymy tylko „980″ – kropki są również gaszone. Odświeżanie pomiaru odbywa się co sekundę, ponieważ podstawa czasu to 1 sekunda.
Płytka:
Dwustronna płytka o wymiarach 109mm x 23mm – niestety siódmy wyświetlacz nie zmieścił się w darmowej wersji Eagle, dla tego w projekcie jest on narysowany od ręki. Na płytce należy wykonać 3 połączenia przewodem, pierwsze na wierzchniej stronie płytki, należy doprowadzić zasilanie do pinu VCC procesora – to połączenie jest pokazane na warstwie opisowej. Dwa kolejne to połączenia do kropek wyświetlaczy, należy połączyć je przewodem do rezystora 330ohm znajdującego się na spodniej stronie płytki. U góry płytki znajdują się pady krawędziowego złącza ISP w standardzie Atmel ISP-6, patrząc od góry, pin pierwszy to ten od strony kwarcu. Złącza nie trzeba lutować na stałe, lub w ogóle go nie lutować, układ można zaprogramować dowolną metodą. Wyświetlacze należy montować w pewnym odstępie od płytki, tak aby możliwe było przylutowanie padów wierzchniej strony (4 pady na każdy wyświetlacz). Sam projekt płytki nie przewiduje montażu wcześniej wspomnianego trymera, jeśli jest potrzebny, należy go dolutować we własnym zakresie, np tak jak na zdjęciach. Płytka na zdjęciach różni się od tej z załącznika, to pierwsza wersja 1.0 która zakładała pomiar do 1MHz.






W załączniku projekt płytki eagle 6.4.0 oraz alternatywna wersja PDF; kod źródłowy bascom 2.0.7.6 oraz gotowe kody wsadowe dla różnych kwarców. Uwaga najnowsza darmowa wersja bascoma z tego co widzę to 2.0.7.5 i będzie ona wyrzucała błąd kompilacji, jeśli ktoś potrzebuje skompilować kod pod konkretne ustawienia to proszę zamieścić zmodyfikowane źródło tutaj w temacie.
Cool? Ranking DIY