Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Miernik częstotliwości na AVR - od 1Hz do 10MHz

manekinen 27 Sep 2013 12:06 45429 54
phoenixcontact
  • Miernik częstotliwości na AVR - od 1Hz do 10MHz
    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 :) Miernik można rozbudować o pomiar do 100MHz lub więcej z 10Hz krokiem, wystarczy na wejście włączyć odpowiednio szybki dzielnik częstotliwości i przesunąć kropki na wyświetlaczu.

    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.

    Miernik częstotliwości na AVR - od 1Hz do 10MHz Miernik częstotliwości na AVR - od 1Hz do 10MHz Miernik częstotliwości na AVR - od 1Hz do 10MHz Miernik częstotliwości na AVR - od 1Hz do 10MHz Miernik częstotliwości na AVR - od 1Hz do 10MHz Miernik częstotliwości na AVR - od 1Hz do 10MHz

    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
    About Author
    manekinen
    Level 29  
    Offline 
    manekinen wrote 1629 posts with rating 2330, helped 76 times. Live in city Kętrzyn. Been with us since 2006 year.
  • phoenixcontact
  • #2
    Zielonka
    Level 22  
    Rozdzielczość 1 Hz bez stabilizacji termicznej kwarcu nie ma większego sensu. Proponuję "wrzucić" kwarc chociażby w zimny termostat. Robiłem rożnego rodzaju mierniki częstotliwości (TTL i uC) i z "gołym" kwarcem nie dało się wycisnąć dokładności lepszej niż 10Hz. Poza tym układ godny uwagi.
  • #3
    excray
    Level 40  
    Rozumiem że w pewnych krytycznych sytuacjach licznik może mieć większy błąd. Np gdy nastąpiło przerwanie od T0 a kilka CK później od T1. Wtedy czas zliczania przedłuża się o obsługę przerwania T0. Czy dobrze rozumiem? Poza tym bardzo fajny projekt. W większości zastosowań wystarcza dokładność kilku %. Poprawiłbym tylko wejście. Dołożyłbym na wejściu szeregowo opornik np 10k to zabezpieczałoby wejście przed uszkodzeniem ładunkiem elektrostatycznym.
  • #4
    leonow32
    Level 30  
    Jak zwykle projekt bardzo porządnie wykonany i godny naśladowania, jednak jest jedno "ale" jak poprzednik zauważył - generator kwarcowy średnio nadaje się do mierników częstotliwości. Podgrzej ten kwarc trochę i wynik Ci się zmieni. Poszukaj w Farnellu generatorów TXCO czyli zintegrowanych generatorów z kompensacją temperaturową , ale niestety do tanich nie należą.

    (jak chcesz to Ci wyślę jeden taki po dobrej znajomości ;) )
  • #5
    KGS
    Level 23  
    Witam Serdecznie !
    Wspomniane generatory TXCO (np. 16MHz) THT i SMD wcale nie powalają ceną, a stanowią doskonałą alternatywę dla kwarcowego wzorca częstotliwości, pod względem jego stabilności). Jak mniemam ATiny ma za mało wyproadzeń dla 8 wyświetlaczy LED i to chyba by była istotna przeszkoda-zmiana. (z LED-owych wyświetlaczy pozwoliłoby zbudować naprawdę imponującą skalę - wyświetlacz). I do tego w pełni profesjonalny miernik częstotliwości, Nie każdy przecież jest fanem LCD (sam używam MC66+MCW2) i cieszę się z jego zielonych wyświetlaczy LED, bo jest bardziej czytelny niż kit 0-74k z negatywowym niebieskim wyświetlaczem.
    Aktualnie pracuję projektowo nad przed wzmacniaczami do nich i preskalerami (ERA 3 SM + MB506 +BFR96S,BF256, choć rozważam też NE592 czy uA733 dla niższych częstotliwości~100MHz), tak by w najmniejszym stopniu obciążały mierzony układ.
    W każdym razie ostro kibicuję Koledze Maniken w rozwinięciu swojego projektu o dodatkowe dwa wyświetlacze. I stąd moje gratulacje dla jego obecnej konstrukcji i profesjonalnego wkładu pracy.
    Tak na marginesie OMIG też robi takie generatory stabilizowane termicznie zasilane 3,3 i 5V. Pozdrawiam !
  • #6
    maciej_333
    Level 38  
    To urządzenie mierzy jedynie częstotliwość średnią za okres 1s. Ponadto na błąd tego układu składa się błąd sygnału wzorcowego, akurat tu taktującego mikrokontroler. Drugi problem to brak synchronizmu pomiędzy sygnałem mierzonym, a cyklem pomiarowym. Brak też układu formującego. Jedyny układ "formujący", to wejście T0 licznika i jego logika. Do większości zastosowań ta rozdzielczość jest zbyt wysoka, ponadto wydłuża ona czas bramkowania. Czekanie 1s jest dość uciążliwe. Brak tu diody LED "gate".
  • #7
    manekinen
    Level 29  
    Panowie, zdaję sobie sprawę z niedoskonałości takiego rozwiązania - dla tego nieco napisałem o źródle taktowania dla miernika. Czym lepsze źródełko tym pomiar ma więcej sensu. Jeśli zastosujemy dobry generator nawet bez kompensacji temp to już będzie o niebo lepiej. Po za tym porobiłem trochę testów i zwiększenie temp rezonatora o kilka stopni wprowadza praktycznie pomijalne zmiany w częstotliwości. Dopiero rozgrzanie kwarcu lutownicą transformatorową zwiększa jego częstotliwość o uwaga całe 3 Hz. A generatory 16MHz nie są jakimiś egzotycznymi podzespołami, bez trudu można nabyć.

    AP200 wrote:
    Witam.
    Projekt fajny mam pytanie czy autor przerobił by kod pod wyświetlacz LCD 2x16?
    Ja jestem za słaby w te klocki.

    Jeśli ktoś zaprojektuje pod to schemat + płytkę i o ile znajdę na to czas to myślę że mógłbym coś skrobnąć.

    excray wrote:
    Rozumiem że w pewnych krytycznych sytuacjach licznik może mieć większy błąd. Np gdy nastąpiło przerwanie od T0 a kilka CK później od T1. Wtedy czas zliczania przedłuża się o obsługę przerwania T0. Czy dobrze rozumiem?


    Już tłumaczę działanie. Mogę trochę pokręcić bo miernik robiłem już jakiś czas temu, w marcu.
    C0 (counter0) - licznik impulsów
    T1 (timer1) - podstawa czasu

    Jeśli przerwanie T1 wypadnie w przerwaniu C0 to nie czeka na jego zakończenie ale wykonuje się od razu. Na samym początku T1 zostanie spisana wartość z C0 i pomiar będzie leciał od nowa. Jest tu mały poślizg kilku cykli zegarowych. Sam skok 2 cykle, odłożenie rejestru R24 kolejne 2, wpisanie Counter0 do R24 - 1 cykl. W tym czasie na wejście może przyjść dodatkowy impuls który zostanie niepotrzebnie doliczony i wynik będzie zawyżony o 1, stanie się to przy wyższych częstotliwościach, o tym wspomniałem w opisie. Jeśli ktoś ma pomysł na wyeliminowanie tej niedoskonałości to chętnie wprowadzę zmiany.
    Code: armasm
    Log in, to see the code


    Jeśli C0 wypadnie w przerwaniu T1 to nic się nie stanie ponieważ wystąpienie T1 i tak oznacza koniec pomiaru i reset liczników. Na samym początku T1 spisany jest stan C0 i co się w nim dzieje to już nie istotne. Gdyby jednak podczas wykonywania przerwania T1 ustawiła się flaga wywołania C0 (przepełnienie licznika) to jest ona pod koniec profilaktycznie kasowana w rejestrze TIFR i nie dochodzi do jego wywołania (niechcianego zwiększenia licznika o 256).
    Code: armasm
    Log in, to see the code


    Obydwa liczniki są kasowane w możliwie tym samym czasie, na ile pozwala procesor - poślizg 1 cykla zegarowego instrukcji OUT. Impuls na wejściu pojawia się co ponad dwa cykle więc tutaj nie występuje żaden błąd, nic nie ucieka nic nie jest zawyżane.
    Code: armasm
    Log in, to see the code


    W kodzie ASM zostawiłem komentarze oraz zakomentowany kod bascomowy więc można dojść co gdzie się dzieje.

    Najlepiej byłoby użyć procesora z dwoma licznikami 16 bitowymi wtedy problem przerwania C0 praktycznie przestał by istnieć.

    maciej_333 wrote:
    Drugi problem to brak synchronizmu pomiędzy sygnałem mierzonym, a cyklem pomiarowym.

    Można jaśniej?
    maciej_333 wrote:
    Do większości zastosowań ta rozdzielczość jest zbyt wysoka, ponadto wydłuża ona czas bramkowania. Czekanie 1s jest dość uciążliwe.

    W planach miałem dodanie automatycznego przełączania czasu próbkowania na np. 0,1s jeśli częstotliwość zmienia się o ponad 1kHz - czyli takie ułatwienie podczas nastawy częstotliwości na generatorze. Jeśli zmiany są mniejsze niż 1kHz to by oznaczało że nastawiamy dokładnie i potrzebny będzie wynik w wyższej rozdzielczości 1Hz. Widać nawet fragmenty zakomentowanego kodu od tej funkcji - ale z jakiegoś powodu zaniechałem jej dokończenia.

    KGS wrote:
    Jak mniemam ATiny ma za mało wyproadzeń dla 8 wyświetlaczy LED i to chyba by była istotna przeszkoda-zmiana.

    KGS wrote:
    W każdym razie ostro kibicuję Koledze Maniken w rozwinięciu swojego projektu o dodatkowe dwa wyświetlacze.

    A do czego ten ósmy lub nawet dziewiąty wyświetlacz? Więcej jak 10MHz nie da się wycisnąć na obecnym układzie, ponieważ i tak już pracuje przetaktowany. Jeśli by chcieć pomiar do np. 20MHz to Attiny musiałby pracować z prędkością 45MHz co jest nierealne. Dopiero układ z dwoma licznikami 16bit pozwoliłby na więcej, chociaż pin wejściowy licznika też ma swoje ograniczenie co do możliwości próbkowania, każda połówka impulsu podanego na wejście musi być dłuższa niż jeden cykl zegarowy, jeśli jeden impuls składa się z dwóch połówek to oznacza że nie może on być krótszy niż 2 cykle. Nota mówi że bezpieczną wartością jest 2,5 cykla na jeden impuls, przy czym należy pamiętać o równym wypełnieniu 50%. Tutaj układ próbkuje właśnie już przy swojej górnej granicy, więc nawet jeśli dałoby się napisać szybszy kod / użyć licznika 16bit, to słabym punktem okazałby się pin wejściowy.

    maciej_333 wrote:
    Brak też układu formującego. Jedyny układ "formujący", to wejście T0 licznika i jego logika.

    To także opisałem. Układ nie jest w żaden sposób rozbudowany, z założenia miał pracować jako element innego urządzenia (w tym przypadku generatora funkcyjnego) który dostarczy mu akceptowalnego sygnału.

    Po za tym jaki sens porównywać układ zbudowany za 10zł do profesjonalnych mierników za kilka stówek?
  • #8
    maciej_333
    Level 38  
    manekinen wrote:
    maciej_333 wrote:
    Drugi problem to brak synchronizmu pomiędzy sygnałem mierzonym, a cyklem pomiarowym.

    Można jaśniej?

    Twój miernik jest oparty o taki
    Miernik częstotliwości na AVR - od 1Hz do 10MHz
    schemat blokowy, ponieważ jest to miernik częstotliwości średniej w czasie pomiaru Tp = 1s. Jednak faza sygnału mierzonego może być dowolna względem fazy sygnału bramkującego. Miernik ten może zliczyć też tylko całkowitą liczbę okresów Nx sygnału mierzonego w czasie Tp. Pamiętać trzeba, że Nx nie musi odpowiadać faktycznej liczbie okresów w czasie Tp. Wynika to właśnie z braku wspomnianego już synchronizmu. Ilustruje to taki rysunek:
    Miernik częstotliwości na AVR - od 1Hz do 10MHz.
    Omawiany problem ilustrują czasy Δtp i Δtk. Czas Δtp da się wyeliminować, poprzez wykonanie synchronizacji z przebiegiem mierzonym za pomocą przerwania asynchronicznego AVR'a. Kiedyś to zrobiłem w prostym wykrywaczu metali na 8051. Poprawiło to powtarzalność pomiarów, co w tamtym urządzeniu było bardzo istotne.

    Pamiętaj, że nie robisz próbkowania. Próbkowanie to pobranie wartości sygnału w dyskretnych chwilach czasu (podejście bardzo uproszczone). Ty Kolego natomiast mierzysz jeden z parametrów sygnału, uśredniony za czas Tp.

    Starałem się by wypowiedź nie była zbyt akademicka. Nie wiem, czy udało się to osiągnąć.
  • #9
    cukras
    Level 17  
    Witam, coś mi się wydaje że z tą dokładnością to kolega przesadził. Biorąc pod uwagę twierdzenie Kofielnikowa-Shannona o częstotliwości próbkowania sygnału to aby uniknąć zjawiska aliasingu, częstotliwość próbkowania musi być większa niż dwukrotność maksymalnej częstotliwości sygnału próbkowanego. Przyjmując to, minimalna wymagana częstotliwość próbkowania powinna być dwa razy większa od częstotliwości sygnału próbkowanego. Więc przy kwarcu w pobliżu 20 MHz nie za bardzo wieżę, że możesz dokładnie mierzyć częstotliwości podchodzące pod 10 MHz. Uważam, że powinieneś wybrać inne źródło taktowania procesora i o wyższej częstotliwości. Jak pisano powyżej częstotliwość generatora kwarcowego będzie "płynąć" wraz z temperaturą. A z innej strony to czy temu mikrokontrolerowi nie będzie przeszkadzać częstotliwość taktowania powyżej 20 MHz?

    pzdr
  • #10
    manekinen
    Level 29  
    maciej_333, szczerze mówiąc niewiele zrozumiałem z tego wykładu. Sygnał zbierany z wejścia jest synchronizowany z wewnętrznym zegarem poprzez układ wejściowy pinów T0/T1, i po tym jest już traktowany jako próbkowany. Jest to opisane w nocie pod Timer/Counter0 > External clock source. Być może układy 8051 tego nie miały. Nie wiem czy o to Koledze chodzi. Żaden problem z powtarzalnością pomiarów nie występuje.
    Miernik częstotliwości na AVR - od 1Hz do 10MHz

    cukras, przecież napisałem o tym wyżej. Każda połówka impulsu podanego na wejście musi być dłuższa niż 1 cykl zegarowy. Więc jeśli wypełnienie będzie równe 50% to będzie można mierzyć sygnały o częstotliwości nieco ponad dwa razy niższej od częstotliwości taktowania - i tak tutaj się dzieje. Co do taktowania powyżej 20MHz - a czemu ma przeszkadzać? Proszę poszukać informacji o przetaktowywaniu układów AVR lub jakichkolwiek innych układów / procesorów / pamięci. Tutaj przetaktowanie to nieco ponad 10% (przy kwarcu 22.1184Mhz) więc niewiele. Układ nie wykorzystuje przetworników ADC itp które już mogą sprawiać problemy przy przetaktowaniu.
  • phoenixcontact
  • #11
    maciej_333
    Level 38  
    manekinen - Wiem, że większość Timerów AVR jest synchroniczna, jednak są też asynchroniczne względem sygnału wejściowego. Klasyczny 8051 faktycznie tego nie miał. Tu jednak nie o to chodzi.
    Chodzi o to, że włączyć zliczanie możesz w dowolnej chwili. Tzn. w dowolnym "punkcie" sygnału mierzonego. Tak samo z wyłączeniem zliczania. To właśnie ilustrują te dwa czasy.
  • #12
    krzysiek1991
    Level 10  
    Fajny projekcik ale czy kolega mógłby napisać kod tak aby wartości były wyświetlane w ilości cykli/h
    Na przykład coś pracuje z częstotliwości 5s na cykl i żeby była wyświetlana wartość ile cykli robi na godzinę pewnie to banalne ale ja w tym temacie jestem zielony bardzo bardzo proszę o pomoc
  • #13
    perlon
    Level 20  
    krzysiek1991 wrote:
    Fajny projekcik ale czy kolega mógłby napisać kod tak aby wartości były wyświetlane w ilości cykli/h
    Na przykład coś pracuje z częstotliwości 5s na cykl i żeby była wyświetlana wartość ile cykli robi na godzinę pewnie to banalne ale ja w tym temacie jestem zielony bardzo bardzo proszę o pomoc


    Ten miernik mierzy od 1Hz czyli 1 cykl/s. 1cykl/5s to 0,2Hz. Czyli co piąta próbka 1s pokazałaby 1, pozostałe próbki pokazałyby 0. Druga sprawa to odliczenie 1godz. Bez RTC na tym mikrokontrolerze to nieco karkołomne, ewentualnie okresy czasowe do zliczania powyżej 5s i aproksymacja na 1godz. Tak więc to chyba nie ten projekt do przeróbki jest ci potrzebny.
  • #14
    narasta
    Level 21  
    Tragicznie wykonana płytka. Po co robisz pcb skoro i tak łączysz wszystko drutami, no Chyba, że to poprawki

    Edit: Dopiero teraz zauważyłem, że to płytka dwustronna, a mimo to jest druciarstwo.

    Moim zdaniem projekt niedokończony.
  • #15
    domasia
    Level 15  
    Przecież w opisie płytki wyjaśniono dokładnie dlaczego są druty, wystarczy doczytać?
  • #16
    tomiok
    Level 33  
    Czy dało by się jakoś przerobić na 30 MHz ?
    Zależy mi do pomiaru CB - radia :)
  • #17
    manekinen
    Level 29  
    tomiok, dodaj na wejście odpowiednio szybki preskaler 1:10 i przesuń kropki - będzie 100MHz z rozdzielczością 10Hz. Można wykorzystać preskaler o innym przełożeniu ale będzie wymagało to zmian w kodzie.

    narasta, odsyłam do pierwszego postu, tym razem postaraj się coś przeczytać po za obejrzeniem obrazków.
  • #18
    toriman
    Level 15  
    Witam!

    Projekt bardzo fajny - zrobiłem, działa ale początkowo miałem poważny problem, ponieważ kwarc w moim egzemplarzu - 22.1184MHz jest mocno niedokładny. W związku z tym pomiar generatora kwarcowego, np. 4 MHz dawał odczyt conajmniej o 350 Hz niższy, czyli 3.999.650 Hz. Zastosowanie trymera w sposób opisany przez manekinena tylko troszkę poprawił wskazania

    Poradziłem sobie tak, że zmieniłem wartość Const Compare = 21600 na Const Compare = 21602, czyli taką jakbym miał odrobinę szybszy kwarc a w związku z tym troszeczkę dłużej powinien trwać pomiar. Po skompilowaniu z nową wartością....

    ... JEST. Działa obecnie bardzo ładnie. Na generatorze 4MHz daje stabilny odczyt 4.000.007 Hz - a że nie mam jak skalibrować miernika - dalej już nie kombinuję. Taka poprawka jest dla mnie jak najzupełniej satysfakcjonująca.

    Dzięki za udany i prosty układ.

    Pozdrawiam
  • #19
    b2d
    Level 15  
    Witam. Za zgoda autora załączam projekt płytki przy użyciu elementów tht, przetestowany, sprawny. Dodatkowo zdjęcie z efektem końcowym oraz dla ułatwienia screen z ustawieniami fuse bitów w programie bascome.
  • #20
    manekinen
    Level 29  
    Dzięki, domyślam się że układ działa z oryginalnym niemodyfikowanym kodem? Czy porównywał Kolega dokładność pomiarów z innym miernikiem lub generatorem?

    Całkiem zgrabnie to wyszło, pozwoliłem sobie zamieścić foto z załącznika.
    Miernik częstotliwości na AVR - od 1Hz do 10MHz
  • #21
    rychow1
    Level 11  
    Witam,projekt zrobiony .dołożyłem preskaler na LB3500(dzieli przez 8) i 74LS74(dzieli przez 4) i mogę robić pomiary do 150 MHz.Ponieważ zastosowałem kwarc 16 MHz bezpośredni pomiar to nieco ponad 7 MHz a 150 MHz to górna granica LB3500.
    Dziękuje za udostępnienie projektu.
    Pozdrawiam Ryszard.
  • #22
    manekinen
    Level 29  
    Może udostępnisz schemat lub chociaż zmodyfikowany kod? Jak z dokładnością? Porównywane z innym miernikiem?
  • #23
    rychow1
    Level 11  
    Generalnie w kodzie nic nie zmieniałem poza częstotliwością kwarcu. Preskaler zastosowałem jako zewnętrzny. Aplkacje LB 3500 wziąłem ze schematu AVT 2666. Sygnał wyjściowy z LB podany jest na tranzystor BC547 w celu uzyskania poziomu TTL i dalej na pierwszą i dalej drugą dwójkę przerzutnika 74LS74. Tak powstał preskaler z podziałem /32. Jeżeli chodzi o dokładność, to nie mam z czym porównać, ale ona dla mnie nie jest tak ważna. Wystarczy mi jak miernik np.pokaże 95 MHz i na skali radia też w tych okolicach słyszę sygnał generatora.
    Pozdrawiam Ryszard.
  • #24
    manekinen
    Level 29  
    Ok, ale jak dostosowujesz wyświetlany wynik do rzeczywistości? Sygnał nie jest dzielony przez 10 czy 100 że wystarczy przesunąć kropkę, po podziale przez 32 miernik będzie pokazywał głupoty.
  • #25
    maciej_333
    Level 38  
    manekinen wrote:
    Ok, ale jak dostosowujesz wyświetlany wynik do rzeczywistości? Sygnał nie jest dzielony przez 10 czy 100 że wystarczy przesunąć kropkę, po podziale przez 32 miernik będzie pokazywał głupoty.

    Nie potrzeba tu oczywiście żadnego mnożenia wyniku. Wystarczy właściwie dobrać czas bramkowania. Przykładowo mamy przebieg mierzony o częstotliwości 100MHz. Przy podziale przez 32 mamy więc 3,125MHz. Okres wyniesie zatem 0,32µs. Wystarczy teraz dobrać czas bramkowania dany wzorem 32*10^n, gdzie n=...-3, -2, -1, 0, 1, 2, 3... . Przykładowo przy n=-2 mamy czas bramkowania 320ms. W takiej sytuacji 320ms/0,32µs = 1000000 impulsów. Wystarczy teraz właściwie postawić przecinek. Faktyczna rozdzielczość jest oczywiście 32 razy gorsza. Wynosi ona zatem 0,0032MHz. Analogicznie wykonuje się miernik dla preskalerów o innym współczynniku podziału.

    Nie wiem jak masz napisany program, ale pewnie przy częstotliwości kwarcu 16MHz podany warunek został spełniony.
  • #26
    b2d
    Level 15  
    manekinen wrote:
    Dzięki, domyślam się że układ działa z oryginalnym niemodyfikowanym kodem? Czy porównywał Kolega dokładność pomiarów z innym miernikiem lub generatorem?

    Całkiem zgrabnie to wyszło, pozwoliłem sobie zamieścić foto z załącznika.
    Miernik częstotliwości na AVR - od 1Hz do 10MHz



    Tak kodu nie zmieniałem, zmieniłem tylko procesor na zwykły attiny2313 oraz na kwarc 16MHz. Co do dokładności z generatorem z karty dźwiękowej mam dokładność rzędu + /- 1Hz natomiast jak mierzę częstotliwość generatora(nie turbo ekstra dobrego zwykły na tl084) to z multimetrem mam rozbieżność kilku herców ale to nie przeszkadza, bo jak jest stabilny sygnał mierzony to układ podaje naprawdę wiarygodne wartości.
  • #27
    manekinen
    Level 29  
    Dodaję wersję działającą z wyświetlaczem HD44780, dzięki uprzejmości Waldka.

    Miernik częstotliwości na AVR - od 1Hz do 10MHz

    Nie wykonywałem jej i nie testowałem, ale jedyne zmiany to wywalenie z głównej pętli obsługi multipleksowania wyświetlaczy LED i wciśnięcie obsługi LCD do przerwania "1s". Obydwie wersje powinny pokazywać dokładnie to samo, o ile będą napędzane z tego samego źródła i będą badały ten sam sygnał. Napisy wyświetlacza można bez problemu zmienić w kodzie źródłowym.

    Nie istnieje do tego na razie projekt płytki - robione na stykówce. Może zaraz usiądę i coś nasmaruję w eagle :)
  • #28
    malyjasiu
    Level 19  
    Witam.
    Obserwuję projekty kolegi manekinena od jakiegoś czasu, i są super. Proste, skuteczne. Ale dla tych, którym ciągle mało, myślę, że zastosowanie układu MAX7219 pozwoliłoby na zastosowanie prostszego uC, i dodanie w to miejsce prescalera. Zawsze lepiej, jak miernik ma większe możliwości, nawet jeżeli jego przeznaczenie jest z góry określone. Niech się "testuje" :). Poddaję pod dyskusję.
    Pozdrawiam
  • #29
    manekinen
    Level 29  
    Kolego, dzięki za dobre słowa :) Zacząłem dzisiaj mozolne przygotowywania do wykonania kolejnej wersji miernika, założenia są takie:
    -obsługa zewnętrznego preskalera /128 do ponad 1GHz (raptem 6zł w SO8)
    -automatyczne przełączanie /128 - /1 dla lepszej rozdzielczości od 10MHz w dół
    -dodanie toru wejściowego dla sygnału, który zaakceptuje coś więcej niż TTL (jeszcze nie wiem jak to będzie się miało do tego 1GHz)
    -automatyczne przełączanie czasu próbkowania 1s na 1/8s dla szybszego odświeżania podczas nastawy częstotliwości (wspominałem już o tym)
    -dodatkowy ósmy wyświetlacz (1.000.000.0 - ostatnia cyfra oznaczałaby 100Hz, co prawda z 128Hz skokiem no ale zawsze widać coś więcej)
    -jeszcze coś o czym teraz nie pamiętam ;)

    To wszystko nadal na Attiny2313. Dzięki zmianie sposobu multipleksowania, 8 wyświetlaczy wysteruję przy pomocy 8 pinów bez dodatkowych elementów - płytka się trochę skomplikuje i dojdzie kilka przelotek (warunek, pojedyncze wyświetlacze).

    LUB

    Rozważam zmianę procesora na Atmega48 (ważne aby producent gwarantował pracę przy 20MHz) i pozostanę przy standardowym multipleksowaniu, upraszczając jeszcze bardziej płytkę poprzez zastosowanie dwóch poczwórnych wyświetlaczy. Wtedy całość wraz z dodatkowymi elementami powinna schować się za wyświetlaczami i płytka będzie jeszcze mniejsza niż w obecnej wersji (wymiary pcb = wymiary dwóch poczwórnych wyświetlaczy + ciutkę po brzegach).

    Jeśli ktoś ma jakieś pomysły sugestie uwagi, zapraszam.
  • #30
    maciej_333
    Level 38  
    Zastanów się kolego raczej nad sposobem rozwiązania przełączania wejść (sugeruję raczej przekaźniki, albo dedykowane klucze elektroniczne). Ponadto dla uzyskania sensownej czułości potrzebny jest wzmacniacz szerokopasmowy - np. jakiś MAR. Automatykę bym raczej odpuścił. To spowolni wykonywanie pomiarów. W wielu przyrządach wyłączam takie funkcje, bo są za wolne. Czas bramkowania powinno się dobierać w kilku skokach przełącznikiem, lub klawiszem z linijką LED dla wskazania danego czasu. Podobnie wejście, ale zastosowanie kilku wejść może mocno uprościć układ.

    Takie tanie preskalery, są takie sobie. Nie są dedykowane do urządzeń pomiarowych. To miało pracować tylko z syntezami PLL w dawnych czasach. Zobacz do datasheet jak np. zmienia się czułość w funkcji częstotliwości.

    Dodam, że to już układ w.cz. i trzeba zaprojektować płytkę zgodnie z zasadami przyjętymi dla techniki w.cz. Nie chcę zniechęcać, ale moim zdaniem to będzie pracowało do ok. 300MHz.

    Jeżeli potrzebne jest wejście o poziomach większych od TTL, to raczej powinno się zadbać o impedancję wejściową 1MΩ i zwykły przełączany tłumik na rezystorach. Można dołączyć wtedy zwykła sondę osyloskopową 1:10. Właśnie tłumik powinien zaczynać całe urządzenie.