Na stronie 74 dokumentacji do ATMega32 masz rysunek 31, który wyjaśnia zasadę działania trybu CTC.
Pierwsze ząbki to czas zliczany przez licznik TCNTn (w naszym przypadku: TCNT0). OCn to wyjście Output Compare Match timera "n" (w naszym przypadku to OC0 czyli pin PB3, czyli 4 nóżka mikrokontrolera w obudowie PDIP).
I teraz zaczyna się cała magia
W trybie CTC wartość licznika TCNT0 porównywana jest z wpisaną przez Ciebie wartością rejestru OCR0. Gdy wartość licznika TCNT0 == OCR0 to licznik TCNT0 jest zerowany, a wyjście OC0 zmienia stan na przeciwny.
I teraz, gdy wartość wpisana w rejestr jest "duża" to czas do doliczenia się do tej wartości jest "długi" - vide: Period 1 oraz 2 na wspominanym rysunku. W momencie, gdy do rejestru OCR0 wpiszesz mniejszą wartość, to czas potrzebny do zliczenia impulsów jest "krótszy". Jak pamiętasz, przy spełnieniu warunku TCNT0 == OCR0 wyjście OC0 zmienia stan. A im częściej zmienia stan to wyższą częstotliwość ma sygnał generowany na wyjściu OC0.
Do wyliczenia częstotliwości tego sygnału służy wzór umieszczony poniżej na tej samej stronie. Te wszystkie dzielenia i tym podobne operacje matematyczne to jedynie przekształcenia tego wzoru (znany jest nam preskaler, częstotliwość jaką traktujemy mikrokontroler, częstotliwość, którą chcemy uzyskać i jedyną niewiadomą jest wartość rejestru OCR0).
-- edit: dodałem obrazki.