marek2012r napisał(a):
Czy jeżeli korzystam z TCCR1B to w tym rejestrze porównania nie powinno się wpisać OCR1B zamiast OCR1A ?
Nie.
Popełniasz błąd prawie wszystkich początkujących wg których rejestr TCCR1A jest od kanału OCR1A a rejestr TCCR1B - od kanału OCR1B. Timer1 w Atmega8 ma tak dużo trybów pracy, że bity konfiguracyjne nie zmieściły by się w ośmiu bitach jednego rejestru. Aby je pomieścić potrzeba kolejnych ośmiu bitów w kolejnym rejestrze. I dlatego Timer1 ma dwa rejestry konfiguracyjne - TCCR1A i TCCR1B.
Co do trybu CTC.
![Obrazek](https://obrazkiforum.atnel.pl/thumb/204/9c240489bdcd5e61af8b5a92d2176c70.jpg)
W tabeli widać, że aby włączyć tryb CTC należy ustawić bit WGM12.
A ten bit leży w rejestrze TCCR1B
![Obrazek](https://obrazkiforum.atnel.pl/thumb/204/9ed9b017e1b0662d0c01d28c75abf199.png)
W tabeli widać również, że rejestrem porównania jest rejestr OCR1A. I do tego rejestru należy wpisać liczbę, do której będzie liczył Timer1.
Aby Timer zaczął pracować należy jeszcze ustawić m.in. preskaler. Bity preskalera znajdują się w TCCR1B.
Podsumowując. Podstawowy tryb CTC korzysta z rejestru porównania OCR1A. Ale żeby go włączyć należy ustawić bity z rejestru TCCR1B. Bo w tym rejestrze bity te umieścił producent.
Przeanalizuj dobrze podrozdział "16-bit Timer/Counter Register Description" z noty pdf. A zwłaszcza to jakie bity znajdują się w rejestrach konfiguracyjnych.
------------------------ [ Dodano po: 6 minutach ]W trybie CTC można również korzystać z rejestru OCR1B i z przerwania od porównania licznika TCNT1 z tym rejestrem. Ale wartość wpisana do OCR1B musi być mniejsza od wartości w OCR1A.
Licznik TCNT1, po zrównaniu się z OCR1A, zostaje wyzerowany i zaczyna zliczać od zera do wartości w OCR1A. Jeśli w OCR1A będzie wartość np. 1000 to TCNT1 do liczy do tej wartości i ani jednego impulsu dalej. Więc jeśli w OCR1B byłaby wartość np. 1005 to licznik nigdy by do niej nie doliczył.