Hallo,
könnte das Problem auftauchen, weil das Setzen von OCR1B nicht mit dem Timerstand (TCNT1) abgestimmt ist?
Die while Schleife, in der das Setzen von OCR1B stattfindet läuft unabhängig vom Timer1 bzw umgekehrt. Die beiden sind nicht synchronisiert.
Nun könnte es passieren, daß gerade ein CompB Interrupt aufgetreten ist, OCRB erhöht wird und aufgrund des TCNT1 Standes und Weiterlaufen des Timers das Interrupt Flag sofort neu gesetzt wird. (Interrupt tritt nicht auf, da disabled)
Im folgenden Compare1A Interrupt wird Compare1B enabled und aufgrund des stehenden Compare1B Flags tritt sofort der Compare1B Interrupt auf und löscht das gerade von Compare1A gesetzte PB2 wieder. (Der Peak?)
Das könnte solange gehen bis die while Schleife und Timer auseinandergedriftet sind, daß das Compare1B Flag nicht mehr zum falschen Zeitpunkt gesetzt wird.
Versuch: In der Compare1A ISR vorsorglich das Compare1B Interruptflag löschen.
(Fals ich Müll erzählt habe, schiebe ich es der Einfachheit halber auf fehlende C-Kenntnisse)
Gruß
Searcher
Lesezeichen