Heh, na początek widzę błąd banalny.
Otóż OCR1A wyznacza TOP dla licznika, stąd dla OCR1B to też jest wartość szczytowa, str. 107 manuala:
Cytat: When changing the TOP value the program must ensure that the new TOP value is higher or
equal to the value of all of the Compare Registers. If the TOP value is lower than any of the
Compare Registers, a compare match will never occur between the TCNT1 and the OCR1x.
Twój soft tego nie robi, nie sprawdza czy OCR1B jest mniejsze niż OCR1A - to pierwsze źródło błędów.
Może użyj trybu 8 ze strony 112 manuala i częstość zmieniaj ICR1. Choć to i tak nie zwalnia cię ze sprawdzania czy któryś z rejestrów OCR nie jest większy niż TOP.
Powodzenia!