Witam
Temat stary jak świat. Wiele rozwiązań... Wszystkie sprowadzają się do liczenia impulsów (zboczy) w jednostce czasu (dla niskich częstotliwości metoda jest odwrotna i polega na pomiarze czasu między zboczami, ale to inny temat).
Postanowiłem sobie zbudować częstościomierz, więc coś na szybko sobie "skleiłem".
Zresztą posiłkowałem się dawnym projektem autorstwa kolegi Janeczqu.
Schemat oczywiście orientacyjny aby pokazać o co chodzi. Nie robię jeszcze docelowego projektu bo zatrzymałem się na głupim (dziwnym) problemie.
oto kod:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
inicjalizacja timerów:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jak widać nie ma tu nic dziwnego. Są ślady po moich próbach mieszania operacjami wyłączania przerwań (obecnie zarzucone bo nic nie zmieniało).
Problem polega na tym, że częstotliwość (czyli ilość impulsów zliczonych w ciągu sekundy) jest zaniżona.
Wzorzec sekundy aktualnie pobieram z przerwania generowanego przez RTC.
Próbowałem również wytworzyć wzorzec sekundy przy użyciu Timera0. Jednak błąd był jeszcze większy.
Co prawda nie posiadam pewnego częstościomierza do porównania, jednak źródła testowych przebiegów na których pracuję to scalone generatory TTL o różnych częstotliwościach.
Jako że stosuję licznik 74LS393 dokonujący podziału przez 16 ilość impulsów mnożę razy 16 w kodzie. Myślałem, że to jest źródłem błędu. Jednak nie. Podałem np. 3,6864MHz bez podziału na wejście T1 i błąd był taki sam. Przy tej częstotliwości jest to odchylenie o około 1 kHz w dół. Jak na mój rozum zdecydowanie za dużo jak na takie źródło, którego ideą jest dokładność.
Przy większych częstotliwościach błąd rośnie proporcjonalnie. Przy 50MHz jest już około 12-13 kHz.
Jednocześnie wskazanie częstotliwości jest dość stabilne, czasem zmieni się o kilka - kilkanaście Hz, ale to już jest w granicy dokładności generatora, poza tym kwarc w RTC też może nieco się wahać. Gdyby źródłem błędy był RTC (wzorzec sekundy) to oznaczałoby to, że spieszy się około 1 sekundy na godzinę. A jego dokładność (doświadczalnie sprawdzone) to koło 1 s. na dobę.
Zastanawiam się nad tym co może być przyczyną. Oczywiście może jutro uruchomię duży radziecki częstościomierz i porównam. Jednak powtarzalna odchyłka, proporcjonalna do częstotliwości sugeruje błąd w zliczaniu impulsów w moim układzie. Jednak nie przychodzi mi do głowy co można, w tak prostym przykładzie, zrobić inaczej...
Przyszło mi już do głowy, że zbocza przebiegu TTL z generatora są za mało strome i jakiś ich ułamek się gubi na EDGE DETECTOR, który jest na wejsciu T1 w MCU. Zrobiłem więc test z układem 74HC14 (negator z wejściem Schmitta) przed a później po dzielniku. Zresztą tak jak sądziłem nic to nie zmieniło.