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.

ATmega88 - timer-tryb CTC, błąd w zrozumieniu

zbynio_k 31 Sie 2015 19:02 462 2
  • #1 31 Sie 2015 19:02
    zbynio_k
    Poziom 10  

    witam,
    trywialny przykład z 'biblii' T. Francuza
    ATmega88, timer - tryb CT

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    a jednak sprawia mi kłopoty w zrozumieniu
    proszę poprawić mój tok rozumowania

    1. diody na pinach PB1 i PB2 migają naprzemiennie a moim zdaniem powinny
    migać razem, ponieważ 'gaszę' OBA LED'y

    2. według w/w publikacji, przerwanie obsługujące TU: piny COM1x0, czyli PB1 i PB2
    powinno występować co 0,5 Hz (2 x 0,5 = 1) - OCR1A=F_CPU/1024/1, pomijam 1 takt
    "W trybie prostym częstotliwość występujących przerwań wynosi F_CPU/(2·N·(1+
    OCRnA), gdzie N to wartość preskalera"

    albo zaćmiło mnie przy przekształcaniu wzoru albo błędnie myślę, ponieważ diody migają
    z częstotliwością 1Hz, czyli 1s zaświecone, 1s zgaszone

    pozdrawiam

    0 2
  • Pomocny post
    #2 31 Sie 2015 19:17
    tmf
    Moderator Mikrokontrolery Projektowanie

    ad 1. Odpowiedzią jest bit FOC1A, którego ustawienie wymusza zajście zdarzenia compare, a więc jedna dioda jest o jedno zdarzenie do przodu.
    ad 2. Jeśli dioda przez 1s jest włączona, a przez 1 s wyłączona, to okres wynosi 2s, a więc częstotliwość jest równa 0,5 Hz.

    1
  • #3 31 Sie 2015 19:26
    zbynio_k
    Poziom 10  

    ad. 1 przeanalizuję FOC1A, bo masz rację, hahaha w końcu autor
    ad.2 tak, okres jest 0,5 Hz ale wedle wzoru zrozumiałem, że zdarzenie
    Toggle OC1A/OC1B on compare match
    winno wystąpić zgodnie ze wzorem określającym częstotliwość zdarzenia
    jak tłumaczysz - ta 'dwójka' właśnie 'robi' 0,5 HZ

    dzięki, jarzę

    0