Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[AVR] Rezonator kwarcowy 16MHz

stachu_15 06 Cze 2012 19:23 1880 7
  • #1 06 Cze 2012 19:23
    stachu_15
    Poziom 11  

    Witam wszystkich, próbowałem znaleźć odpowiedź na mój problem, lecz na nic konkretnego nie natrafiłem. Moje pytanie brzmi: czy kwarc 16MHz to dokładnie 16.000.000 Hz? Chodzi mi o sposoby liczenia parametrów dla Timerów w AVRach. Czy podczas obliczeń za wartość F_clk powinienem brać właśnie 16000000 czy może 16777216? Czy definiując podczas programowania wartość F_CPU powinienem używać wielkości 16000000UL czy może właśnie 16777216UL ? Proszę o odpowiedź na moje banalne pytanie. Pozdrawiam!

  • #2 06 Cze 2012 19:51
    sweter_007
    Poziom 13  

    16.000.000 Hz / 16000000UL

  • #3 06 Cze 2012 20:37
    mirekk36
    Poziom 42  

    16MHz to przecież 16 mln Hz .... przecież to tylko najzwyklejsza zamiana jednostek.

    Jak może być 16MHz = 16777216? skąd ci to przyszło do głowy ?

    16777216Hz = 16,777216MHz

    A parametru F_CPU nigdy nie definiuj w kodzie. To robi się w makefile albo najczęściej w ustawieniach projektu jeśli posługujesz się jakimś normalnym środowiskiem a mam tu na myśli: Eclipse, stare AVR Studio 4.xx czy CodeBlocks a nie kocie AVR Studio 5/6. Przez to definiowanie w kodzie będziesz miał za chwilę sporo innych problemów o które będziesz pytał na forum. Zresztą sam zobacz:

    http://mirekk36.blogspot.com/2011/11/dlaczego-eclipse-zamiast-avr-studio.html

  • Pomocny post
    #4 06 Cze 2012 22:23
    dondu
    Moderator Mikrokontrolery Projektowanie

    Jeżeli używasz oryginalnych środowisk programistycznych Atmela, to definiuj zegar zawsze w opcjach (właściwościach): F_CPU – gdzie definiować?

    A w kodzie zawsze zostawiaj tylko na wszelki wypadek info o zegarze, byś wiedział dla jakiego zegara program był przygotowany.

    BTW: UL oznacza Unsigned Long i tak powinieneś oznaczyć gdybyś się uparł definiować F_CPU w kodzie.

  • #5 06 Cze 2012 22:34
    marcin1990
    Poziom 14  

    Kwarc 16MHz to oczywiście nie dokładnie 16000000 Hz, z racji tego, że standardowo dokładność kwarców jest na poziomie 50ppm będzie to 16000000 +/- 50Hz .W najgorszym wypadku przyjmuje +- 100ppm. Do obliczeń timerów przyjmujemy oczywiście 16 MHZ

  • #6 06 Cze 2012 22:37
    stachu_15
    Poziom 11  

    Oki dzięki wszystkim za odpowiedzi. Najbardziej pomógł mi dondu :) owa dziwna wartość 16M wzięła mi się stąd: 16*1024*1024 :) przy obliczeniach timerów wychodziły jakieś sensowniejsze liczby dla tej wartości. Ale ok już wszystko rozumiem i poradziłem sobie z moim kodem :) dzięki jeszcze raz!

  • #7 07 Cze 2012 18:27
    excray
    Poziom 38  

    marcin1990 napisał:
    Kwarc 16MHz to oczywiście nie dokładnie 16000000 Hz, z racji tego, że standardowo dokładność kwarców jest na poziomie 50ppm będzie to 16000000 +/- 50Hz

    Chyba raczej 16MHZ+/- 800Hz. Kolega chyba nie zrozumiał co oznacza skrót ppm. W przypadku oscylatora 16MHz 50ppm to właśnie +/- 800Hz. Poza tym zwykłe kwarce mają błąd na poziomie zazwyczaj 10ppm czyli tutaj +/- 160Hz

  • #8 21 Sie 2012 08:03
    stachu_15
    Poziom 11  

    Problem rozwiązany :)

 
Black Friday do -15%
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
Ferguson