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.

Dokładność kwarcu

lbugiera 10 Kwi 2005 20:04 4830 17
  • #1 10 Kwi 2005 20:04
    lbugiera
    Poziom 21  

    Witam.

    To mój pierwszy post, więc na początek WITAM WSZYSTKICH :)
    Mam pytanie odnośnie kwarców : jaka jest ich standardowa dokładność ??
    tzn jeśli kupiłem kwarc 12 Mhz to to jest 12 Mhz plus/minus ile ??

    0 17
  • #3 10 Kwi 2005 20:27
    lbugiera
    Poziom 21  

    avatar napisał:
    zalezy od jakosci kwarcu i od warunkow w ktorych bedzie pracowal ... napisz moze dokladnie oznaczenia i gdzie ma rpacowac ten kwarc


    Kwarc ma pracować z ATmega8. To jest zwykły niski kwarc w metalowej obudowie za pare groszy. Jedyne oznaczenie jakie na nim jest to 12.000

    Pytam bo zrobiłem prosty programik co sekunde zapalający i gaszący diode
    i w prównaniu z zegarkiem po około minucie się "rozjeżdżają". Nie sądze abym w programie zrobił jakis błąd. Użyłem w tym celu timera 16 bit i funkcji
    Clear on Compare z wartością w OCR1A. Prescaler ustawiony na 256,
    a wartośc to 12,000,000 / 256 = 46875 I jeszcze od tego odjąłem 1. W wygenerowanym przerwaniu zmieniany jest stan odpowiedniego pinu. (nie jest to OC1A).

    I stąd pytanie jaka jest dokładność częstotliwości "standardowego" kwarcu. Wiem, że zależy to też od temperatury (ile ??)

    Będe chciał zrobić dalmierz ultradźwiękowy i generować 40 khz dla nadajnika na uC, więc troche się zmartwiłem, że to się tak rozjeźdźa.

    0
  • Pomocny post
    #4 10 Kwi 2005 20:44
    olekewaagata
    Poziom 25  

    Nawet przy najbardziej tanim (ale sprawnym) kwarcu róznicę powinieneś zauważyć dopiero po jakimś dniu, a może i dłużej. Ja z kwarcu takiego przeciętnego mam odchyłke 2 min na miesiąc.
    Dlatego sugeruję żebyś szukał błędu w programie.

    0
  • Pomocny post
    #5 10 Kwi 2005 21:29
    felixgotom
    Poziom 12  

    Witam.

    "Standardowe" kwarce mają +/-50 ppm (pulse per million) czyli na 1M impulsów (czy cykli jak wolisz) przypada +/-50. Analizując dalej na 12M przypada +/-12*50=+/-600.
    Jeśli kwarc ma 12MHz to w ciągu sekundy może się "pomylić" o 600 impulsów. Jeśli podzielisz 12M/600=20000=20k to otrzymasz ilość sekund potrzebną żeby kwarc pomylił sie o sekundę (w najgorszym przypadku - liczymy tutaj błąd graniczny).
    Dzieląc 20k przez liczbę sekund w godzinie
    20000/60=333,(3)=333
    a następnie przez liczbę godzin w dniu:
    333/24=13,...
    Otrzymasz liczbę dni potrzebnych do pomyłki o 1 sekundę, czyli jakieś 2-3 sekundy na miesiąc.
    Oczywiście kwarc, który spadł kilka razy z np. stołu może mieć parametry troche gorsze (nigdy nie wiesz co Ci sprzedadzą).

    Tak to wygląda teoretycznie. Istnieje możliwość, że masz kwarc 100ppm lub jakiś uszkodzony, ale chyba nie aż do takiego stopnia jak opisujesz. Sugeruję sprawdzić czy nie zerujesz rejestrów licznikowych w procedurze obsługi przerwania.

    Pozdrawiam,
    Tomek

    0
  • Pomocny post
    #6 10 Kwi 2005 21:39
    olekewaagata
    Poziom 25  

    Ha, ah, ah, to tak na wesoło:
    --------------------------------
    Dzieląc 20k przez liczbę sekund w godzinie
    20000/60=333,(3)=333
    ;------------------------------
    godzina ma 3600 sek chyba że sie coś ostatnio zmieniło.
    Resztę obliczen też trzeba skorygować, ale sam post bardzo dobrze tłumaczy zjawisko, gratulacje.

    0
  • Pomocny post
    #7 10 Kwi 2005 21:45
    Dexter77
    Poziom 28  

    ppm znaczy "parts per milion" (czesci na milion) i jest to czesto stosowana jednostka.
    Pozdro
    Dexter

    0
  • #8 10 Kwi 2005 22:06
    lbugiera
    Poziom 21  

    felixgotom napisał:

    Sugeruję sprawdzić czy nie zerujesz rejestrów licznikowych w procedurze obsługi przerwania.


    Dzieki za konkretna odpowiedź.
    A wiecie może jeszcze jaki jest współczynnik temperaturowy standardowego kwarcu ??
    Co do programu to :

    .nolist
    .include "m8def.inc"
    .list
    .listmac

    .def acc = r17

    .cseg

    rjmp ResetProcesor

    ; *** tutaj zainicjowanie reszty wektorów przerwań

    .equ Port = PORTD ;pin pod którym jest dioda
    .equ Pin = 5

    I_OC1ACompare: ; procedura obslugi przerwania
    sbic Port,Pin ; przeskocz nastepna instrukcje jesli bit=0
    rjmp ustawiony
    sbi Port,Pin ; ustaw bit
    rjmp koniec
    ustawiony:
    cbi Port,Pin ; wyzeruj bit
    koniec:
    reti

    ResetProcessor : ;
    sei ;wlaczenie przerwania
    ldi acc,LOW(RAMEND) ;zainicjowanie stosu
    out SPL,acc
    ldi acc,HIGH(RAMEND)
    out SPH,acc
    sbi Port-1,Pin ;skonfigurowaniu portu
    clr acc ;skonfigurowanie timera
    out TCCR1A,acc
    ldi acc,0b00001100
    out TCCR1B,acc
    ldi acc,0xb7
    out OCR1AH,acc
    ldi acc,0x1a
    out OCR1AL,acc
    ldi acc,0b00010000
    out TIMSK,acc


    PetlaGlowna: ;czekam na przerwanie
    rjmp PetlaGlowna

    .exit


    Już mi się skończyły pomysły gdzie może być błąd :/

    0
  • Pomocny post
    #9 10 Kwi 2005 22:13
    McRancor
    VIP Zasłużony dla elektroda

    A nie ładujesz do timera wartości przypadkiem tylko raz? powinieneś ładować timer za każdym razem w obsłudze przerwania

    0
  • Pomocny post
    #10 10 Kwi 2005 22:22
    Dexter77
    Poziom 28  

    Jesli jest ustawiony tryb CTC- Clear Timer On Campare to wystarczy do rejestru porownawczego wpisac tylko raz. Gdy licznik osiagnie wartosc rejestru porownawczego, zostaje ustawiana flaga przerwania i licznik jest zerowany. Wszystko odbywa sie automatycznie i uzyskuje sie duza dokladnosc.
    Pozdro
    Dexter

    0
  • #11 10 Kwi 2005 22:24
    lbugiera
    Poziom 21  

    McRancor napisał:
    A nie ładujesz do timera wartości przypadkiem tylko raz? powinieneś ładować timer za każdym razem w obsłudze przerwania


    Dlaczego powinienem za każdym razem ?? Timer pracuje nie w trybie normalnym z przepełnieniem, ale w Clear on Compare, czyli zlicza w góre
    do wartości w rejestrze OCR1A, generuje przerwanie i odrazu sam się zeruje i zlicza od nowa. Coś źle wykombinowałem ??

    0
  • Pomocny post
    #12 10 Kwi 2005 22:26
    felixgotom
    Poziom 12  

    Hehe...
    Aż mi wstyd... :oops:

    Rzeczywiście troche mi sie pomieszało - może powinenem się wyspać.

    Dzięki za korektę i przepraszam wszystkich, których wprowadziłem w błąd. Mam nadzieję, że zostanie mi on wspaniałomyślnie wybaczony :roll:!!!

    Pozdrawiam,
    Tomek

    0
  • Pomocny post
    #13 10 Kwi 2005 22:38
    McRancor
    VIP Zasłużony dla elektroda

    Faktycznie, pomyliłem tryby, wrzuć program, na symulacje w AVR studio i sprawdź jak tam wygląda sytuacja z czasem. Może wpisujesz złe wartości do OCR1A?

    0
  • #14 10 Kwi 2005 23:39
    lbugiera
    Poziom 21  

    A kwarce są mocno wrażliwe na wstrząsy, upadki, ew. przygrzania podczas lutowania ?? Bo musze przyznać, że o tym nie wiedziałem :) I może ten mój bardzo źle traktowałem, więc się na mnie obraził ... Bo jak są bardzo wrażliwe to byc może tu jest błąd.

    Dodano po 44 [minuty]:

    McRancor napisał:
    Faktycznie, pomyliłem tryby, wrzuć program, na symulacje w AVR studio i sprawdź jak tam wygląda sytuacja z czasem. Może wpisujesz złe wartości do OCR1A?


    Wrzuciłem na AVRstudio. Ustawiłem kwarc 4mhz. Wartość wpisana do OC1A to 4,000,000 / 64 = 62500 - 1 = 62499 = 0xf423. Czyli OC1AH = 0xf4 i OC1AL = 0x23. I AVR studio za każdym wejściem do procedury obsługi przerwania zwiększa stop watch 1,000,000 us, ale ... czasami to jest 1,000,000.0 us czasami 1,000,000.25 us, a czasami 999,999.75 us i tu już zgłupiałem skąd sie bierze ten jeden cykl w tą lub tą !!! ... Procedura obsługi przerwania ma róźną długość (ilość cykli) w zalezności od tego czy dioda jest zapalana czy gaszona, ale to przecierz nie ma znaczenia, bo timer zlicza niezaleznie od tego co jest w procedurze.
    Mam taki kwarc 4 mhz, zainstalowałem i lepiej. Po około 3 minutach zauważyłem pewna różnice, ale jest taka mała, że może być że mi się zdaje :).
    Więc ten 12 mhz chyba za mocno przykatowałem (bo wartość tak samo wyliczyłem dla 12 mhz jak dla 4 mhz). Ten 4 mhz tuż przed montażem mi upadł :) no ale tą 12 mhz byc może za bardzo przygrzałem :).

    A jak wyjaśnić te różnice w avr studio ??

    0
  • Pomocny post
    #15 11 Kwi 2005 02:12
    McRancor
    VIP Zasłużony dla elektroda

    dodaj więcej "nop"ów w pętli głównej, może wtedy zmniejszy się ilość błędnych cykli. Może jest to związane z tym że instrukcja rjmp wymaga 2 taktów i jeśli przerwanie nastąpi w trakcie wykonywania tej instrukcji, to będzie musiało poczekać jeden takt, a następny jeśli będzie trwał prawidłowo, to będzie krótszy. Tak mi się przynajmniej wydaje, ale najważniejsze, że nie powinno to mieć wpływu na dokładność, bo liczba cykli się powinna zgadzać.

    Co do "upadłych" kwarców, to nie sądze żeby upadki aż tak je niszczyły, zwłaszcza że z regóły upadają na dywan. Prędzej winowajcy szukałbym w kondensatorach przy kwarcu... Jakie zastosowałeś? Bo jeśli jeden różni się od drugiego, to może to powodować destabilizacje sygnału. Nie zwalał bym winy na ziemię :)

    0
  • #16 11 Kwi 2005 07:55
    lbugiera
    Poziom 21  

    McRancor napisał:
    dodaj więcej "nop"ów w pętli głównej, może wtedy zmniejszy się ilość błędnych cykli. Może jest to związane z tym że instrukcja rjmp wymaga 2 taktów i jeśli przerwanie nastąpi w trakcie wykonywania tej instrukcji, to będzie musiało poczekać jeden takt, a następny jeśli będzie trwał prawidłowo, to będzie krótszy. Tak mi się przynajmniej wydaje, ale najważniejsze, że nie powinno to mieć wpływu na dokładność, bo liczba cykli się powinna zgadzać.
    ... Prędzej winowajcy szukałbym w kondensatorach przy kwarcu... Jakie zastosowałeś?


    Rzeczywiście pare nopów poprawia sytuacje i w sumie średnia ilość cykli (także bez nopów) jest dobra... dzięki :).

    Co do kondensatorów , to obydwa są takie same : 15 piko... tyle że jeden ma dłuższą scieżke do uC: dokładnie jeden ma 100 milsów(xtal1), a drugi 500(xtal2) do procka. Ścieżki są szerokości 1mm, zrobione mazakiem :)
    A może to sprzężenie pojemnościowe z GND ?? Bo w sasiedztwie tej dłuższej ścieżki jest linia GND , ale też w odległości około 1mm.
    Bity konfiguracyjne w ATmega8 ustawiłem na kwarc do 16 mhz.

    No i przypominam :), że po zmianie kwarcu na 4 mhz sytuacja mocno się poprawiła. Teraz różnice widze po około 30 minutach.

    0
  • #17 11 Kwi 2005 11:22
    GienekS
    Poziom 32  

    Ja w moim zegarze, ale jeszcze na '51, do kwarcu 12MHz dołożyłem indukcyjność (szeregowo, 7x7 filtr radiowy typ 415) dzięki temu mogłem dokładnie skalibrować ten kwarc do 12,00000MHz mierząc sygnał ALE. Przypuszczam, że w AVR-ach będzie podobnie trzeba kalibrować kwarc. Gorzej będzie z pomiarem, bo przerwania nie dadzą takiego sygnału jak sprzętowy ALE w '51.

    0
  • Pomocny post
    #18 11 Kwi 2005 17:17
    McRancor
    VIP Zasłużony dla elektroda

    Wydaje mi się że użyte kondziory mogą być trochę za małe, dobrą metodą jest użycie trymera zamiast jednego z kondensatorków, albo równolegle z innym, co do ALE, zawsze można wgrać program który nie robi nic tylko przełącza jeden port, albo pin, i zmierzyć częstotliwość, dorególować trymerkiem ijusz.

    0
  Szukaj w 5mln produktów