Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Pomiar częstotliwości na atmega8, program w bascom

furcik2013 08 Oct 2014 12:11 1482 4
  • #1
    furcik2013
    Level 10  
    Witam. Chciałem w celach edukacyjnych zrobić częstotliwościomierz. Ponieważ nie mam za bardzo skąd wziąć zewnętrznych impulsów postanowiłem, że jeden pin procka będzie je generował, a przerwanie int0 będzie liczyć ile tych impulsów było. Do odmierzenia czasu posłużył timer1, który ma odliczyć sekundę (więc wynik od razu w Hz). Po upływie sekundy ma się wyświetlić ilość liczonych impulsów. Wyzerować wszystkie zmienne i zacząć od nowa. Problem w tym, że obliczenia ilości impulsów są różne z tym co wyświetla mikrokontroler.Poniżej zamieszczam kod.
    Nóżka pind.7 połączona z pind.4 procek atmega8 kwarc 16 MHz.
    Dodam, że układ docelowo ma służyć w celu pomiaru częstotliwości nie większych niż koło 100kHz. Taki ukłas w teori wydaje mi się, że powinien mierzyć do 8 MHz.

    Code: basic4gl
    Log in, to see the code


    Policzyłem jeszcze raz i jednak się zgadza. Jednak nie zamykam tematu, bo jestem ciekaw czy takie podejście jest dobre, czyli zliczać impulsy w przerwaniu int0 ? I co jeszcze może być źródłem sygnałów, żeby sprawdzić, że to dobrze działa?

    Dodano po 2 [godziny] 35 [minuty]:

    Jeszcze jedno podczas różnych ustawień zauważyłem, że :
    1.)prescaler timera0 ustawiony na 1, oraz timer0=95 znacznie fałszuje wynik z obliczeniami (praktycznie nie ma różnicy z ustawieniem timera0=0)
    a z prescalerem =8 już jest dużo lepiej (różnica pomiędzy pomiarem a obliczniami 100Hz)
    2.)zmiana typu zmiennych z long na single również znacząco wpływa na wynik pomiaru, czyli coś jest nie tak.
    Kamery 3D Time of Flight - zastosowania w przemyśle. Darmowe szkolenie 16.12.2021r. g. 10.00 Zarejestruj się
  • #3
    furcik2013
    Level 10  
    Wszystkie przykłady wykorzystują timer do liczenia impulsów, w którymś temacie też ktoś chciał w przerwaniu int0 liczyć impulsy ale podobno nie tędy droga. Ok. Mogę zrobić tak jak są wszystkie przykłady, ale jak sobie sprawdzić taki częstotliwościomierz? Nie jestem elektronik jak widać zresztą.Dzięki za odpowiedź.
  • #4
    Fredy
    Level 27  
    A czy wiesz o tym ,że liczniki (nie wszystkie) mogą wprost liczyć impulsy pochodzące z zewnątrz?
    Po co używać Inty i co każdy impuls przerywać główny program, skoro masz do tego piękne narzędzie?
  • #5
    furcik2013
    Level 10  
    Ok. W tym dokładnie przypadku chodziło mi tylko aby sprawdzić czy głowny program liczy impulsy nie miałem ich skąd wziąć więc wymyśliłem, że procek sam je sobie wygeneruje w przerwaniu timera0, a int0 je będzie liczył :). Całkowicie rozumiem, że użycie timera jako licznika jest lepsze. Tylko brakło timerów. Zrobiłem tak jak tu: https://www.elektroda.pl/rtvforum/topic697202.html
    I podłączyłem swoją nieszczęsną suwmiarkę elektroniczną, aby sprawdzić czy coś się dzieje na liniach data i clock. Pokazuje 92 Hz chyba coś nie tak z tą suwmiarką. Ogólnie ten problem z pomiarem częstotliwości wziął się z tego problemu, że nie mogłem odczytać danych wysyłanych przez suwmiarkę tu link do tego tematu: https://www.elektroda.pl/rtvforum/topic2905768.html
    Ponieważ mój pierwszy program do pomiaru liczył impulsy z suwmiarki w przerwaniu int0 i wychodziło mi 125 Hz, więc chciałem sprawdzić, czy dobrze napisałem program i tak się kółko zamknęło.