Mateo napisał(a):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W ten sposób zmieniasz stan pinu na przeciwny po każdym odliczeniu zadanej wartości, więc okres przebiegu będzie dwukrotnie dłuższy, niż okres zliczania, stąd dwukrotnie niższa częstotliwość.
Druga sprawa - częstotliwość wyjściową w trybie CTC oblicza się według wzoru:
f = F_CPU / ( 2 * N * (OCR0+1) )gdzie:
- F_CPU to częstotliwość taktowania mikrokontrolera
- N to wartość preskalera
Od tej swoje skalkulowanej wartości 156 musisz odjąć 1, a uzyskasz częstotliwość bardziej zbliżoną do połowy częstotliwości, której oczekiwałeś.
Trzecia sprawa - lepiej użyć sprzętowego generowania ustawiając odpowiednio bity COM01:COM00, niż zmieniać stan pinu w przerwaniu.
Mateo napisał(a):
No i jeszcze przy okazji jak najlepiej płynnie regulować taka częstotliwość ??
Płynnie się nie da z założenia. Mało tego zależność częstotliwości od wartości wprowadzonej do rejestru OCR0 jest nieliniowa. W celu uzyskania częstotliwości bardziej zbliżonych do Twoich oczekiwań użyj timera o większej rozdzielczości, czyli 16-bitowego.
EDIT:
Widzę, że kolega
JarekB mnie wyprzedził
Mój post może jednak zostawię, bo zawiera nieco dokładniejsze wyjaśnienie..