logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega644PA - Timer1 16-bit CTC, preskaler 1024, odliczanie do 1800, 1Hz błędne

mateuszrjzr 22 Cze 2013 10:42 2091 15
REKLAMA
  • #1 12443701
    mateuszrjzr
    Poziom 17  
    Witam
    mam problem z ustawieniem timera w mojej atmedze. Oto kod:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Założenia:
    -Tryb CTC
    -Preskaler 1024
    -odliczanie do 1800
    -uzyskanie 1Hz

    Program działa po części. Operacja a++ wykonuje się co ok. 8s, nie wiem dlaczego.
    Mam jeszcze jedno pytanie. Dlaczego w tym trybie mamy "OCR1AH" i "OCR1AL" jeśli tutaj odliczamy od zera do top albo max.
  • REKLAMA
  • #3 12443778
    mateuszrjzr
    Poziom 17  
    Fakt zapomniałem. Wewnętrzny zegar- 1843200Hz. Mam nadzieję że dobrze to ustawiłem ale jak przy kompilacji dostaje komunikat "-DF_CPU=1843200UL" to chyba dobrze.
  • REKLAMA
  • #4 12443817
    Steryd3
    Poziom 33  
    Z tego co pamiętam to nominalnie takiej wartości nie da się ustawić na wewnętrznym RC. W czym piszesz-jakiego środowiska używasz? Wiem, że w AVR Studio ( obecnie Atmel Studio) dało się zadeklarować częstotliwość ale ona służyła raczej do ustawień symulatora a nie częstotliwość sygnału taktującego. Źródło oraz częstotliwość sygnału zegarowego ustawia się w tzw. Fuse bitach -tj. bitach konfiguracyjnych. Te bity nie są zmieniane nawet po zaprogramowaniu nowym plikiem wsadowym. Podglądnij je i sprawdź z notą katalogową jaki rzeczywiście zegar masz wybrany.
  • #5 12443868
    mateuszrjzr
    Poziom 17  
    Faktycznie. Późno było a ja głupi zaznaczyłem co mi ECLIPSE w liście dało. Czy mogę zastosować kwarc 9,216MHz? Muszę znać szybko odp bo mi zamykają sklep, a ja z datasheetami nie jestem na ty...
  • REKLAMA
  • REKLAMA
  • #7 12443929
    mateuszrjzr
    Poziom 17  
    9216000/1024=9000. Zamierzam uzyskać 1Hz. Nie wiem, czy 9,216MHz to nie dużo dla atmegi?
  • #8 12443930
    Steryd3
    Poziom 33  
    Możesz zastosować-oczywiście. ATmega644 dopuszcza rezonatory do 20MHz. Niemniej jednak zastosowany kwarc musisz później uwzględnić przy późniejszych obliczeniach by uzyskać żądane interwały czasowe. Tak na marginesie-nie wiem do czego potrzebujesz tego sygnału 1Hz ale jeżeli z tego tupu zabiegów chcesz uzyskać zegar to nie jest to najlepszy pomysł. Lepiej zastosuj dodatkowy kwarc zegarkowy 32768Hz i podepnij go do Timera2 (chyba drugiego). ATmegi mają taką możliwość by zbudować zegar RTC. Jeżeli nawet wzorzec czasu 1Hz jest Ci potrzebny z innych względów ten sposób też jest lepszy pod względem stabilności długookresowej.
  • #9 12443963
    mateuszrjzr
    Poziom 17  
    To ten kwarc, co jest we wszystkich chińskich zegarkach, czy to różnie bywa? Rozumiem, że jeśli go zastosuję, to mogę go użyć jako I/O Clock, a CPU może być taktowane z wewnętrznego rezonatora? Tak, to ma być zegarek, ale do ćwiczeń, więc takiej mega dokładności nie poterzebuję
  • #10 12444055
    Brutus_gsm
    Poziom 25  
    Ja zwrócę jeszcze uwagę na ten fakt:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wpisujesz w tym momencie do rejestru 8-bitowego wartość 1800, rzutowaną na unsigned char, który może przyjmować wartości 0-255. Chyba nie o to ci chodziło. Można bezpośrednio korzystać z rejestrów 16-bitowych:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #12 12444209
    mateuszrjzr
    Poziom 17  
    to jest timer 16 bitowy.
  • #13 12444215
    Brutus_gsm
    Poziom 25  
    No i co z tego wynika? Bo nie wiadomo do czego się odnosisz.
  • #14 12444574
    mateuszrjzr
    Poziom 17  
    Ehhh. Zablokowałem sobie megę. Teraz to nic nie zdziałam do poniedziałku. Próbowałem ją naprawić fusebit doctorem i nic. Co ciekawe jak odczytuje fusebity to zgadzają się z fabrycznymi a program nadal nie chodzi. Chyba poczytam o tym na elektrodzie.
  • #15 12444576
    Brutus_gsm
    Poziom 25  
    Zamontowałeś kwarc zewnętrzny? Jakbyś zablokował Atmegę, to nie mógłbyś odczytać fusebitów, bo nie odpowiadałaby programatorowi. Przydatnym programem będzie tu mkAVRCalculator.
  • #16 12444617
    mateuszrjzr
    Poziom 17  
    Kożystam z mkAVRCalculator. Jednak nie mam komunikacji z atmegą, bo jak ustawię np. CKOUT na stan wysoki to po odczytaniu nadal taki zostaje. Pewnie ustawiłem jakieś dziwne taktowanie zew. i teraz się z nim nie da porozumieć. Szkoda, że fusebit doctor tego nie naprawia.
REKLAMA