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

[C][mega32] Licznik 16bit tryb CTC

xamrex 11 Wrz 2011 14:20 2330 5
REKLAMA
  • #1 9916247
    xamrex
    Poziom 28  
    Witam,
    Chcę przy moim kwarcu 11,0592 uzyskać przerwanie co 1 sek na timerze 16 bit.
    Jest taka tabelka:
    [C][mega32] Licznik 16bit tryb CTC

    I teraz jest 2 razy napisany tryb CTC, (tryb 4 i tryb 12)
    Jaka jest różnica pomiędzy tymi trybami?

    Jeśli napisze cos takiego:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    To działa,
    ale już takie coś:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Nie działa
    Jaka jest różnica między trybem CTC 4 a trybem CTC 12?
  • REKLAMA
  • Pomocny post
    #2 9916369
    tmf
    VIP Zasłużony dla elektroda
    Różnica polega na tym co określa wartość maksymalną tego licznika - raz jest to OCRA, w trybie 12 - ICR1.
  • REKLAMA
  • #3 9916405
    xamrex
    Poziom 28  
    Ok, dzięki za wyjaśnienie.
    Czyli:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Niczym się nie różni od tego:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #4 9918420
    jarekz_2
    Poziom 16  
    xamrex napisał:
    (...)Chcę przy moim kwarcu 11,0592 uzyskać przerwanie co 1 sek(...)

    Zwracam tylko uwagę na fakt, że Timer zlicza w dół od wartości ICR1 do zera włącznie (po czym znów od ICR1). Częstotliwość na jego wyjściu wynosi więc 11,0592MHz/256/(ICR1+1). A zatem wartość wpisywana do rejestru ICR1 powinna być o jeden mniejsza, czyli wynosić 43199.
    Oczywiście błąd wynikający z użycia wartości 43200 jest tu minimalny (23ppm), ale warto z myślą o przyszłych projektach utrwalać dobre nawyki.
  • REKLAMA
  • #5 9919602
    Konto nie istnieje
    Poziom 1  
  • #6 9921419
    jarekz_2
    Poziom 16  
    emarcus napisał:
    Akurat fakt jest troche inny. Wszystkie timery w AVR jako podstawowy process liczenia jest liczenie (od zera lub wpisanej wartości do timera - tryb Normal) w grórę do przepełnienia timera(...)

    Słusznie.
    Warto zauważyć (i zapamiętać), że chyba w większości rodzin mikrokontrolerowych obowiązuje reguła iż do odpowiedniego rejestru timera wpisujemy wartości o jeden mniejsze od pożądanego okresu zliczania. Dzięki temu np. z licznika 16-bitowego daje się uzyskać okres dokładnie równy 2^16.
REKLAMA