Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

furcik2013 08 Paź 2014 12:11 1110 4
  • #1 08 Paź 2014 12:11
    furcik2013
    Poziom 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.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    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.

    0 4
  • #3 08 Paź 2014 16:04
    furcik2013
    Poziom 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ź.

    0
  • #4 08 Paź 2014 17:02
    Fredy
    Poziom 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?

    0
  • #5 08 Paź 2014 17:28
    furcik2013
    Poziom 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/viewtopic.php?t=697202&highlight=miernik
    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/viewtopic.php?t=2905768&highlight=
    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.

    0