Ich arbeite mit zwei Interrupts. Ein externer, der an der Lichtschranke anliegt und einem internen zum messen der Zeit.

Der externe Interrupt wird bei jeder steigenden Flanke erzeugt. Wenn ich die Events zähle, also die Welle von Hand bewege wird korrekt gezählt.

Die Lichtschranke erzeugt also einen Interrupt. Dort zähle ich die Impulse. In einem weiteren Interrupt der alle 0,33536 Sekunden aufgerufen wird lese ich die gezählten Impulse aus und errechne mir die Drehzahl pro Minute.
Die Lichtschranke liefert mir High-Low-Signale, die sind OK (sehe ich ja am Oszi). Sie ist für bis zu 5000 U/Min ausgelegt.

Es muss am Code liegen. Irgendwas ist an meinen Timern faul.