elektrykapradnietyka napisał(a):
elektrykapradnietyka napisał(a):
Użyłbym trybu timera 2 - CTC, gdzie wartość TOP jest ustawiana na zawartość rejestru OCR0.
W jednym z ćwiczeń z książki p. Mirek użył trybu FAST PWM gdzie jasność diody była wysterowana przez rejestr OCR0 (wtedy projekt zadziałał mi normalnie tak jak należy, nie rozumiem jak, bo zgodnie z tym co napisałeś to nie miało prawa zadziałać, byc może o czymś nie wiem)
elektrykapradnietyka napisał(a):
Niemniej jednak używając tej techniki nie uzyskasz na wyjściu częstotliwości zegara - maksymalną częstotliwością będzie częstotliwość zegara podzielona na pół (czyli 4 MHz).
\
Czy jesteś mi w stanie powiedzieć dlaczego tak się dzieje??
Chciałbym to zrozumieć skąd się biorą te ograniczenia.
Jeśli chodzi o jasność diody, to jak najbardziej wszystko działa jak należy. W trybie FAST PWM masz stałą częstotliwość na wyjściu (jak zauważyłeś ok. 32kHz, dla ATmegi32 tylko taki tryb FAST PWM jest dostępny) i rejestrem OCR0 zmieniasz współczynnik wypełnienia sygnału prostokątnego (powiedzmy dla uproszczenia od 0% do 100%).
Tryb FAST PWM masz ładnie rozrysowany na stronie 75 (obrazek 32)
dokumentacji.
Ale to jest inny problem niż ten który jak rozumiem chcesz rozwiązać.
W
datasheecie ATmega32 na stronie 80tej masz rozpisane w tabelce 38 wszyzstkie rodzaje trybów działania Timera 0 (i Timera 1) w ATmedze32.
Tryb 3 - FAST PWM - liczy od 0x00 do 0xFF (255), więc wyjściowa częstotliwość masz definiowaną właściwie przez prescaller.
Tryb 2 - CTC - liczy od 0x00 do wartości w OCR0 - czyli możesz ustawić ten rejestr tak, żeby wyzwalanie (compare match) Timera odbywało się co cykl procesora.
Na stronie 81 masz następną tabelkę nr. 39 - rejetrów COM01/COM00. Jednym z trybów jest przełączanie wyjścia OC0 na wyzwoleniu Timera (Toggle OC0 on compare match)
Biorąc pod uwagę, że co jeden cykl zegara wyzwalany jest timer, a w każdym takim przypadku zmieniana jest wartość wyjściowa z 1 na 0 lub 0 na 1 - to dostajemy podzielenie częstotliwości przez 2 - bo np. w pierwszym wyzwoleniu zmieni się z 0 na 1, w wyzwoleniu drugim z 1 na 0, w wyzwoleniu trzecim znów z 0 na 1 itd (wyzwolenia wykonują się po pełnym cyklu zegara, czyli po pełnym przejściu z niskiego na wysoki i z wysokiego na niski)