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

AVR kalibracja procedur opóżniających

11 Wrz 2009 09:00 1832 14
  • Poziom 12  
    Witam,
    jestem zupełnie początkujący, mam za sobą pierwszy układ i program zrobiony samodzielnie (nie kopiowany) , pisany w asemblerze. (zegarek binarny)

    Czy jest możliwość zmierzenia lub pobrania w prosty sposób długości cyklu zegara w trakcie pracy układu żeby skalibrować procedury opóźniające?

    Chodzi o to, żeby np. po zmianie kwarcu nie trzeba było kompilować projektu, a procedury opóźnień czasowych były poprawne.

    Nie korzystam z żadnych bibliotek, na razie piszę od zera sam.

    Dzięki za ewentualne podpowiedzi

    Marek
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Poziom 33  
    Jeden cykl zegara trwa dokladnie jeden cykl zegara ;) Zmierzyc mozesz urzadzeniem zewnetrznym, ktore musi byc oczywiscie skalibrowane. Samym procesorem nie zmierzysz ile trwa jeden cykl, nie ma takiej mozliwosci. Mozesz dac drugi uklad ktory by mierzyl pierwszy, ale to jak mierzenie linijki linijka ;)
  • Poziom 12  
    _Robak_ napisał:
    Jeden cykl zegara trwa dokladnie jeden cykl zegara ;)


    Myślałem o czasie trwania jednego cyklu zegara, a napisałem jak napisałem ...

    Czyli jedyna metoda to jakiś układ czasu rzeczywistego na płytce i wykorzystanie jego jako układu odniesienia do pomiaru szybkości avr-ka?
  • Poziom 33  
    No tak, ale skad bedziesz wiedzial ze akurat on dziala idealnie ? Chyba ze wezmiesz jakiegos scalaka ktory jest super dokladny i stosuje sie do takich celow, ale czy jest takie cos to inech sie ktos inny wypowie :) Uklad RTC bedzie mial taka dokladnosc jak i kwarc, a kwarc o takiej samej dokladnosci mozesz przeciez dac do atmegi. Tak jak mowie, dla mnie jest to mierzenie linijki linijka ;)
  • Poziom 33  
    Dobre, ale czy bedzie dzialac w pomieszczeniu ?
  • Poziom 38  
    Nie wiem, nie sprawdzałem.
    W tym artykule z EdW piszą coś o antenie aktywnej za 30zł.
    Może da się ją wystawić za okno.
    Drugi sposób to sygnał wzorcowy radia PR1 ma falach długich 225kHz.
    Prosty odbiornik wzmacniacz i dzielnik częstotliwości.
    Kiedyś na TTL, teraz to chyba CPLD byłby tańszy.
    Ma to też wady- mała odporność na zakłócenia.
    Trzeci sposób- odbiornik DCF.
    Do każdego z tych "sposobów" można dorobić układ z pętlą fazową aby uzyskać np. 1, 2 czy ileś MHz i podać to na procesor jako zewnętrzny zegar a nie kwarc i sterować mikroprocesor.
    Wtedy zamiast kwarcu dodatkowa płytka.
    Tak że można i nie będzie to "mierzenie linijki linijką".
    Ale trochę czasu znalezienie tego i zlutowanie to by zajęło.
    Jest jeszcze czwarty sposób- zakup generatora wzorcowego.
    Ale to zupełnie inna kategoria cenowa.
  • Poziom 12  
    No to wygląda na że wymyśliłem sobie...

    Szkoda, bo może wystarczyłoby jakieś wewnętrzne źródło odniesienia, żeby chociaż z grubsza oszacować częstotliwość zegara. Taka funkcja byłaby całkiem pożyteczna :)

    Ale to takie dywagacje całkiem początkującego jeśli chodzi o mikrokontrolery.

    Dziękuję wszystkim którzy pomogli.

    Marek
  • Poziom 38  
    "z grubsza oszacować częstotliwość zegara"
    No ale "z grubsza" to przecież masz.
    Dajesz jakiś kwarc i zwykle działa z dokładnością do-6.
    A każda instrukcja w AVR działa tak samo szybko lub wielokrotność- niektóre zabierają 2 lub ileś taktów zegara.
    Można to odczytać w datasheet.
  • Poziom 12  
    janbernat napisał:
    "z grubsza oszacować częstotliwość zegara"
    No ale "z grubsza" to przecież masz.
    Dajesz jakiś kwarc i zwykle działa z dokładnością do-6.
    A każda instrukcja w AVR działa tak samo szybko lub wielokrotność- niektóre zabierają 2 lub ileś taktów zegara.
    Można to odczytać w datasheet.


    Ja mam, ale chodziło o stwierdzenie tego faktu z poziomu oprogramowania a nie projektanta czy programisty systemu. Wydobycie częstotliwości oscylatora, obojętnie czy wewnętrznego czy kwarcu albo czasu trwania jednego cyklu zegara.

    I ewentualnie bez pomocy układów zewnętrznych.

    Chociaż być może jest możliwość sprawdzenia fusebitu, czy jest użyty wewnętrzny oscylator. To już byłoby coś. Ale tego jeszcze nie doczytałem.
  • Poziom 38  
    No ale chyba ustawiłeś fusebity?
    Z poziomu programu nie da się ustalić jak fusebity są ustawione.
    Fusebity ustawia się przed napisaniem programu.
    I tak już zostają.
    Dopóki nie przestawisz na inne -ale nie w programie.

    Dodano po 48 [minuty]:

    To jest w zasadzie problem filozoficzny.
    Jedynym pewnym sygnałem jaki odbiera procesor jest sygnał zegara.
    Wszystkie inne sygnały muszą się do niego odnosić.
    Nie ma (w zasadzie) innych punktów odniesienia.
    Tak jak człowiek.
    Odbiera sygnały - i do czegoś się muszą odnosić.
    Do czasu.
    A czy ten czas jest prawdziwy?
    A do czego go odnieść?
  • Poziom 12  
    janbernat napisał:

    To jest w zasadzie problem filozoficzny.
    Jedynym pewnym sygnałem jaki odbiera procesor jest sygnał zegara.
    Wszystkie inne sygnały muszą się do niego odnosić....


    W dokumentacji Atmegi8 wynalazłem, że watchdog ma własny timer 1MHz niezależny od zegara systemowego. Tylko że chyba nie ma się jak do niego dobrać. Wtedy już wszystko byłoby proste.

    Ale masz rację, dyskusja robi się filozoficzna. Chyba za dużo chciałem. Chociaż lubię rozwiązywać takie problemy, tyle że tutaj mi wiedzy brak.
  • Specjalista - Mikrokontrolery
    Problem jest czysto teoretyczny. Nie ma potrzeby, aby oprogramowanie tak prostego mikrokontrolera dowiadywało się, jaki ma zegar, bo i po co? Budując urządzenie wyposażasz go w źródło zegara i ono jest niezmienne. Tak samo nie ma potrzeby aby oprogramowanie dowiadywało się, jaki to dokładnie układ (atmega8 czy 16? wersja zwykła, -L czy może -V?), ile ma pamięci i co jest źródłem zasilania.

    To nie ta klasa układów, że można włożyć inny kwarc i wszystko się automatycznie przestawi. Jakie to miałoby zastosowanie?

    A tak naprawdę, to wystarczyłby zewnętrzny kwarc 32kHz dołączony do timera asynchronicznego - przy jego pomocy można stwierdzić jaki jest zegar całego układu - całkiem dokładnie. Wystarczą dwa timery.

    4\/3!!
  • Poziom 38  
    Pod warunkiem że procesor ma TIMER2 asynchroniczny- nie wszystkie mają.
    Pod warunkiem że kwarc 32kHz jest dokładniejszy niż kwarc sterujący.
    Jest to mierzenie linijki linijką z lepszej firmy.
    Ale przy pomiarach czasu zawsze tak jest.
    Linijka NASA z satelity na GPS ma zegarek z wzorcem cezowym.
    Jest on o kilka rzędów wielkości dokładniejszy niż kwarc zegarkowy 20ppm.
  • Poziom 32  
    nie ma duzego znaczenia dokladnosc kwarcu 32khz poniewaz my tylko szacujemy czestotliwosc zegara w przypadku ukladow o dwoch "wejsiach kwarcowych" musimy wykryc czy jest aktualnie 1 MHZ czy 16MHz a nie zmierzyc dokladnie ile jest faktycznie
    Tak jak ktos zauwazyl watchdog ma wlasny generator i za jego pomoca da sie oszacowac zegar oczywiscie z grubsza.