Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATmega128

16-bitowe timery/liczniki 1 i 3

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Własności

16-bitowe moduły timerów/liczników 1 i 3 pozwalają na dokładne odmierzanie czasu wykonywania programu (zarządzanie zdarzeniami), generację przebiegów oraz pomiary czasu trwania sygnałów. Główne cechy są następujące:

Ograniczenia w trybie kompatybilności z ATmega103

Zwróć uwagę, iż w trybie kompatybilności z ATmega103 dostępny jest tylko jeden 16-bitowy timer/licznik nr 1, który w tym trybie posiada tylko dwa rejestry porównawcze (Compare A i Compare B).

W rozdziale pojawiają się terminy angielskie Input Capture oraz Output Compare. Nie tłumaczyłem ich, ponieważ w języku polskim brak dobrych odpowiedników.

Termin Input Capture oznacza reakcję na zdarzenia, które mogą się pojawić w trakcie pracy mikrokontrolera. Reakcja ta polega na zapisaniu czasu wystąpienia tego zdarzenia, czyli na Rejestracji Czasu Zdarzenia Wejściowego. Odbywa się to w ten sposób, iż w momencie wykrycia zdarzenia (np. zmiany poziomu sygnału na określonej końcówce mikrokontrolera) następuje zapamiętanie w osobnym rejestrze stanu timera/licznika (stąd słowo Capture, które po angielsku oznacza "przechwycenie" lub "zarejestrowanie"). Stan ten jest znacznikiem czasu (ang. time-stamp), w którym wystąpiło zdarzenie i może być w różny sposób wykorzystywany w aplikacji.

Termin Output Compare odnosi się do zmiany stanu wybranej końcówki, jeśli wewnętrzny licznik odmierzy odpowiedni czas. Odbywa się to w ten sposób, iż stan licznika jest porównywany z rejestrem przechowującym znacznik czasu. Gdy licznik osiągnie wartość znacznika czasu, występuje zgodność porównania (ang. Compare Match) i w tym momencie mikrokontroler może wykonać różne operacje, np. zmienić stan logiczny określonej końcówki. Pozwala to generować różne przebiegi czasowe.

Na początek:  podrozdziału   strony 

Przegląd

Moduł 16-bitowego timera/licznika pozwala na dokładne odmierzanie czasu wykonania programu (ang. event management – zarządzanie zdarzeniami), generację przebiegów oraz pomiary czasów trwania sygnałów. Większość odwołań do rejestrów i bitów jest zapisana w tym rozdziale w sposób ogólny. Mała litera "n" zastępuje numer timera/licznika, a mała litera "x" zastępuje kanał modułu Output Compare. Jednakże podczas pisania programu odwołania te należy sprecyzować, np. TCNT1 odnosi się do zawartości timera/licznika 1 itd.

Uproszczony schemat blokowy 16-bitowego timera/licznika

Końcówki portów współpracujące z timerami/licznikami 1 i 3 w mikrokontrolerze ATmega128 są następujące:

Rejestry

Rejestr timera/licznika (TCNTn), rejestry Output Compare (OCRnA/B/C) i rejestr Input Capture (ICRn) są wszystkie rejestrami 16-bitowymi. Przy dostępie do rejestrów 16-bitowych należy postępować wg specjalnych procedur, które opisane są dalej w tym rozdziale. Rejestry sterujące timera/licznika (ang. Timer/Counter Control Registers, TCCRnA/B/C) są 8-bitowe i nie posiadają ograniczeń przy dostępie przez mikroprocesor. Wszystkie sygnały żądań przerwań są widoczne w rejestrze znaczników przerwań od timerów (ang. Timer Interrupt Flag Register, TIFR) oraz w dodatkowym rejestrze znaczników przerwań od timerów (ang. Extended Timer Interrupt Flag Register, ETIFR). Wszystkie przerwania są indywidualnie maskowane za pomocą rejestru maski przerwań timerów (ang. Timer Interrupt Mask Register, TIMSK) oraz dodatkowego rejestru maski przerwań timerów (ang. Extended Timer Interrupt Mask Register, ETIMSK).  Na schemacie blokowym nie pokazano rejestrów TIFR, ETIFR i TIMSK, ETIMSK, ponieważ są one współdzielone przez inne moduły timerów/liczników.

Timer/Licznik może być taktowany wewnętrznie, poprzez preskaler lub z zewnętrznego źródła zegara na końcówce Tn. Moduł logiki wyboru zegara steruje wyborem źródła zegarowego oraz zbocza sygnału, które będą używane przez timer/licznik  do zwiększania lub do zmniejszania jego wartości. Timer/licznik jest nieaktywny, jeśli nie wybrano żadnego źródła zegara. Wyjście z modułu logiki wyboru zegara jest opisane jako zegar timera (clkTn).

Podwójnie buforowane rejestry Output Compare (OCRnA/B/C) są porównywane z wartością timera/licznika przez cały czas. Wynik tego porównania może być używany przez generator przebiegu (ang. Waveform Generator) do generacji sygnału PWM lub sygnału o zmiennej częstotliwości na końcówcówkach Output Compare (OC1A/B/C).  Zdarzenie Output Compare ustawi również znacznik Output Compare (OCFnA/B/C),  który może być użyty do generacji żądania przerwania Output Compare (ang. Output Compare interrupt request).

Rejestr Input Capture (ang. Input Capture Register) może zapamiętywać stan timera/licznika przy danym zdarzeniu zewnętrznym (wyzwalanym zboczem) na końcówce Input Capture (ICPn) lub na końcówkach komparatora analogowego (zobacz do rozdziału "Komparator analogowy"). Moduł Input Capture (ang. Input Capture unit) zawiera cyfrowy filtr reduktora szumów (ang. Noise Canceler), który minimalizuje szansę reakcji na szpilki szumu w sygnale wyzwalającym zdarzenie Input Capture.

Wartość TOP lub maksymalna wartość timera/licznika może w niektórych trybach pracy zostać zdefiniowana albo przez rejestr OCRnA, albo przez ICRn, albo przez wartości stałe. Gdy jest używany rejestr OCRnA jako wartość TOP w trybie PWM,  rejestr OCRnA nie może być stosowany do generowania przebiegu wyjściowego PWM. Jednakże wartość TOP będzie w tym przypadku podwójnie buforowana, co pozwoli ją zmieniać w trakcie pracy licznika. Jeśli jest potrzebna stała wartość TOP, to rejestr ICRn może zostać użyty jako alternatywa, co uwolni rejestr OCRnA do użytku przy wyjściu PWM.

Definicje

Poniższe definicje są intensywnie używane w dalszej części tego rozdziału:

Stała Opis
BOTTOM Licznik osiąga BOTTOM, gdy jego wartość staje się równa 0x0000
MAX Licznik osiąga MAX, gdy jego wartość staje się równa 0xFFFF (dziesiętnie 65535).
TOP Licznik osiąga wartość TOP, gdy jego zawartość staje się równa największej wartości w sekwencji zliczania. Wartość TOP może przyjmować jedną z ustalonych wartości: 0x00FF, 0x01FF lub 0x03FF, albo wartości zapisanej w rejestrze OCRnA lub ICRn. Wartość ta zależy od wybranego trybu pracy.

Zgodność

16-bitowy timer/licznik został ulepszony w stosunku do poprzednich wersji 16-bitowego timera/licznika AVR. Licznik ten jest w pełni zgodny z wcześniejszą wersją pod względem:

Następujące bity sterujące zmieniły nazwę, lecz zachowały te same funkcje oraz pozycje w rejestrach:

Dodano następujące rejestry:

Następujące bity zostały dodane do rejestrów sterujących 16-bitowego timera/licznika:

Dodano bity znacznika przerwań i maski dla modułu C Output Compare.

16-bitowy timer/licznik posiada ulepszenia, które wpłyną na kompatybilność w niektórych przypadkach specjalnych.

Na początek:  podrozdziału   strony 

Dostęp do rejestrów 16-bitowych

Rejestry TCNTn, OCRnA/B/C i ICRn są rejestrami 16-bitowymi, do których dostęp w mikrokontrolerach AVR następuje poprzez 8-bitową magistralę danych. Rejestr 16-bitowy wymaga dwóch bajtowych operacji odczytu lub zapisu. Każdy 16-bitowy timer posiada pojedynczy 8-bitowy rejestr na tymczasowe przechowanie górnego bajta przy dostępie 16-bitowym. Ten sam rejestr tymczasowy jest współdzielony pomiędzy wszystkimi 16-bitowymi rejestrami wewnątrz 16-bitowego timera. Dostęp do dolnego bajtu wyzwala 16-bitową operację odczytu lub zapisu. Gdy dolny bajt 16-bitowego rejestru jest zapisywany przez mikroprocesor, górny bajt zapisany w rejestrze tymczasowym oraz zapisywany dolny bajt są razem kopiowane do 16-bitowego rejestru w tym samym cyklu zegarowym. Gdy dolny bajt 16-bitowego rejestru jest odczytywany przez mikroprocesor, to górny bajt 16-bitowego rejestru jest kopiowany do rejestru tymczasowego w tym samym cyklu zegara, co odczyt dolnego bajtu.

Nie każdy dostęp 16-bitowy wykorzystuje rejestr tymczasowy na górny bajt. Odczyt 16-bitowych rejestrów OCRnA/B/C nie korzysta z rejestru tymczasowego.

Aby dokonać 16-bitowego zapisu, górny bajt musi być zapisany przed dolnym bajtem. Przy 16-bitowym odczycie dolny bajt musi zostać odczytany przed górnym bajtem.

Poniższy przykład kodu pokazuje, w jaki sposób uzyskać dostęp do 16-bitowych rejestrów timera przy założeniu, że żadne przerwania nie uaktualniają rejestru tymczasowego. Ta sama zasada może być stosowana przy dostępie do rejestrów OCRnA/B/C i ICRn. Zauważ, iż w języku C kompilator obsługuje dostęp 16-bitowy.

Przykład w asemblerze:
    ...
    ; Ustaw TCNT1 na 0x01FF
    ldi r17,0x01
    ldi r16,0xFF
    out TCNT1H,r17
    out TCNT1L,r16
    ; Odczytaj TCNT1 do r17:r16
    in r16,TCNT1L
    in r17,TCNT1H
    ...

Przykładowy kod zwraca wartość TCNT1 w parze rejestrów r17:r16.

Przykład w języku C:
unsigned int i;
...
/* Ustaw TCNT1 na 0x01FF */
TCNT1 = 0x1FF;
/* Odczytaj TCNT1 do i */
i = TCNT1;
...

Powyższy przykładowy kod zakłada dołączenie do programu odpowiedniego pliku nagłówkowego.

Ważnym jest zauważenie, iż dostęp do rejestrów 16-bitowych jest operacją atomową (niepodzielną). Jeśli przerwanie wystąpi pomiędzy dwoma instrukcjami uzyskującymi dostęp do rejestru 16-bitowego, a kod przerwania aktualizuje rejestr tymczasowy przez dostęp do tego samego rejestru lub do innych rejestrów 16-bitowych timera, to wynik tej operacji po powrocie z przerwania będzie niepoprawny. Dlatego, gdy zarówno kod podstawowy jak i kod przerwania uaktualniają rejestr tymczasowy, kod podstawowy musi zablokować przerwania podczas 16-bitowego dostępu.

Poniższy przykład kodu pokazuje, jak wykonać atomowy odczyt zawartości rejestru TCNT1. Tak samo można odczytywać dowolny z rejestrów OCRnA/B/C lub ICRn.

Przykład w asemblerze:
TIM16_ReadTCNT0:
    ; Zapamiętaj globalny znacznik przerwań
    in r18,SREG
    ; Wyłącz przerwania
    cli
    ; Czytaj TCNT1 do r17:r16
    in r16,TCNT1L
    in r17,TCNT1H
    ; Odtwórz globalny znacznik przerwań
    out SREG,r18
    ret

Przykładowy kod zwraca wartość TCNT1 w parze rejestrów r17:r16. Dodatkowo wykorzystywany jest rejestr r18 do tymczasowego przechowania rejestru stanu SREG.

Przykład w języku C:
unsigned int TIM16_ReadTCNT1( void )
{
    unsigned char sreg;
    unsigned int i;
    /* Zapamiętaj globalny znacznik przerwań */
    sreg = SREG;
    /* Wyłącz przerwania */
    _CLI();
    /* Odczytaj TCNT1 do i */
    i = TCNT1;
    /* Odtwórz globalny znacznik przerwań */
    SREG = sreg;
    return i;
}

Powyższy przykładowy kod zakłada dołączenie do programu odpowiedniego pliku nagłówkowego.

Poniższy przykład kodu pokazuje, jak wykonać atomowy (niepodzielny) zapis zawartości rejestru TCNT1. Tak samo można zapisywać dowolny z rejestrów OCRnA/B/C lub ICRn.

Przykład w asemblerze:
TIM16_WriteTCNT0:
    ; Zapamiętaj globalny znacznik przerwań
    in r18,SREG
    ; Wyłącz przerwania
    cli
    ; Ustaw TCNT1 na r17:r16
    out TCNT1H,r17
    out TCNT1L,r16
    ; Odtwórz globalny znacznik przerwań
    out SREG,r18
    ret

Przykład kodu wymaga umieszczenia w parze rejestrów r17:r16 wartości do zapisania w TCNT1. Dodatkowo rejestr r18 wykorzystywany jest do tymczasowego przechowania rejestru stanu SREG.

Przykład w języku C:
void TIM16_WriteTCNT1( unsigned int i )
{
    unsigned char sreg;
    unsigned int i;
    /* Zapamiętaj globalny znacznik przerwań */
    sreg = SREG;
    /* Wyłącz przerwania */
    _CLI();
    /* Ustaw TCNT1 na i */
    TCNT1 = i;
    /* Odtwórz globalny znacznik przerwań */
    SREG = sreg;
}

Powyższy przykładowy kod zakłada dołączenie do programu odpowiedniego pliku nagłówkowego.

Wykorzystywanie tymczasowego rejestru górnego bajtu

Przy zapisie do więcej niż jednego rejestru 16-bitowego, gdzie górny bajt jest taki sam dla wszystkich zapisywanych rejestrów, górny bajt może być zapisany tylko jeden raz. Jednakże zasada atomowego (niepodzielnego) dostępu, opisana wcześniej, wciąż w tym przypadku obowiązuje.

Na początek:  podrozdziału   strony 

Źródła zegarowe timera/licznika

Timer/licznik może być taktowany przez wewnętrzne lub zewnętrzne źródło zegarowe. Jest ono wybierane przez moduł wyboru zegara (ang. Clock Select logic), które jest sterowane bitami wyboru zegara (CSn[2:0]) umieszczonymi w rejestrze B sterowania timerem/licznikiem (ang. Timer/Counter control Register B, TCCRnB).  Szczegóły na temat dostępnych źródeł zegarowych znajdziesz w rozdziale "Preskalery timerów/liczników 1, 2 i 3".
Na początek:  podrozdziału   strony 

Moduł licznika

Głównym elementem 16-bitowego timera/licznika jest programowalny, 16-bitowy, dwukierunkowy moduł licznika. Poniższy rysunek przedstawia schemat blokowy licznika i jego otoczenie:

obrazek

Opis sygnałów (sygnały wewnętrzne):
Count zwiększa lub zmniejsza TCNT1 o 1.
Clear zeruje TCNT1 (ustawia wszystkie bity na 0).
Direction wybiera pomiędzy zwiększaniem a zmniejszaniem TCNT1 o 1.
clkT1 zegar timera/licznika.
TOP sygnalizuje, że TCNT1 osiągnął wartość maksymalną.
BOTTOM sygnalizuje, że TCNT1 osiągnął wartość minimalną (zero).

16 bitowy licznik jest odwzorowany w dwóch 8-bitowych komórkach pamięci we/wy: Counter High (TCNTnH) zawierającej górne 8 bitów licznika i Counter Low (TCNTnL) zawierającej dolne 8 bitów. Rejestr  TCNTnH może być adresowany jedynie pośrednio przez mikroprocesor. Gdy mikroprocesor uzyskuje dostęp do komórki TCNTnH pamięci we/wy, to faktycznie ma on dostęp do 8-bitowego rejestru tymczasowego (TEMP). Tymczasowy rejestr jest aktualizowany wartością  TCNTnH, gdy zostanie odczytana wartość TCNTnL, i TCNTnH zostaje uaktualniony zawartością rejestru tymczasowego, gdy zostanie zapisana wartość TCNTnL. Pozwala to mikroprocesorowi odczytać całą zawartość 16-bitowego licznika w czasie jednego cyklu zegarowego poprzez 8-bitową magistralę danych. Ważne jest zwrócenie uwagi na fakt, iż istnieją specjalne przypadki zapisu do rejestru TCNTn, gdy licznik zlicza, które dadzą nieprzewidywalne wyniki. Te specjalne przypadki opisane są w tych podrozdziałach, gdzie są istotne.

W zależności od zastosowanego trybu pracy licznik jest zerowany, zwiększany lub zmniejszany przy każdym impulsie zegara timera (clkTn). Zegar clkTn może być generowany przez zewnętrzne lub wewnętrzne źródło zegarowe, wybierane bitami wyboru zegara (ang.  Clock Select bits, CSn[2:0]). Jeśli żadne źródło zegarowe nie jest wybrane (CSn[2:0] = 0), to timer jest zatrzymany. Jednakże wartość TCNT1 może być modyfikowana przez mikroprocesor niezależnie od obecności sygnału clkTn. Zapisy ze strony mikroprocesora posiadają pierwszeństwo w stosunku do wszystkich operacji zerowania licznika lub zliczania.

The counting sequence is determined by the setting of the Waveform Generation mode bits (WGMn3:0) located in
the Timer/Counter Control Registers A and B (TCCRnA and TCCRnB). There are close connections between how
the counter behaves (counts) and how waveforms are generated on the Output Compare outputs OCnx. For more
details about advanced counting sequences and waveform generation, see “Modes of Operation” on page 117.

Sekwencja zliczania określana jest przez ustawienie bitów trybu generacji przebiegu (ang. Waveform Generation mode bits, WGMn[3:0]) zlokalizowanych w rejestrach A i B sterujących timera/licznika (TCCRnA i TCCRnB). Istnieje bliski związek pomiędzy zachowaniem się licznika (zliczaniem) a sposobem generacji przebiegów na wyjściach porównań (ang. Output Compare outputs, OCnx). Więcej na ten temat znajdziesz w podrozdziale "Tryby Działania".

Znacznik przepełnienia timera/licznika (ang. Timer/Counter 1 Overflow Flag, TOVn) jest ustawiany zgodnie z trybem działania wybranym przez bity WGMn[3:0]. TOVn może zostać wykorzystany do generacji przerwania dla mikroprocesora.

Na początek:  podrozdziału   strony 

Moduł Input Capture

Timer/licznik zawiera moduł Input Capture, który może rejestrować zdarzenia zewnętrzne i przydzielać im znaczniki czasu oznaczające czas wystąpienia. Sygnał zewnętrzny oznaczający jakieś zdarzenie pojedyncze lub wielokrotne można podłączyć do końcówki ICPn lub alternatywnie, tylko dla timera/licznika 1, poprzez moduł komparatora analogowego. Te znaczniki czasu mogą następnie zostać wykorzystane do obliczania częstotliwości, wypełnienia impulsu lub innych własności zastosowanego sygnału. Alternatywnie te znaczniki czasu można użyć do tworzenia dziennika zdarzeń.

 

Moduł Input Capture jest zilustrowany na poniższym rysunku. Na szaro zaznaczono elementy, które nie są bezpośrednio częścią tego modułu. Mała litera "n" w nazwach rejestru i bitów oznacza numer timera/licznika (w mikrokontrolerach posiadających kilka takich komponentów).

obrazek

Uwaga: 1. Wyjście komparatora analogowego (ACO) może wyzwalać tylko ICP timera/licznika 1 – nie timera/licznika 3.

Gdy pojawia się zmiana poziomu logicznego (zdarzenie) na końcówce Input Capture (ang Input Capture pin, ICPn) lub alternatywnie na wyjściu komparatora analogowego (ang. Analog Comparator output, ACO), a zmiana ta jest zgodna z ustawieniem detektora zbocza, to zostanie wyzwolone zapamiętanie stanu licznika. W trakcie rejestracji 16-bitowa wartość licznika (TCNTn) zostaje zapisana w rejestrze Input Capture (ang. Input Capture Register, ICRn). Znacznik Input Capture (ang. Input Capture Flag, ICFn) zostaje ustawiony w tym samym cyklu zegara systemowego, gdy wartość TCNTn jest kopiowana do rejestru ICRn Register. Jeśli zostanie to włączone (TICIEn = 1), to znacznik ICFn  generuje przerwanie Input Capture (ang. Input Capture interrupt). Znacznik ICFn zostaje automatycznie wyzerowany, gdy to przerwanie jest wykonywane. Alternatywnie znacznik ICFn może zostać wyzerowany programowo przez zapisanie logicznego 1 (nie 0) do jego bitu w komórce we/wy.

Odczytywanie 16-bitowej wartości w rejestrze Input Capture (ICRn) jest wykonywane przez odczytanie najpierw młodszego bajta (ICRnL), a później starszego (ICRnH). Gdy młodszy bajt zostaje odczytany, starszy bajt zostaje skopiowany do rejestru tymczasowego (TEMP). Gdy mikroprocesor odczytuje adres we/wy ICR1H, to otrzyma dostęp do rejestru TEMP.

The ICRn Register can only be written when using a Waveform Generation mode that utilizes the ICRn Register for defining the counter’s TOP value. In these cases the Waveform Generation mode (WGMn3:0) bits must be set before the TOP value can be written to the ICRn Register. When writing the ICRn Register the high byte must be written to the ICRnH I/O location before the low byte is written to ICRnL

Rejestr ICRn może być zapisywany jedynie w trybie generacji przebiegu, który wykorzystuje rejestr ICRn do definiowania wartości TOP (wartość górna, maksymalna) dla licznika. W takim przypadku bity trybu generacji przebiegu (ang. Waveform Generation mode  bits, WGMn[3:0]) muszą być ustawione, zanim wartość TOP będzie mogła być wpisana do rejestru ICRn . Przy zapisywaniu rejestru ICRn starszy bajt musi być wpisany do komórki we/wy ICRnH przed wpisaniem młodszego bajtu do ICRnL. Więcej informacji na ten temat znajdziesz w podrozdziale "Dostęp do rejestrów 16-bitowych".

Źródło wyzwalania Input Capture

Głównym źródłem wyzwalania dla modułu Input Capture jest końcówka Input Capture (ICPn):

Timer/licznik 1 może alternatywnie wykorzystywać wyjście z komparatora analogowego jako źródło wyzwalania dla modułu Input Capture. Komparator analogowy zostaje wybrany jako źródło wyzwalające przez ustawienie bitu Input Capture komparatora analogowego (ang. Analog Comparator Input Capture, ACIC) w rejestrze sterowania i stanu komparatora analogowego (ang. ACSR – Analog Comparator Control and Status Register). Bądź świadomy faktu, iż zmiana źródła wyzwalającego może wyzwolić nagranie stanu licznika. Z tego powodu znacznik Input Capture musi zostać wyzerowany po takiej zmianie.

Zarówno końcówka Input Capture (ICPn) jak i wyjście komparatora analogowego (ACO) są próbkowane tym samym sposobem, co końcówka Tn. Detektor zbocza jest również identyczny. Jednakże, gdy zostanie włączony reduktor szumu, przed wejście detektora zbocza zostaje wstawiona dodatkowa sieć logiczna, która zwiększa opóźnienie do czterech cykli zegara systemowego. Zwróć uwagę, że wejście reduktora szumów i detektora zbocza jest zawsze uaktywnione, o ile timer/licznik nie zostanie ustawiony do pracy w trybie generacji przebiegu, który wykorzystuje rejestr ICRn do definiowania wartości TOP.

Zdarzenie Input Capture może być wyzwolone programowo przez sterowanie portem końcówki ICPn.

Reduktor szumów

Reduktor szumów poprawia odporność na zakłócenia poprzez zastosowanie prostego schematu filtracji cyfrowej. Wejście reduktora szumów monitoruje cztery kolejne próbki i wszystkie muszą być równe, aby zmieniło się wyjście, które z kolei wykorzystuje detektor zbocza.

Reduktor szumów jest włączany przez ustawienie bitu reduktora szumów dla Input Capture (ang. Input Capture Noise Canceler, ICNC0) w rejestrze B sterowania timerem/licznikiem (ang. Timer/Counter Control Register B, TCCRnB). Gdy zostanie włączony, reduktor szumów wprowadza dodatkowe cztery takty zegara systemowego opóźnienia od zmiany wejścia do aktualizacji rejestru ICRn. Reduktor szumów wykorzystuje zegar systemowy i dlatego nie wpływa na niego preskaler.

Używanie modułu Input Capture

Głównym wyzwaniem przy używaniu modułu Input Capture jest przydział wystarczającej mocy obliczeniowej procesora do obsługi nadchodzących zdarzeń. Czas pomiędzy dwoma kolejnymi zdarzeniami jest krytyczny. Jeśli procesorowi nie uda się odczytać zarejestrowanej wartości w rejestrze ICRn przed wystąpieniem następnego zdarzenia, rejestr ICRn zostanie nadpisany nową wartością. W tym przypadku wynik rejestracji będzie niepoprawny.

Gdy używane jest przerwanie Input Capture, rejestr ICRn powinien być odczytany najszybciej jak to jest możliwe w procedurze obsługi przerwania. Chociaż przerwanie Input Capture posiada względnie wysoki priorytet, to maksymalny czas reakcji na to przerwanie zależy od maksymalnej liczby cykli zegarowych zużytych na obsługę pozostałych żądań przerwania.

Nie zaleca się używania modułu Input Capture w jakimkolwiek trybie pracy, gdy aktywnie jest zmieniana wartość TOP (rozdzielczość) podczas zliczania.

Pomiar współczynnika wypełnienia sygnału zewnętrznego wymaga zmiany zbocza wyzwalającego po każdej rejestracji. Zmiana wykrywania zbocza musi być wykonana tak szybko jak tylko jest to możliwe po odczycie rejestru CRn. Po zmianie zbocza musi być programowo wyzerowany znacznik Input Capture (ICFn) przez zapis logicznej jedynki do jego bitu w komórce we/wy.

Jeśli mierzona jest jedynie częstotliwość, to zerowanie znacznika ICFn nie jest wymagane przy wykorzystywaniu przerwań (jeśli jest używana procedura obsługi przerwania).

Na początek:  podrozdziału   strony 

Moduły Output Compare

16-bitowy komparator cyfrowy ciągle porównuje stan timera/licznika TCNTn z rejestrem Output Compare (OCRnx). Jeśli TCNTn jest równy OCRnx, komparator sygnalizuje zgodność, co ustawi znacznik Output Compare (OCFnx) przy następnym cyklu zegarowym timera. Jeśli włączone (OCIEnx = 1), to znacznik Output Compare wygeneruje przerwanie Output Compare. Znacznik OCFnx jest automatycznie zerowany, gdy przerwanie zostanie wykonane. Alternatywnie znacznik OCF1x można wyzerować programowo przez zapis logicznej jedynki do jego bitu w komórce we/wy. Generator przebiegu używa sygnału zgodności do generowania sygnału wyjściowego zgodnie z trybem pracy ustawionym przez bity trybu generacji przebiegu (ang. Waveform Generation mode, WGMn[3:0]) oraz bity trybu Compare Output (ang. Compare Output mode bits, COMnx[1:0]). Sygnały TOP i BOTTOM są używane przez generator przebiegu do obsługi specjalnych przypadków wartości końcowych w niektórych trybach pracy (zobacz do podrozdziału "Tryby pracy").

Specjalna funkcja modułu A Output Compare pozwala zdefiniować wartość TOP dla  timera/licznika (tj. rozdzielczość licznika). Jako dodatek do rozdzielczości licznika, wartość TOP definiuje czas okresu dla przebiegów generowanych w generatorze przebiegów.

Poniższy obrazek przedstawia schemat blokowy modułu Output Compare. Mała litera “n” w nazwach rejestrów i bitów oznacza numer modułu (n = 1 dla timera/licznika 1), a “x” oznacza moduł Output Compare (A/B). Elementy schematu blokowego nie będące bezpośrednio częścią modułu Output Compare są pokolorowane na szaro.

obrazek

Rejestr OCRnx jest podwójnie buforowany przy korzystaniu z wszystkich dwunastu trybów modulacji szerokości impulsu (ang. Pulse Width Modulation, PWM). W trybach normalnym (ang Normal mode) i zerowania timera przy zgodności porównania (ang. Clear Timer on Compare mode, CTC) podwójne buforowanie jest wyłączone. Podwójne buforowanie synchronizuje uaktualnienia zawartości rejestru porównań OCRnx albo do wartości TOP, albo do wartości BOTTOM sekwencji zliczania. Synchronizacja zapobiega pojawianiu się impulsów PWM o złej długości lub niesymetrycznych, a w ten sposób zapewniając bezbłędny przebieg wyjściowy.

Dostęp do rejestru OCRnx może wydawać się skomplikowany, lecz tak nie jest. Gdy włączone jest podwójne buforowanie, mikroprocesor ma dostęp do rejestru buforowego OCRnx, a jeśli podwójne buforowanie jest wyłączone, to mikroprocesor będzie posiadał bezpośredni dostęp do OCRnx. Zawartość rejestru OCRnx (bufora lub właściwego rejestru) jest zmieniana tylko przez operację zapisu (timer/licznik nie uaktualnia tego rejestru automatycznie, jak w przypadku TCNTn i OCRn). Dlatego OCRnx nie jest odczytywany poprzez górny bajt rejestru tymczasowego (TEMP). Jednakże dobra praktyką jest odczyt najpierw dolnego bajta, jak to jest przy dostępie do innych rejestrów 16-bitowych. Zapis rejestrów OCRnx musi być dokonywany poprzez rejestr TEMP, ponieważ porównywane są ciągle wszystkie 16 bitów. Górny bajt (OCRnxH) musi być zapisany najpierw. Gdy zapisywany jest górny bajt w komórce we/wy przez mikroprocesor, to zapisana wartość trafia do rejestru TEMP. Gdy następnie zostaje zapisany dolny bajt OCRnxL) do 8 dolnych bitów, to górny bajt zostanie skopiowany do 8 górnych bitów albo bufora OCRnx, albo rejestru porównawczego OCRnx w tym samym cyklu zegara systemowego.
Więcej informacji znajdziesz w podrozdziale "Dostęp do rejestrów 16-bitowych".

Wymuszone Output Compare

W trybach nie generujących przebiegu PWM wyjście zgodności porównania z komparatora może zostać wymuszone przez zapis jedynki do bitu wymuszenia Output Compare (ang. Force Output Compare bit). Wymuszenie zgodności porównania nie ustawi znacznika OCFnx, ani nie wyzeruje/przeładuje timera, lecz końcówka OCnx zostanie uaktualniona tak, jakby wystąpiła rzeczywista zgodność porównania (ustawienie bitów COMn[1:0] definiuje, czy końcówka  OCnx jest ustawiana, zerowana lub zmienia stan na przeciwny).

Blokowanie zgodności porównania przez zapis do TCNTn

Wszystkie zapisy przez mikroprocesor do rejestru TCNTn będą blokowały każdą zgodność porównania, która pojawi się w następnym cyklu zegara timera, nawet, jeśli timer został zatrzymany. Cecha ta pozwala zainicjować OCRnx na tę samą wartość co TCNTn bez wyzwolenia przerwania, gdy zostanie włączony zegar timera/licznika.

Używanie modułu Output Compare

Ponieważ zapis do TCNTn w dowolnym trybie pracy zablokuje zgodności porównań na jeden cykl zegara timera, istnieje ryzyko związane ze zmianą TCNTn, gdy korzysta się z modułuu Output Compare, niezależnie od tego, czy timer/licznik pracuje lub nie pracuje. Jeśli wartość wpisana do TCNTn jest równa wartości OCRnx, to zgodność porównania zostanie przegapiona, co da w wyniku niepoprawną generację przebiegu. Nie wpisuj do TCNTn wartości równej TOP w trybach PWM ze zmiennymi wartościami TOP. Zgodność porównania dla TOP zostanie zignorowana i licznik będzie kontynuował zliczanie do 0xFFFF. Podobnie, nie wpisuj do TCNTn wartości równej BOTTOM, gdy licznik zlicza w dół. Ustawienie OCnx powinno być wykonane przed ustawieniem w rejestrze kierunku danych (ang. Data Direction Register) wyjścia dla końcówki portu. Najprostszym sposobem ustawienia wartości OCnx jest skorzystanie z bitów strobujących wymuszania Output Compare w trybie normalnym. Rejestr OCnx zachowuje swą zawartość nawet przy zmienianiu trybów generacji przebiegu.

Bądź świadomy, iż bity COMnx[1:0] nie są podwójnie buforowane wraz z wartością porównania. Zmiana bitów COMnx[1:0] odniesie natychmiastowy skutek.

Na początek:  podrozdziału   strony 

Moduł Compare Match Output

Bity trybu wyjścia porównania (ang. Compare Output Mode bits, COMnx[1:0]) posiadają dwie funkcje. Po pierwsze, generator przebiegu wykorzystuje bity COMnx[1:0] do definiowania stanu końcówki wyjścia porównania (OCnx) przy kolejnej zgodności porównania. Po drugie, bity COMnx[1:0] kontrolują źródło wyjściowe dla końcówki OCnx. Obrazek poniżej pokazuje uproszczony schemat sieci logicznej, na którą oddziałuje ustawienie bitów COMnx[1:0]. Rejestry we/wy, bity we/wy i końcówki we/wy na tym obrazku opisane są tłustym drukiem. Pokazane są tylko te elementy ogólnych rejestrów sterowania portami we/wy (DDR i PORT), na które wpływają bity COMnx[1:0]. Przy odwołaniu do stanu OCnx, odwołanie to dotyczy wewnętrznego rejestru OCnx, nie końcówki OCnx. Jeśli wystąpi reset, to rejestr OCnx zostanie wyzerowany.

Moduł wyjścia zgodności porównania (ang. Compare Match Output Unit) w trybie nie związanym z PWM
obrazek

Ogólna funkcja portu we/we zostaje przejęta przez Output Compare (OCnx) z generatora przebiegu, jeśli dowolny z bitów COMnx[1:0] jest ustawiony. Jednakże kierunek końcówki OCnx (wejście lub wyjście) jest wciąż kontrolowany przez rejestr kierunku danych (DDR) dla tej końcówki portu. Bit portu kierunku danych dla końcówki OCnx (DDR_OCnx) musi być ustawiony jako wyjście, zanim wartość OCnx stanie się widoczna na końcówce. Funkcja przejmowania jest niezależna od trybu pracy generatora przebiegu, lecz istnieją pewne wyjątki, które opisane są dalej w tym rozdziale.
Zasada działania sieci logicznej dla końcówki Compare Output pozwala na inicjalizację stanu OCnx przed uaktywnieniem wyjścia. Zwróć uwagę, że niektóre z ustawień bitów COMnx[1:0] są zarezerwowane tylko dla pewnych trybów pracy. Zobacz do podrozdziału "Opis Rejestrów".

Bity COMnx[1:0] nie wpływają na moduł Input Capture.

Tryb Output Compare a generacja przebiegu

Generator przebiegu wykorzystuje bity COMnx[1:0] w różny sposób w trybach: normalnym, CTC i PWM . We wszystkich trybach ustawienie COMnx[1:0] = 0 informuje generator przebiegu, że żadne działanie nie ma być wykonywane na rejestrze OCnx przy następnej zgodności porównania.

Zmiana stanu bitów COMnx[1:0] wpłynie na pierwszą zgodność porównania po zapisaniu tych bitów. Dla trybów różnych od PWM działanie może być natychmiast wymuszone za pomocą bitów strobujących FOCnx.

Na początek:  podrozdziału   strony 

Tryby pracy

Tryb pracy, tj. zachowanie się timera/licznika i końcówek wyjścia porównania, jest zdefiniowany przez kombinację bitów trybu generacji przebiegu (WGMn[3:0]) oraz bitów trybu Compare Output (COM1x[1:0]). Bity trybu Compare Output nie wpływają na sekwencję zliczania, natomiast bity trybu generacji przebiegu wpływają na nią. Bity  COMnx[1:0] kontrolują, czy generowane wyjście PWM ma być zaprzeczone, czy nie (ang. inverted lub non-inverted PWM). Dla trybów różnych od trybów PWM bity COMnx[1:0] kontrolują, czy sygnał wyjściowy powinien być ustawiany na 1, zerowany lub zmieniany na przeciwny (0 → 1, 1 → 0) przy zgodności porównania (“Moduł wyjścia zgodności porównania").

Tryb normalny

Najprostszym trybem pracy jest tryb normalny (ang. Normal Mode, WGMn[3:0] = 0). W tym trybie kierunek zliczania jest zawsze w górę (stan licznika sie zwiększa przy każdym impulsie zegarowym) i nie jest wykonywane żadne zerowanie licznika. Licznik po prostu się przewija, gdy osiąga swoją maksymalną wartość 16-bitową (MAX = 0xFFFF), a później startuje ponownie od wartości BOTTOM (0x0000). W trybie normalnym znacznik przepełnienia timera/licznika (ang. Timer/Counter Overflow Flag, TOVn) zostanie ustawiony w tym samym cyklu zegarowym, gdy TCNTn osiąga wartość zero. Znacznik TOVn w tym przypadku zachowuje się jak 17-ty bit z tym wyjątkiem, że jest tylko ustawiany, nie zerowany. Jednakże w połączeniu z przerwaniem od przepełnienia timera (ang. timer overflow interrupt), które automatycznie zeruje znacznik TOVn, rozdzielczość timera może zostać zwiększona programowo. Nie ma specjalnych przypadków do rozważenia w trybie normalnym, nowa wartość dla licznika może zostać wpisana w dowolnym momencie.

W trybie normalnym używanie modułu Input Capture jest łatwe. Jednakże postaraj się przestrzegać, aby maksymalny interwał pomiędzy zdarzeniami zewnętrznymi nie przekraczał rozdzielczości licznika. Jeśli interwał pomiędzy dwoma zdarzeniami zewnętrznymi jest zbyt długi, musi zostać użyte przerwanie od przepełnienia timera lub preskaler, aby poszerzyć rozdzielczość  modułu rejestracji zdarzeń.

Moduły Output Compare mogą być użyte do generowania przerwań w określonych momentach czasu. Używanie Output Compare do generacji przebiegów w trybie normalnym nie jest zalecane, ponieważ zabiera to zbyt wiele czasu mikroprocesora.

Tryb zerowania timera przy zgodności porównania (CTC)

W trybie zerowania timera przy zgodności porównania (ang. Clear Timer on Compare, CTC)  (WGMn[3:0] = 4 lub 12), rejestr OCRnA lub rejestr ICRn jest używany do manipulowania rozdzielczością licznika. W trybie CTC licznik jest zerowany, gdy jego wartość (TCNTn) zrówna się albo z OCRnA (WGMn[3:0] = 4), albo z ICRn (WGMn[3:0] = 12). Rejestr OCRnA lub ICRn definiuje wartość szczytową dla licznika, a stąd również jego rozdzielczość. Ten tryb zapewnia większą kontrolę nad częstotliwością wyjścia zgodności porównania. Upraszcza również operację zliczania zdarzeń zewnętrznych.

Wykres czasowy dla trybu CTC jest pokazany na poniższym rysunku. Wartość licznika (TCNTn) zwiększa się aż do pojawienia się zgodności porównania albo z OCRnA, albo z ICRn, a wtedy licznik (TCNTn) jest zerowany.

Tryb CTC, wykres czasowy
obrazek

Przerwanie może zostać wygenerowane za każdym razem, gdy wartość licznika osiąga wartość TOP przy użyciu albo znacznika OCFnA, albo ICFn, zgodnie z rejestrem używanym do definiowania wartości TOP. Jeśli to przerwanie jest uaktywnione, to procedura jego obsługi może zostać użyta do uaktualniania wartości TOP. Jednakże zmiana TOP na wartość bliską BOTTOM przy uruchomionym liczniku bez preskalera lub z małą wartością podziału preskalera musi być dokonywana ostrożnie, ponieważ tryb CTC nie posiada opcji podwójnego buforowania. Jeśli nowa wartość wpisana do OCRnA lub ICRn jest niższa od bieżącej wartości TCNTn, licznik przegapi zgodność porównania. W takim przypadku będzie on musiał zliczać do swojej wartości maksymalnej (0xFFFF) i przewinąć się do 0x0000, zanim wystąpi zgodność porównania. W wielu przypadkach taka cecha jest niepożądana. Alternatywą będzie wtedy użycie szybkiego trybu PWM, wykorzystując OCRnA do definiowania TOP (WGMn[3:0] = 15), ponieważ OCRnA jest wtedy podwójnie buforowany.

Przy generowaniu przebiegu wyjściowego w trybie CTC wyjście OCnA może zostać ustawione na zmianę swojego poziomu logicznego przy każdej zgodności porównania przez ustawienie bitów trybu Compare Output na tryb zmiany (COMnA[1:0] = 1). Wartość OCnA nie będzie widoczna na końcówce portu aż do ustawienia kierunku danych na wyjście (DDR_OCnA = 1). Generowany przebieg będzie posiadał maksymalną częstotliwość fOCnA = fclk_I/O/2, gdy OCRnA jest ustawione na zero (0x0000). Częstotliwość przebiegu jest zdefiniowana wzorem:

Zmienna N reprezentuje współczynnik preskalera (1, 8, 64, 256 lub 1024).

Tak samo jak w trybie normalnym znacznik TOV1 flag jest ustawiany w tym samym cyklu zegara timera, gdy licznik zmienia stan z MAX na 0x0000.


Szybki tryb PWM

Szybki tryb PWM (ang. fast Pulse Width Modulation mode) (WGMn[3:0] = 5, 6, 7, 14 lub 15) udostępnia opcję generowania przebiegu PWM o wysokiej częstotliwości. Szybkie PWM różni się od innych opcji PWM zliczaniem tylko w jednym kierunku. Licznik zlicza od BOTTOM do TOP, po czym znów rozpoczyna od BOTTOM. W trybie nieodwróconym Compare Output (ang. non-inverting Compare Output mode) wyjście Output Compare (OCnx) jest zerowane przy zgodności porównania pomiędzy TCNTn a OCR1x i ustawiane przy BOTTOM. W trybie odwróconym Output Compare (ang. inverting Compare Output mode) wyjście jest ustawiane przy zgodności porównania i zerowane przy BOTTOM. Z powodu tego zliczania tylko w jednym kierunku, częstotliwość pracy szybkiego trybu PWM może być dwukrotnie wyższa niż w trybach PWM z poprawnością fazy i z poprawności fazy i częstotliwości, które wykorzystują zliczanie dwukierunkowe. Ta wysoka częstotliwość sprawia, że szybki tryb PWM dobrze nadaje się do aplikacji sterujących mocą, stabilizacją oraz przetwarzaniem cyfrowo/analogowym. Wysoka częstotliwość umożliwia stosowanie mniejszych wymiarowo elementów zewnętrznych (cewek, kondensatorów), a przez to zmniejsza całkowity koszt systemu.

Rozdzielczość PWM dla szybkiego PWM może zostać ustalona na 8, 9,10 bitów lub zdefiniowana albo przez ICRn, albo przez OCRnA. Minimalna, dozwolona rozdzielczość to 2 bity (ICRn lub OCRnA ustawione na 0x0003), a maksymalna rozdzielczość to 16 bitów (ICRn lub OCRnA ustawione na MAX). Rozdzielczość PWM w bitach można obliczyć z poniższego wzoru:

W szybkim trybie PWM licznik jest zwiększany co 1, aż jego zawartość będzie równa jednej z ustalonych wartości 0x00FF, 0x01FF lub 0x03FF (WGMn[3:0] = 5, 6 lub 7), wartości w ICRn (WGMn[3:0] =14) lub wartości w OCRnA (WGM1[3:0] = 15). Licznik zostaje następnie wyzerowany przy następnym cyklu zegarowym timera. Na poniższym rysunku przedstawiono wykres czasowy dla szybkiego trybu PWM.  Rysunek pokazuje szybki tryb PWM, gdy rejestr OCRnA lub ICRn używany jest do definiowania TOP. Wartość TCNTn jest na wykresie przedstawiona jako histogram dla zilustrowania jednokierunkowej operacji zliczania. Wykres zawiera wyjścia PWM nieodwrócone oraz odwrócone. Małe poziome odcinki na zboczach TCNTn reprezentują zgodności porównań pomiędzy OCRnx a TCNTn. Znacznik przerwania OCnx będzie ustawiany, gdy wystąpi zgodność porównania.

obrazek

Znacznik przepełnienia timera/licznika (ang. Timer/Counter Overflow Flag, TOVn) jest ustawiany zawsze, gdy licznik osiąga TOP. Dodatkowo znacznik OCnA lub ICFn jest ustawiany w tym samym cyklu zegarowym timera co TOVn, gdy OCRnA lub ICRn jest używany do definiowania wartości TOP. Jeśli jedno z przerwań jest uaktywnione, to procedura jego obsługi może zostać użyta do uaktualniania wartości TOP oraz wartości do porównań.

Przy zmianie wartości TOP program musi zapewnić, że nowa wartość TOP jest wyższa lub równa wartości wszystkich rejestrów porównawczych. Jeśli będzie ona niższa, to zgodność porównania nigdy nie wystąpi pomiędzy TCNTn a OCRnx. Zwróć uwagę, że przy korzystaniu z ustalonych wartości TOP nieużywane bity są maskowane na zero, gdy zostanie zapisany dowolny z rejestrów OCRnx.

Procedura uaktualniania ICRn różni się od uaktualniania OCRnA, gdy rejestr ten jest używany do definiowania wartości TOP.

Rejestr ICRn nie jest podwójnie buforowany. Oznacza to, iż przy zmianie zawartości ICRn na niską wartość przy uruchomionym liczniku lub przy niskiej wartości preskalera, istnieje ryzyko, iż zapisana nowa zawartość ICRn przegapi zgodność porównania przy wartości TOP. Licznik będzie wtedy musiał zliczyć do wartości MAX (0xFFFF) i przewinąć się na 0x0000, zanim zgodność porównania będzie mogła wystąpić. Jednakże rejestr OCRnA jest podwójnie buforowany. Cecha ta pozwala zapisać komórkę we/wy OCRnA w dowolnym momencie. Gdy następuje zapis komórki we/wy OCRnA, zapisywana wartość trafi do rejestru buforowego OCRnA. Rejestr porównawczy OCRnA zostanie następnie uaktualniony wartością w buforze przy następnym cyklu zegarowym timera, gdy TCNTn osiągnie TOP. Uaktualnienie jest wykonywane w tym samym cyklu zegarowym timera, gdy TCNTn jest zerowany a znacznik TOVn ustawiany.

Używanie rejestru ICRn do definiowania wartości TOP działa dobrze z ustalonymi wartościami TOP. Przez użycie ICRn rejestr OCRnA zostaje zwolniony i można go wykorzystać do generowania wyjścia PWM na końcówce OCnA. Jednakże, jeśli bazowa częstotliwość PWM zmienia się aktywnie (poprzez zmianę wartości TOP), to używanie OCRnA jako TOP jest w oczywisty sposób lepszym wyborem z uwagi na jego podwójne buforowanie.

W szybkim trybie PWM moduły porównawcze pozwalają generować przebiegi PWM na końcówkach OC1x. Ustawienie bitów COMnx[1:0] na 2 utworzy przebieg PWM nieodwrócony, a przebieg odwrócony PWM można wygenerować przez ustawienie bitów COMnx[1:0] na 3. Faktyczna wartość OCnx stanie się widoczna na końcówce portu, jeśli kierunek danych dla tej końcówki zostanie ustawiony jako wyjście (DDR_OC1x). Przebieg PWM jest generowany przez ustawianie (lub zerowanie) rejestru OCnx przy zgodności porównania pomiędzy OCRnx a TCNTn oraz zerowanie (lub ustawianie) rejestru OCnx przy cyklu zegarowym timera zerującym licznik (zmiany z TOP na BOTTOM).

Częstotliwość PWM wyjścia można obliczyć z następującego wzoru:

Zmienna N reprezentuje dzielnik preskalera (1, 8, 64, 256 lub 1024).

Wartości ekstremalne rejestru OCRnx reprezentują specjalne przypadki przy generacji przebiegu wyjściowego PWM w szybkim trybie PWM. Jeśli  OCRnx jest ustawiony na wartość równą BOTTOM (0x0000), to na wyjściu pojawią się wąskie szpilki przy każdym TOP+1 cyklu zegara timera. Ustawienie OCRnx na wartość równą TOP spowoduje powstanie stałego przebiegu o wartości wysokiej lub niskiej (zależnie od polaryzacji wyjścia ustawianej bitami COMnx[1:0]).

Przebieg wyjściowy z wypełnieniem 50% w szybkim trybie PWM można osiągnąć przez ustawienie OCnA na zmianę poziomu logicznego przy każdej zgodności porównania (COMnA[1:0] = 1). Generowany przebieg będzie posiadał maksymalną częstotliwość fOCnA = fclk_I/O/2, gdy rejestr OCRnA zostanie ustawiony na zero (0x0000). Ta cecha jest podobna do ustawienia zmiany poziomu OCnA w trybie CTC, z wyjątkiem tego, iż cecha podwójnego buforowania w module Output Compare jest uaktywniona w szybkim trybie PWM.


Tryb PWM poprawny fazowo

Tryb PWM poprawny fazowo (ang. phase correct Pulse Width Modulation  mode) (WGMn[3:0] = 1, 2, 3, 10 lub 11) pozwala generować przebiegi PWM z poprawną fazą. Opiera się on na dwukierunkowym działaniu licznika, który w pętli liczy od wartości  BOTTOM (0x0000) do TOP, a następnie wstecz od TOP do BOTTOM. W trybie nieodwróconym Compare Output (ang. non-inverting Compare Output mode) wyjście Output Compare (OC1x) jest zerowane przy zgodności porównania pomiędzy TCNTn a OCRnx przy zliczaniu w górę oraz ustawiane przy tej zgodności porównania w czasie zliczania w dół. W trybie odwróconym Output Compare (ang. inverting Output Compare mode) działanie jest odwrotne. Zliczanie dwukierunkowe powoduje mniejszą szybkość działania niż przy zliczaniu jednokierunkowym. Jednakże z powodu symetrycznej natury trybów PWM przy zliczaniu dwukierunkowym są one preferowane w aplikacjach sterujących silnikami.

Rozdzielczość dla trybu PWM poprawnego fazowo może zostać ustalona na 8, 9, 10 bitów lub zdefiniowana przez rejestr ICRn lub OCRnA. Najmniejsza dozwolona rozdzielczość wynosi 2 bity (ICRn lub OCRnA ustawiony na 0x0003), a maksymalna rozdzielczość wynosi 16 bitów (ICRn lub OCRnA ustawiony na MAX). Rozdzielczość PWM w bitach może zostać obliczona wg następującego wzoru:

W trybie PWM poprawnym fazowo licznik jest zwiększany aż jego zawartość zrówna się albo z jedną z ustalonych wartości 0x00FF, 0x01FF, 0x03FF (WGMn[3:0] = 1, 2 lub 3), albo z wartością w ICRn (WGMn[3:0] = 10), albo z wartością w OCRnA (WGMn[3:0] = 11). W tym momencie licznik osiągną swoją wartość TOP i zmienia kierunek zliczania. Zawartość TCNTn będzie równa TOP przez jeden cykl zegara timera. Poniżej przedstawiony jest wykres czasowy dla trybu PWM poprawnego fazowo, gdy rejestr OCRnA lub ICRn jest używany do definiowania TOP. Na wykresie wartość TCNTn jest pokazana w postaci histogramu, który ilustruje operację zliczania w obu kierunkach. Wykres zawiera wyjścia nieodwrócone i odwrócone PWM. Małe znaczki poziome na zboczach TCNTn reprezentują zgodności porównań pomiędzy OCRnx a TCNTn.  Znacznik przerwania OC1x jest ustawiany, gdy wystąpi zgodność porównania.

obrazek

Znacznik przepełnienia timera/licznika (ang. Timer/Counter Overflow Flag, TOV1) jest ustawiany za każdym razem, gdy licznik osiąga BOTTOM. Gdy do definiowania TOP jest używany rejestr OCRnA lub ICRn, to zostaje odpowiednio ustawiony znacznik OC1A lub ICF1 w tym samym cyklu zegarowym timera, gdy rejestry OCRnx są uaktualniane wartością z bufora (przy TOP). Znaczniki przerwania mogą zostać użyte do generowania przerwania za każdym razem, gdy licznik osiąga wartość TOP lub BOTTOM.
Gdy zmieniana jest wartość TOP, program musi się upewnić, że nowa wartość TOP jest większa lub równa wartości wszystkich rejestrów porównawczych. Jeśli jest ona mniejsza, to zgodność porównania nigdy nie wystąpi pomiędzy TCNTn a OCRnx. Zwróć uwagę, iż przy używaniu ustalonych wartości TOP, nieużywane bity są maskowane na zero, gdy zostanie zapisany dowolny z rejestrów OCRnx. Jak pokazuje okres trzeci na powyższym rysunku, aktywna zmiana wartości TOP podczas pracy timera/licznika w trybie poprawnym fazowo może doprowadzić do niesymetrycznego przebiegu wyjściowego. Powodem tego zachowania jest czas uaktualnienia rejestru OCRnx. Ponieważ uaktualnienie OCRnx wykonywane jest przy TOP, okres PWM zaczyna się i kończy przy TOP. Powoduje to, iż długość zbocza opadającego jest określona przez poprzednią wartość TOP, natomiast długość zbocza wznoszącego się jest określona przez nową wartość TOP. Gdy te dwie wartości się różnią, to te dwa zbocza okresu będą miały różną długość. Różnica w długości daje niesymetryczny wynik na wyjściu.

Zaleca się używanie trybu poprawnego fazowo i częstotliwościowo zamiast trybu poprawnego fazowo, gdy zmieniana jest wartość TOP przy uruchomionym timerze/liczniku. Gdy stosowana jest statyczna wartość TOP, nie ma praktycznie żadnych różnic pomiędzy tymi dwoma trybami pracy.

W trybie PWM poprawnym fazowo moduły porównawcze pozwalają generować przebiegi PWM na końcówkach OC1x. Ustawienie bitów COM1x[1:0] na 2 wytworzy nieodwrócony przebieg PWM, a przebieg odwrócony powstanie przy ustawieniu COMnx[1:0] na 3. Wartość OC1x stanie się widoczna na końcówce portu, jeśli kierunek danych dla tej końcówki będzie ustawiony jako wyjście (DDR_OCnx). Przebieg PWM jest generowany przez ustawianie (lub zerowanie) rejestru OCnx przy zgodności porównania pomiędzy OCRnx a TCNTn, gdy licznik zlicza w górę, a przez zerowanie (lub ustawianie) rejestru OCnx przy zgodności porównania pomiędzy OCRnx a TCNTn, gdy licznik zlicza w dół. Wyjściowa częstotliwość przebiegu PWM w trybie poprawnym fazowo może zostać wyliczona z poniższego wzoru:

Zmienna N reprezentuje dzielnik preskalera (1, 8, 64, 256 lub 1024).

Wartości ekstremalne dla rejestru OCRnx reprezentują specjalne przypadki przy generacji przebiegu PWM w trybie poprawnym fazowo. Jeśli OCRnx zostanie ustawiony na BOTTOM, to w trybie nieodwróconym PWM wyjście będzie stale w stanie niskim, a jeśli ustawi się go na TOP, to na wyjściu ciągle będzie stan wysoki.  W odwróconym trybie PWN wyjście będzie w przeciwnych wartościach logicznych.

Tryb PWM poprawny fazowo i częstotliwościowo

Tryb PWM z poprawną fazą i częstotliwością (ang. phase and frequency correct Pulse Width Modulation mode) (WGMn[3:0] = 8 or 9) pozwala tworzyć przebiegi z wysoką rozdzielczością fazy i częstotliwości. Tryb ten, podobnie jak tryb poprawny fazowo oparty jest na dwukierunkowym zliczaniu. Licznik w kółko zlicza od BOTTOM (0x0000) do TOP, a następnie od TOP do BOTTOM. W nieodwróconym trybie Compare Output, wyjście Output Compare (OCnx) jest zerowane przy zgodności porównania pomiędzy TCNTn a OCRnx przy zliczaniu w górę, a ustawiane przy tej zgodności porównania przy zliczaniu w dół. W trybie odwróconym Compare Output operacja jest wykonywana na odwrót. Dwukierunkowe zliczanie daje mniejszą maksymalną częstotliwość działania w porównaniu do zliczania jednokierunkowego. Jednakże z powodu symetrii zliczania dwukierunkowego w tych trybach PWM, preferowane one są w aplikacjach sterujących silnikami.

Główną różnicą pomiędzy trybami PWM poprawnymi fazowo a trybami poprawnymi fazowo i częstotliwościowo jest czas aktualizacji rejestru OCRnx przez rejestr buforowy OCRnx.

Rozdzielczość PWM w trybie poprawnym fazowo i częstotliwościowo można zdefiniować albo przez ICRn, albo przez OCRnA. Najmniejsza dozwolona rozdzielczość wynosi 2 bity (ICRn lub OCRnA ustawiony na 0x0003), a maksymalną rozdzielczością jest 16 bitów (ICRn lub OCRnA ustawione na MAX). Rozdzielczość PWM w bitach liczymy z następującego wzoru:

W trybie PWM poprawnym fazowo i częstotliwościowo licznik jest zwiększany, aż jego zawartość będzie równa albo zawartości ICRn (WGMn[3:0] = 8), albo zawartości OCRnA (WGMn[3:0] = 9). W tym momencie licznik osiąga TOP i zmienia kierunek zliczania. Wartość TCNTn będzie równa TOP przez jeden cykl zegarowy timera. Poniższy rysunek przedstawia wykres czasowy dla trybu PWM poprawnego fazowo i częstotliwościowo. Wykres odnosi się do przypadku, gdy TOP definiuje rejestr OCRnA lub ICRn. Wartość TCNTn na tym wykresie została przedstawiona jako histogram dla zilustrowania dwukierunkowego zliczania. Wykres zawiera odwrócone i nieodwrócone wyjścia PWM. Mała pozioma kreska na zboczach TCNTn reprezentuje zgodność porównania pomiędzy OCRnx a TCNTn. Znacznik przerwania OCnx zostanie ustawiony przy wystąpieniu zgodności porównania.

obrazek

Znacznik przepełnienia timera/licznika (ang. Timer/Counter Overflow Flag, TOV1) jest ustawiany w tym samym cyklu zegarowym timera, w którym rejestry OCRnx są uaktualniane zawartością z bufora tymczasowego (przy BOTTOM). Gdy do definiowania TOP wykorzystywany jest albo rejestr OCRnA, albo ICRn, to znacznik OCnA lub ICFn jest ustawiany przy osiągnięciu TOP przez TCNTn.

Wtedy ten znacznik przerwania może zostać wykorzystany do generacji przerwania za każdym razem, gdy licznik osiąga wartość TOP lub BOTTOM.

Przy zmianie wartości TOP program musi zapewnić, że nowa wartość TOP jest wyższa lub równa wartości wszystkich rejestrów porównawczych. Jeśli będzie ona niższa od zawartości dowolnego z rejestrów porównawczych, to zgodność porównania nigdy nie wystąpi pomiędzy TCNTn a OCRnx.

Jak pokazuje powyższy rysunek przebieg wyjściowy jest, w przeciwieństwie do trybu poprawnego fazowo, symetryczny we wszystkich okresach. Ponieważ rejestry OCRnx są uaktualniane przy BOTTOM, długość zboczy rosnącego i opadającego będzie zawsze równa. Tworzy to symetryczne impulsy na wyjściu i dlatego jest poprawne częstotliwościowo.

Używanie rejestru ICRn do definiowania TOP działa dobrze przy stosowaniu ustalonych wartości TOP. Przez użycie ICRn rejestr OCRnA pozostaje wolny i można go wykorzystać przy generowaniu sygnału PWM na OCnA. Jednakże, jeśli podstawowa częstotliwość PWM jest aktywnie zmieniana przez modyfikowanie wartości TOP, to używanie OCRnA jako TOP jest w oczywisty sposób lepszym wyborem z powodu cechy podwójnego buforowania.

W trybie PWN poprawnym fazowo i częstotliwościowo moduły porównawcze pozwalają generować przebiegi PWM na końcówkach OCnx. Ustawienie bitów COMnx[1:0] na dwa utworzy przebieg PWM nieodwrócony, a przebieg PWM odwrócony może zostać wygenerowany przez ustawienie COMnx[1:0] na trzy. Faktyczna wartość OCnx stanie się widoczna na końcówce portu, jeśli dla tej końcówki zostanie ustawiony kierunek danych jako wyjście (DDR_OCnx). Przebieg PWM jest generowany przez ustawianie (lub zerowanie) rejestru OC1x przy zgodnościach porównań pomiędzy OCRnx a TCNTn, gdy licznik zwiększa swą zawartość, a zerowanie (lub ustawianie) rejestru OCnx przy zgodnościach porównań pomiędzy OCRnx a TCNTn, gdy licznik zmniejsza swoją zawartość. Częstotliwość PWM dla przebiegu utworzonego w trybie PWM poprawnym fazowo i częstotliwościowo można obliczyć z poniższego wzoru:

Zmienna N reprezentuje dzielnik preskalera (1, 8, 64, 256 lub 1024).

Ekstremalne wartości rejestru OCRnx reprezentują specjalne przypadki przy generacji przebiegu PWM w trybie poprawnym fazowo i częstotliwościowo. Jeśli w trybie nieodwróconym PWM OCRnx jest ustawiony na wartość równą  BOTTOM, to w wyjście będzie ciągle znajdować się w stanie niskim, a jeśli zostanie ustawiony na TOP, to wyjście  będzie ciągle w stanie wysokim. W trybie odwróconym PWM wyjście to będzie przyjmowało odwrotne wartości logiczne.

Na początek:  podrozdziału   strony 

Wykresy czasowe timera/licznika

Timer/licznik jest urządzeniem zaprojektowanym jako synchroniczne i stąd zegar timera (clkTn) jest pokazany na kolejnych obrazkach jako sygnał zegarowy uaktywniający funkcje. Obrazki zawierają informacje o momencie ustawiania znaczników przerwania oraz uaktualniania rejestru OCRnx wartością z bufora OCRnx (jedynie dla trybów wykorzystujących podwójne buforowanie). Poniższy rysunek przedstawia wykres czasowy ustawiania OCFnx:

Wykres czasowy Timera/Licznika, Ustawianie OCF1x, bez preskalera
obrazek

Kolejny rysunek przedstawia ten sam wykres czasowy, lecz z włączonym preskalerem:

Wykres czasowy Timera/Licznika, Ustawianie OCF1x, z preskalerem (fclk_I/O/8)
obrazek

Następny rysunek przedstawia sekwencję zliczania bliską TOP w różnych trybach. Gdy jest używany tryb PWM poprawny fazowo i częstotliwościowo, to rejestr OCRnx jest uaktualniany przy wartości BOTTOM. Wykresy czasowe będą takie same, lecz TOP powinno zostać zastąpione przez BOTTOM, TOP-1 przez BOTTOM+1 itd. To samo odnosi się do trybów, które ustawiają znacznik TOVn przy BOTTOM.

Wykres czasowy Timera/Licznika, bez Preskalera
obrazek

Poniższy rysunek przedstawia ten sam wykres czasowy, lecz z włączonym preskalerem.

Na początek:  podrozdziału   strony 

Opis rejestrów

TCCR1A – Timer/Counter1 Control Register A – Rejestr sterujący A timera/licznika 1

Bit 7 6 5 4 3 2 1 0  
0x2F (0x4F) COM1A1 COM1A0 COM1B1 COM1B0 COM1C1 COM1C WGM11 WGM10 TCCR1A
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

TCCR3A – Timer/Counter1 Control Register A – Rejestr sterujący A timera/licznika 1

Bit 7 6 5 4 3 2 1 0  
(0x8B) COM3A1 COM3A0 COM3B1 COM3B0 COM3C1 COM3C WGM31 WGM30 TCCR3A
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:6 – COMnA[1:0]: Compare Output Mode for Channel A – Tryb Compare Output dla Kanału A

Bity 5:4 – COMnB[1:0]: Compare Output Mode for Channel B – Tryb Compare Output dla Kanału B

Bity 3:2 – COMnC[1:0]: Compare Output Mode for Channel C – Tryb Compare Output dla Kanału C

Bity COMnA[1:0], COMnB[1:0] i COMnC[1:0] sterują zachowaniem końcówek Output Compare: odpowiednio OCnA,  OCnB i OCnC. Jeśli jeden lub oba bity COMnA[1:0] zostaną zapisane stanem 1, to wyjście OCnA przejmuje normalną funkcję portu na końcówce we/we, do której jest podłączone. Jeśli jeden lub oba bity COMnB[1:0] zostaną ustawione na 1, wyjście OCnB przejmuje końcówkę I/O podłączoną do niego. Jeśli jeden lub oba bity COMnC[1:0] zostaną ustawione na 1, wyjście OCnC przejmuje końcówkę I/O podłączoną do niego. Zwróć jednak uwagę, że bit rejestru kierunku danych (ang. Data Direction Register bit, DDR) odpowiadający końcówce OCnA, OCnB lub OCnC musi być ustawiony, aby końcówka pracowała jako wyjście.

Gdy OCnA, OCnB lub OCnC jest podłączone do końcówki, funkcja bitów COMnx[1:0] zależy od bitów WGMn[3:0]. Poniższa tabela pokazuje funkcje bitów COMnx[1:0], gdy bity WGMn[3:0] są ustawione na tryb normalny lub CTC (nie-PWM):.

Compare Output w trybach nie-PWM

COMnA1/
COMnB1/
COMnC1
COMnA0/
COMnB0/
COMnC0
Opis
0 0 Normalne działanie portu: OCnA/OCnB/OCnC odłączone
1 Zmiana stanu końcówki OCnA/OCnB/OCnC na przeciwny przy zgodności porównania
1 0 Zerowanie końcówki OCnA/OCnB/OCnC przy zgodności porównania (ustawianie wyjścia w stan niski)
1 Ustawianie końcówki OCnA/OCnB/OCnC przy zgodności porównania (ustawianie wyjścia w stan wysoki)

Kolejna tabela pokazuje funkcje bitów COMnx[1:0], gdy bity WGMn[3:0]  są ustawione na szybkie tryby PWM.

Compare Output w szybkich trybach PWM(1)

COMnA1/
COMnB1/
COMnC1
COMnA0/
COMnB0/
COMnC0
Opis
0 0 Normalne działanie portu: OCnA/OCnB/OCnC odłączone
1 WGMn3:0 = 15: Zmiana stanu logicznego OCnA na przeciwny przy zgodności porównania, końcówki OCnB/OCnC odłączone (normalna praca portów)
Dla pozostałych ustawień bitów WGMn normalna praca portów, końcówki OCnA/OCnB/OCnC odłączone.
1 0 Zerowanie końcówki OCnA/OCnB/OCnC przy zgodności porównania
Ustawianie końcówki OCnA/OCnB/OCnC przy BOTTOM (tryb nieodwrócony)
1 Ustawianie końcówki OCnA/OCnB/OCnC przy zgodności porównania
Zerowanie końcówki OCnA/OCnB/OCnC przy BOTTOM (tryb odwrócony)
Uwaga: 1. Specjalny przypadek występuje, gdy OCRnA/OCRnB/OCRnC jest równe TOP i bit COMnA1/COMnB1/COMnC1 jest ustawiony. Wtedy zgodność porównania jest ignorowana, lecz ustawianie/zerowanie jest wykonywane przy BOTTOM. Zobacz na "Szybki tryb PWM".

Kolejna tabela pokazuje funkcje bitów COMnx[1:0], gdy bity WGMn[3:0] są ustawione na tryb PWM poprawny fazowo lub poprawny fazowo i częstotliwościowo.

Compare Output w trybach PWM poprawnym fazowo oraz poprawnym fazowo i częstotliwościowo

COMnA1/
COMnB1/
COMnC1
COMnA0/
COMnB0/
COMnC0
Opis
0 0 Normalne działanie portu: końcówka OCnA/OCnB/OCnC odłączona
1 WGMn3:0 = 9 lub 11: Zmiana stanu logicznego OCnA na przeciwny przy zgodności porównania, końcówki OCnB/OCnC odłączone (normalna praca portów)
Dla pozostałych ustawień bitów WGMn normalna praca portów, końcówki OCnA/OCnB/OCnC odłączone.
1(1) 0 Zliczanie w górę: Zerowanie końcówki OCnA/OCnB/OCnC przy zgodności porównania
Zliczanie w dół: Ustawianie końcówki OCnA/OCnB/OCnC przy zgodności porównania
1 Zliczanie w górę: Ustawianie końcówki OCnA/OCnB/OCnC przy zgodności porównania
Zliczanie w dół: Zerowanie końcówki OCnA/OCnB/OCnC przy zgodności porównania
Uwaga: 1. Specjalny przypadek występuje, gdy OCRnA/OCRnB/OCRnC jest równe TOP i bit COMnA1/COMnB1/COMnC1 jest ustawiony. Zobacz na “Tryb PWM poprawny fazowo".

Bity 1, 0 – WGMn[1:0]: Waveform Generation Mode – Tryb generacji przebiegu

W połączeniu z bitami WGMn[3:2] w rejestrze TCCRnB bity te sterują sekwencją zliczania licznika, źródłem dla wartości maksymalnej (TOP) licznika oraz rodzajem przebiegu do generowania. Obsługiwane tryby pracy modułu timera/licznika to: tryb normalny (licznik), tryb zerowania timera przy zgodności porównania (CTC) oraz trzy tryby PWM. (Zobacz do rozdziału "Tryby pracy").

Tryby generacji przebiegu

Tryb WGMn3 WGMn2
(CTCn)
WGMn1
(PWMn1)
WGMn0
(PWMn0)
Tryb działania TOP Uaktualnianie
ICRnX przy
Znacznik TOV1
ustawiany przy
0 0 0 0 0 Normalny 0xFFFF Natychmiast MAX
1 0 0 0 1 PWM, poprawna faza, 8 bitów 0x00FF TOP BOTTOM
2 0 0 1 0 PWM, poprawna faza, 9 bitów 0x01FF TOP BOTTOM
3 0 0 1 1 PWM, poprawna faza, 10 bitów 0x03FF TOP BOTTOM
4 0 1 0 0 CTC (zerowanie przy zgodności) OCRnA Natychmiast MAX
5 0 1 0 1 Szybki PWM, 8 bitów 0x00FF BOTTOM TOP
6 0 1 1 0 Szybki PWM, 9 bitów 0x01FF BOTTOM TOP
7 0 1 1 1 Szybki PWM, 10 bitów 0x03FF BOTTOM TOP
8 1 0 0 0 PWM, poprawna faza i częstotliwość ICRn BOTTOM BOTTOM
9 1 0 0 1 PWM, poprawna faza i częstotliwość OCRnA BOTTOM BOTTOM
10 1 0 1 0 PWM, poprawna faza ICRn TOP BOTTOM
11 1 0 1 1 PWM, poprawna faza OCRnA TOP BOTTOM
12 1 1 0 0 CTC (zerowanie przy zgodności) ICRn Natychmiast MAX
13 1 1 0 1 Zarezerwowane
14 1 1 1 0 Szybki PWM ICRn BOTTOM TOP
15 1 1 1 1 Szybki PWM OCRnA BOTTOM TOP
Uwaga:   Nazwy bitów CTCn i PWMn[1:0] są przestarzałe. Używaj nazw WGMn[2:0]. Pomimo tych zmian funkcje oraz położenia tych bitów są kompatybilne z poprzednią wersją timera.

TCCR1B – Timer/Counter1 Control Register B – Rejestr sterujący B timera/licznika 1

Bit 7 6 5 4 3 2 1 0  
0x2E (0x4E) ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10 TCCR1B
Zapis/Odczyt Z/O Z/O O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

TCCR3B – Timer/Counter3 Control Register B – Rejestr sterujący B timera/licznika 3

Bit 7 6 5 4 3 2 1 0  
(0x8A) ICNC3 ICES3 - WGM33 WGM32 CS32 CS31 CS30 TCCR3B
Zapis/Odczyt Z/O Z/O O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 7 – ICNCn: Input Capture Noise Canceler – Redukcja szumu dla Input Capture

Ustawienie tego bitu aktywuje układ redukcji szumu dla Input Capture. Gdy układ ten jest włączony, to wejście z końcówki Input Capture (ICPn) jest filtrowane. Funkcja filtru wymaga czterech kolejnych próbek o równych wartościach na końcówce ICPn, aby wyjście uległo zmianie. Z tego powodu Input Capture jest opóźnione o 4 cykle oscylatora przy włączonej redukcji szumów.

Bit 6 – ICESn: Input Capture Edge Select – Wybór zbocza dla Input Capture

Ten bit wybiera, które ze zboczy na końcówce Input Capture (ICPn) zostanie użyte do wyzwolenia zdarzenia Input Capture. Gdy bit  ICESn zostanie zapisany stanem 0, będzie użyte zbocze opadające (ujemne), a gdy bit ICESn zostanie stanem 1, zdarzenie INPUT Capture wyzwoli zbocze rosnące (dodatnie).

Gdy Input Capture zostanie wyzwolone zgodnie z ustawieniem ICESn, to wartość licznika będzie skopiowana do rejestru Input Capture (ICRn). Zdarzenie to ustawi również znacznik Input Capture (ICFn), a to z kolei można wykorzystać do generacji przerwania Input Capture, jeśli to przerwanie zostało uaktywnione.

Gdy ICRn jest używany jako wartość TOP (zobacz na opis bitów WGMn[3:0] umiejscowionych w rejestrach TCCRnA i TCCRnB), to ICPn jest odłączone, a w konsekwencji funkcja Input Capture jest wyłączona.

Bit 5 – Zarezerwowane

Ten bit jest zarezerwowany do użycia w przyszłości. Aby zapewnić kompatybilność z przyszłymi mikrokontrolerami, należy go ustawiać na 0 przy zapisach rejestru TCCRnB.

Bity 4:3 – WGMn[3:2]: Waveform Generation Mode – Tryb generacji przebiegu

Zobacz na opis bitów WGMn[1:0] dla rejestru TCCRnA.

Bity 2:0 – CSn[2:0]: Clock Select – Wybór zegara

Trzy bity wyboru zegara ustawiają źródło zegara do użycia przez timer/licznik.

CSn2 CSn1 CSn0 Opis
0 0 0 Brak źródła zegara (Timer/Licznik zatrzymany)
0 0 1 clkI/O/1 (bez preskalera)
0 1 0 clkI/O/8 (z preskalera)
0 1 1 clkI/O/64 (z preskalera)
1 0 0 clkI/O/256 (z preskalera)
1 0 1 clkI/O/1024 (z preskalera)
1 1 0 Zewnętrzne źródło zegara na końcówce Tn. Zliczanie przy opadającym zboczu.
1 1 1 Zewnętrzne źródło zegara na końcówce Tn. Zliczanie przy narastającym zboczu.

Jeśli jako źródło zegara zostanie wybrany sygnał zewnętrzny, to zmiany poziomu na końcówce Tn będą sterowały licznikiem, nawet gdy końcówka ta została skonfigurowana jako wyjście. Ta cecha pozwala na programowe sterowanie zliczaniem.


TCCR1C – Timer/Counter1 Control Register C – Rejestr sterujący C timera/licznika 1

Bit 7 6 5 4 3 2 1 0  
(0x7A) FOC1A FOC1B FOC1C TCCR1C
Zapis/Odczyt Z Z Z O O O O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

TCCR3C – Timer/Counter3 Control Register C – Rejestr sterujący C timera/licznika 3

Bit 7 6 5 4 3 2 1 0  
(0x8C) FOC3A FOC3B FOC3C TCCR3C
Zapis/Odczyt Z Z Z O O O O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 7 – FOCnA: Force Output Compare for Channel A – Wymuszone Output Compare dla kanału A

Bit 6 – FOCnB: Force Output Compare for Channel B – Wymuszone Output Compare dla kanału B

Bit 5 – FOCnC: Force Output Compare for Channel C – Wymuszone Output Compare dla kanału C

Bity FOCnA/FOCnB/FOCnC są aktywne tylko wtedy, gdy bity WGMn3:0 określają tryb nie-PWM. Przy zapisie logicznej jedynki do bitu FOCnA/FOCnB/FOCnC natychmiastowa zgodność porównania jest wymuszana na module generacji przebiegu. Wyjście OCnA/OCnB/OCnC jest zmieniane zgodnie z ustawieniem jego bitów COMnx1:0. Zwróć uwagę, iż bity FOCnA/FOCnB/FOCnC są zaimplementowane jako stroby. Dlatego to wartość obecna w bitach COMnx1:0 określa efekt wymuszonej zgodności porównania.

Strob FOCnA/FOCnB/FOCnC nie wygeneruje żadnego przerwania, ani nie wyzeruje timera w trybie CTC przy użyciu OCRnA jako TOP.

Bity FOCnA/FOCnB/FOCnB przy odczycie zawsze dają zero.

Bit 4:0 – Zarezerwowane

Te bity są zarezerwowany do użycia w przyszłości. Aby zapewnić kompatybilność z przyszłymi mikrokontrolerami, należy je ustawiać na 0 przy zapisach rejestru TCCRnC.


TCNT1H i TCNT1L – Timer/Licznik 1

Bit 15 14 13 12 11 10 9 8  
0x2D (0x4D) TCNT1[15:8] TCNT1H
0x2C (0x4C) TCNT1[7:0] TCNT1L
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

TCNT3H i TCNT3L – Timer/Licznik 3

Bit 15 14 13 12 11 10 9 8  
(0x89) TCNT3[15:8] TCNT3H
(0x88) TCNT3[7:0] TCNT3L
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Dwie komórki we/wy timera/licznika (TCNTnH i TCNTnL, połączone razem jako TCNTn) dają bezpośredni dostęp przy zapisie i odczycie do modułu 16 bitowego timera/licznika. Aby zapewnić, że oba bajty górny i dolny są odczytywane i zapisywane jednocześnie przy dostępie mikroprocesora do tych rejestrów, dostęp jest wykonywany przy wykorzystaniu tymczasowego 8 bitowego rejestru dla górnego bajta (TEMP). Rejestr tymczasowy jest współdzielony przez wszystkie pozostałe rejestry 16-bitowe. Zobacz do rozdziału "Dostęp do rejestrów 16-bitowych".

Modyfikowanie licznika (TCNTn) w czasie jego pracy wprowadza ryzyko przegapienia zgodności porównania pomiędzy TCNTn a jednym z rejestrów OCR1x.

Zapis do rejestru TCNTn blokuje (usuwa) zgodność porównania w następnych cyklach zegara dla wszystkich modułów porównawczych.

OCR1AH i OCR1AL – Output Compare Register 1 A – Rejestr Output Compare 1 A

Bit 15 14 13 12 11 10 9 8  
0x2B (0x4A) OCR1A1[5:8] OCR1AH
0x2A (0x4A) OCR1A[7:0] OCR1AL
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

OCR1BH i OCR1BL – Output Compare Register 1 B – Rejestr Output Compare 1 B

Bit 15 14 13 12 11 10 9 8  
0x29 (0x49) OCR1B[15:8] OCR1BH
0x28 (0x48) OCR1B[7:0] OCR1BL
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

OCR1CH i OCR1CL – Output Compare Register 1 C – Rejestr Output Compare 1 C

Bit 15 14 13 12 11 10 9 8  
(0x79) OCR1C[15:8] OCR1CH
(0x78) OCR1C[7:0] OCR1CL
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

OCR3AH i OCR3AL – Output Compare Register 3 A – Rejestr Output Compare 3 A

Bit 15 14 13 12 11 10 9 8  
(0x87) OCR3A1[5:8] OCR3AH
(0x86) OCR3A[7:0] OCR3AL
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

OCR3BH i OCR3BL – Output Compare Register 3 B – Rejestr Output Compare 3 B

Bit 15 14 13 12 11 10 9 8  
(0x85) OCR3B[15:8] OCR3BH
(0x84) OCR3B[7:0] OCR3BL
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

OCR3CH i OCR3CL – Output Compare Register 3 C – Rejestr Output Compare 3 C

Bit 15 14 13 12 11 10 9 8  
(0x83) OCR3C[15:8] OCR3CH
(0x82) OCR3C[7:0] OCR3CL
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Rejestry Output Compare zawierają 16-bitową wartość, która jest ciągle porównywana z wartością licznika (TCNTn). Zgodność może zostać wykorzystana do generacji przerwania Output Compare lub do generacji przebiegu wyjściowego na końcówce OCnx.

Rejestry Output Compare mają rozmiar 16-bitów. Aby zapewnić, że oba bajty górny i dolny są odczytywane i zapisywane jednocześnie przy dostępie mikroprocesora do tych rejestrów, dostęp jest wykonywany przy wykorzystaniu tymczasowego 8 bitowego rejestru dla górnego bajtu (TEMP). Rejestr tymczasowy jest współdzielony przez wszystkie pozostałe rejestry 16-bitowe. Zobacz do rozdziału "Dostęp do rejestrów 16-bitowych".


ICR1H i ICR1L – Input Capture Register 1 – Rejestr 1 dla Input Capture

Bit 15 14 13 12 11 10 9 8  
0x27 (0x47) ICR1[15:8] ICR1H
0x26 (0x46) ICR1[7:0] ICR1L
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

ICR3H i ICR3L – Input Capture Register 3 – Rejestr 3 dla Input Capture

Bit 15 14 13 12 11 10 9 8  
(0x81) ICR3[15:8] ICR3H
(0x80) ICR3[7:0] ICR3L
Bit 7 6 5 4 3 2 1 0  
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Rejestr Input Capture jest zapisywany wartością licznika (TCNTn) za każdym razem, gdy pojawi się zdarzenie Input Capture na końcówce ICP1 (lub opcjonalnie na wyjściu z Komparatora Analogowego dla timera/licznika 1). Rejestr Input Capture może zostać wykorzystany do zdefiniowania dla licznika wartości TOP.

Rejestr Input Capture ma rozmiar 16-bitów. Aby zapewnić, że oba bajty górny i dolny są odczytywane i zapisywane jednocześnie przy dostępie mikroprocesora do tych rejestrów, dostęp jest wykonywany przy wykorzystaniu tymczasowego 8 bitowego rejestru dla górnego bajta (TEMP). Rejestr tymczasowy jest współdzielony przez wszystkie pozostałe rejestry 16-bitowe. Zobacz do rozdziału "Dostęp do rejestrów 16-bitowych".


TIMSK – Timer/Counter Interrupt Mask Register – Rejestr masek przerwań od timerów/liczników

Bit 7 6 5 4 3 2 1 0  
0x37 (0x57) OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 TIMSK1
Zapis/Odczyt O O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  
Uwaga: 1. Rejestr ten zawiera bity sterujące przerwaniami dla kilku timerów/liczników, lecz rozdział ten opisuje tylko bity dla timera/licznika 1. Pozostałe bity są opisane w rozdziałach odpowiadających im timerów.

Bit 5 – TICIE1: Timer/Counter1, Input Capture Interrupt Enable – Uaktywnienie przerwania od Input Capture dla timera/licznika 1

Gdy ten bit zostanie ustawiony na 1 i ustawiony jest znacznik I w rejestrze stanu SREG (przerwania globalnie włączone), zostają uaktywnione przerwania od Input Capture w timerze/liczniku 1. Gdy zostanie ustawiony znacznik ICF1 w rejestrze TIFR, mikroprocesor wykona skok do procedury obsługi tego przerwania poprzez odpowiedni wektor przerwania (zobacz do rozdziału "Przerwania").

Bit 4 – OCIE1A: Timer/Counter1, Output Compare A Match Interrupt Enable – Włączenie przerwań od Output Compare A w timerze/liczniku 1

Gdy ten bit zostanie zapisany stanem 1 i znacznik I w rejestrze stanu SREG jest ustawiony (przerwania włączone globalnie), to zostaje włączone przerwanie od Output Compare A dla timera/licznika 1. Odpowiadający temu przerwaniu wektor (Zobacz do rozdziału "Przerwania") jest wykonywany, gdy zostanie ustawiony znacznik OCF1A, zlokalizowany w rejestrze TIFR.

Bit 3 – OCIE1B: Timer/Counter1, Output Compare B Match Interrupt Enable – Włączenie przerwań od Output Compare B w timerze/liczniku 1

Gdy ten bit zostanie zapisany stanem 1 i znacznik I w rejestrze stanu SREG jest ustawiony (przerwania włączone globalnie), to zostaje włączone przerwanie od Output Compare B dla timera/licznika 1. Odpowiadający temu przerwaniu wektor (Zobacz do rozdziału "Przerwania") jest wykonywany, gdy zostanie ustawiony znacznik OCF1B, zlokalizowany w rejestrze TIFR.

Bit 2 – TOIE1: Timer/Counter1, Overflow Interrupt Enable – Włączenie przerwań od przepełnienia timera/licznika 1

Gdy ten bit zostanie zapisany stanem 1 i znacznik I w rejestrze stanu SREG jest ustawiony (przerwania włączone globalnie), to zostaje włączone przerwanie od przepełnienia timera/licznika 1. Odpowiadający temu przerwaniu wektor (Zobacz do rozdziału "Przerwania") jest wykonywany, gdy zostanie ustawiony znacznik TOV1, zlokalizowany w rejestrze TIFR.


ETIMSK – Extended Timer/Counter Interrupt Mask Register – dodatkowy rejestr masek przerwań od timerów/liczników

Bit 7 6 5 4 3 2 1 0  
(0x7D) TICIE3 OCIE3A OCIE3B TOIE3 OCIE3C OCIE1C ETIMSK
Zapis/Odczyt O O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  
Uwaga: 1. Rejestr ten jest niedostępny w trybie kompatybilności z ATmega103.

Bity 7:6 – Zarezerwowane

Te bity są zarezerwowany do użycia w przyszłości. Aby zapewnić kompatybilność z przyszłymi mikrokontrolerami, należy je ustawiać na 0 przy zapisach rejestru ETIMSK.

Bit 5 – TICIE3: Timer/Counter3, Input Capture Interrupt Enable – Uaktywnienie przerwania od Input Capture dla timera/licznika 3

Gdy ten bit zostanie ustawiony na 1 i ustawiony jest znacznik I w rejestrze stanu SREG (przerwania globalnie włączone), zostają uaktywnione przerwania od Input Capture w timerze/liczniku 3. Gdy zostanie ustawiony znacznik ICF3 w rejestrze ETIFR, mikroprocesor wykona skok do procedury obsługi tego przerwania poprzez odpowiedni wektor przerwania (zobacz do rozdziału "Przerwania").

Bit 4 – OCIE3A: Timer/Counter3, Output Compare A Match Interrupt Enable – Włączenie przerwań od Output Compare A w timerze/liczniku 3

Gdy ten bit zostanie zapisany stanem 1 i znacznik I w rejestrze stanu SREG jest ustawiony (przerwania włączone globalnie), to zostaje włączone przerwanie od Output Compare A dla timera/licznika 3. Odpowiadający temu przerwaniu wektor (Zobacz do rozdziału "Przerwania") jest wykonywany, gdy zostanie ustawiony znacznik OCF3A, zlokalizowany w rejestrze ETIFR.

Bit 3 – OCIE3B: Timer/Counter3, Output Compare B Match Interrupt Enable – Włączenie przerwań od Output Compare B w timerze/liczniku 3

Gdy ten bit zostanie zapisany stanem 1 i znacznik I w rejestrze stanu SREG jest ustawiony (przerwania włączone globalnie), to zostaje włączone przerwanie od Output Compare B dla timera/licznika 3. Odpowiadający temu przerwaniu wektor (Zobacz do rozdziału "Przerwania") jest wykonywany, gdy zostanie ustawiony znacznik OCF3B, zlokalizowany w rejestrze ETIFR.

Bit 2 – TOIE3: Timer/Counter3, Overflow Interrupt Enable – Włączenie przerwań od przepełnienia timera/licznika 3

Gdy ten bit zostanie zapisany stanem 1 i znacznik I w rejestrze stanu SREG jest ustawiony (przerwania włączone globalnie), to zostaje włączone przerwanie od przepełnienia timera/licznika 1. Odpowiadający temu przerwaniu wektor (Zobacz do rozdziału "Przerwania") jest wykonywany, gdy zostanie ustawiony znacznik TOV3, zlokalizowany w rejestrze ETIFR.

Bit 1 – OCIE3C: Timer/Counter3, Output Compare C Match Interrupt Enable – Włączenie przerwań od Output Compare C w timerze/liczniku 3

Gdy ten bit zostanie zapisany stanem 1 i znacznik I w rejestrze stanu SREG jest ustawiony (przerwania włączone globalnie), to zostaje włączone przerwanie od Output Compare C dla timera/licznika 3. Odpowiadający temu przerwaniu wektor (Zobacz do rozdziału "Przerwania") jest wykonywany, gdy zostanie ustawiony znacznik OCF3C, zlokalizowany w rejestrze ETIFR.

Bit 0 – OCIE1C: Timer/Counter1, Output Compare C Match Interrupt Enable – Włączenie przerwań od Output Compare C w timerze/liczniku 1

Gdy ten bit zostanie zapisany stanem 1 i znacznik I w rejestrze stanu SREG jest ustawiony (przerwania włączone globalnie), to zostaje włączone przerwanie od Output Compare C dla timera/licznika 1. Odpowiadający temu przerwaniu wektor (Zobacz do rozdziału "Przerwania") jest wykonywany, gdy zostanie ustawiony znacznik OCF1C, zlokalizowany w rejestrze ETIFR.


TIFR – Timer/Counter Interrupt Flag Register – Rejestr znaczników przerwań dla timerów/liczników

Bit 7 6 5 4 3 2 1 0  
0x36 (0x56) OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0 TIFR
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bit 5 – ICF1: Timer/Counter1, Input Capture Flag – Znacznik Input Capture

Ten znacznik jest ustawiany, gdy pojawia się zdarzenie Input Capture na końcówce ICP1. Gdy bity WGM1[3:0] ustawiają rejestr Input Capture (ICR1) jako wartość TOP dla licznika, to znacznik ICF1 jest ustawiany, gdy licznik osiąga wartość TOP.

Bit ICF1 jest automatycznie zerowany, gdy zostanie wykonany wektor przerwania Input Capture Interrupt. Alternatywnie znacznik ICF1 można wyzerować przez zapis logicznej jedynki na pozycji jego bitu.

Bit 4 – OCF1A: Timer/Counter1, Output Compare A Match Flag – Znacznik zgodności porównania dla Output Compare A w timerze/liczniku 1

Ten znacznik jest ustawiany w cyklu zegarowym timera po osiągnięciu przez licznik (TCNT1) wartości zgodnej z zawartością rejestru Output Compare A (OCR1A).

Zwróć uwagę, iż strob wymuszonej zgodności porównania FOC1A nie ustawi znacznika OCF1A.

OCF1A jest automatycznie zerowany po uruchomieniu wektora dla przerwania od Output Compare A. Alternatywnie znacznik OCF1A można wyzerować przez zapis logicznej jedynki na pozycji jego bitu.

Bit 3 – OCF1B: Timer/Counter1, Output Compare B Match Flag – Znacznik zgodności porównania dla Output Compare B w timerze/liczniku 1

Ten znacznik jest ustawiany w cyklu zegarowym timera po osiągnięciu przez licznik (TCNT1) wartości zgodnej z zawartością rejestru Output Compare B (OCR1B).

Zwróć uwagę, iż strob wymuszonej zgodności porównania FOC1B nie ustawi znacznika OCF1B.

OCF1B jest automatycznie zerowany po uruchomieniu wektora dla przerwania od Output Compare B. Alternatywnie znacznik OCF0B można wyzerować przez zapis logicznej jedynki na pozycji jego bitu.

Bit 2 – TOV1: Timer/Counter1, Overflow Flag – Znacznik przepełnienia timera/licznika 1

Ustawianie tego znacznika jest uzależnione od ustawienia bitów WGM1[3:0]. W trybach normalnym i CTC znacznik TOV1 jest ustawiany, gdy licznik przepełnia się (osiąga swoja wartość maksymalną, po czym zeruje się i rozpoczyna zliczanie od nowa). Zobacz na ustawienia bitów WGM1[3:0], gdzie opisano zachowanie się znacznika  TOV1 w różnych trybach.

TOV1 jest automatycznie zerowany po uruchomieniu wektora dla przerwania od przepełnienia timera/licznika 0. Alternatywnie znacznik TOV1 można wyzerować przez zapis logicznej jedynki na pozycji jego bitu.


ETIFR – Extended Timer/Counter Interrupt Flag Register – dodatkowy rejestr znaczników przerwań dla timerów/liczników

Bit 7 6 5 4 3 2 1 0  
(0x7C) ICF3 OCF3A OCF3B TOV3 OCF3C OCF1C ETIFR
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:6 – Zarezerwowane

Te bity są zarezerwowany do użycia w przyszłości. Aby zapewnić kompatybilność z przyszłymi mikrokontrolerami, należy je ustawiać na 0 przy zapisach rejestru ETIFR.

Bit 5 – ICF3: Timer/Counter3, Input Capture Flag – Znacznik Input Capture timera/licznika 3

Ten znacznik jest ustawiany, gdy pojawia się zdarzenie Input Capture na końcówce ICP3. Gdy bity WGM3[3:0] ustawiają rejestr Input Capture (ICR3) jako wartość TOP dla licznika, to znacznik ICF3 jest ustawiany, gdy licznik osiąga wartość TOP.

Bit ICF3 jest automatycznie zerowany, gdy zostanie wykonany wektor przerwania Input Capture Interrupt 3. Alternatywnie znacznik ICF3 można wyzerować przez zapis logicznej jedynki na pozycji jego bitu.

Bit 4 – OCF3A: Timer/Counter3, Output Compare A Match Flag – Znacznik zgodności porównania dla Output Compare A w timerze/liczniku 3

Ten znacznik jest ustawiany w cyklu zegarowym timera po osiągnięciu przez licznik (TCNT3) wartości zgodnej z zawartością rejestru Output Compare A (OCR3A).

Zwróć uwagę, iż strob wymuszonej zgodności porównania FOC3A nie ustawi znacznika OCF3A.

OCF3A jest automatycznie zerowany po uruchomieniu wektora dla przerwania od Output Compare A. Alternatywnie znacznik OCF3A można wyzerować przez zapis logicznej jedynki na pozycji jego bitu.

Bit 3 – OCF3B: Timer/Counter3, Output Compare B Match Flag – Znacznik zgodności porównania dla Output Compare B w timerze/liczniku 3

Ten znacznik jest ustawiany w cyklu zegarowym timera po osiągnięciu przez licznik (TCNT3) wartości zgodnej z zawartością rejestru Output Compare B (OCR3B).

Zwróć uwagę, iż strob wymuszonej zgodności porównania FOC3B nie ustawi znacznika OCF3B.

OCF3B jest automatycznie zerowany po uruchomieniu wektora dla przerwania od Output Compare B. Alternatywnie znacznik OCF3B można wyzerować przez zapis logicznej jedynki na pozycji jego bitu.

Bit 2 – TOV3: Timer/Counter3, Overflow Flag – Znacznik przepełnienia timera/licznika 3

Ustawianie tego znacznika jest uzależnione od ustawienia bitów WGM3[3:0]. W trybach normalnym i CTC znacznik TOV3 jest ustawiany, gdy licznik przepełnia się (osiąga swoja wartość maksymalną, po czym zeruje się i rozpoczyna zliczanie od nowa). Zobacz na ustawienia bitów WGM3[3:0], gdzie opisano zachowanie się znacznika  TOV3 w różnych trybach.

TOV3 jest automatycznie zerowany po uruchomieniu wektora dla przerwania od przepełnienia timera/licznika 0. Alternatywnie znacznik TOV3 można wyzerować przez zapis logicznej jedynki na pozycji jego bitu.

Bit 1 – OCF3C: Timer/Counter3, Output Compare C Match Flag – Znacznik zgodności porównania dla Output Compare C w timerze/liczniku 3

Ten znacznik jest ustawiany w cyklu zegarowym timera po osiągnięciu przez licznik (TCNT3) wartości zgodnej z zawartością rejestru Output Compare C (OCR3C).

Zwróć uwagę, iż strob wymuszonej zgodności porównania FOC3C nie ustawi znacznika OCF3C.

OCF3C jest automatycznie zerowany po uruchomieniu wektora dla przerwania od Output Compare C. Alternatywnie znacznik OCF3C można wyzerować przez zapis logicznej jedynki na pozycji jego bitu.

Bit 0 – OCF1C: Timer/Counter1, Output Compare C Match Flag – Znacznik zgodności porównania dla Output Compare C w timerze/liczniku 1

Ten znacznik jest ustawiany w cyklu zegarowym timera po osiągnięciu przez licznik (TCNT1) wartości zgodnej z zawartością rejestru Output Compare C (OCR1C).

Zwróć uwagę, iż strob wymuszonej zgodności porównania FOC1C nie ustawi znacznika OCF1C.

OCF1C jest automatycznie zerowany po uruchomieniu wektora dla przerwania od Output Compare C. Alternatywnie znacznik OCF1C można wyzerować przez zapis logicznej jedynki na pozycji jego bitu.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.