Bei der Messung über die Periodenlänge muss man bei höheren Frequenzen natürlich mehr als eine Periode messen. Man misst also die Zeit für den Start, das Ende und die Zahl der Perioden dazwischen. Die Messung der Zeiten ist in aller Regel genauer als der Zufällige Start und das Zufällige Ende einer fest vorgebenen Torzeit. Mein Zähler funktioniert, soweit ganz gut - bis etwa 300 kHz geht es ohne Vorteiler, darüber wird einfach ein Vorteiler (:256) dazugeschaltet - bei der Methode über die Zeitmessung gibt der Vorteiler fast keinen zusätzlichen Fehler, sondern einfach nur eine Erweiterung des Messbereichs auf dann etwa 50 MHz (Grenze der Triggerschaltung). Allerdings ist die Software auch ganz in ASM geschrieben und auf Geschwindigkeit optimiert (z.B. reservierte Register für den Interrupt) - für die Frequenzmessung wäre das nicht so wichtig, aber für andere Messungen wie PWM. Die Berücksichtigung von Überläufen funktioniert, ist aber gar nicht so einfach - einen entsprechender Beispielcode in C ist im RN-Wissen unter Timer.

Wie viel die Umstellung auf die einfache Zeitmessung (Start, Periodenzahl + Stop) bringt kann man noch relativ einfach abschätzen, weil man da den Vorteil gut abschätzen kann. Bei z.B. 1 s Messzeit (würde ich mal aus den wenigen Daten oben schätzen) kann man mit rund 1 Hz weniger an Fehler rechnen - einfach weil der Quantisierungsfehler der Zählung durch den viel kleinen der Zeitmessung ersetzt wird. Ein passender Test wäre eine Messung um zu sehen wie viel der Sensor selber bzw. das Hintergrundlicht rauscht (z.B. 20 Werte messen bei nur Hintergrundlicht). Ich würde eher vermuten das da der Quatisierungsfehler noch nicht das Problem ist. Etwas anderes wird es ggf. wenn man die Messzeit kürzer (z.B. 0,1 s oder ggf. noch weniger) wählt um besser Schwankungen im Hintergrundlicht zu kompensieren. Wie weit sich eine kürzere Einzelmessung lohnt könnte man testen indem man mit eher kurzer Messzeit (z.B. 0,1 - 0,5 s) relativ viele Werte rein mit dem Hintergrundlicht aufnimmt und dann per FFT das Spektrum anschaut. Wenn man da ein stärkeres 1/f Rauschen hat, was ich durchaus für wahrscheinlich halte, wäre ein kürzere Zeit für die Einzelmessungen schon angebracht. Dann könnte sich ggf auch der Umstieg auf die Zeitmessung lohnen.

Anders als ich zuerst dachte bringt die Messung aller Flanken hier wohl keinen weiteren Vorteil - denn als primäre, unabhängige Größen kann man die einzelnen Periodendauern sehen. Die Summe der Zeiten ist damit schon der richtige, optimale Weg und die Zeiten dazwischen helfen einem hier also nicht weiter gegen Rauschen vom Sensor. Die zusätzlichen Flanken helfen halt nur gegen Fehler der Triggerschaltung und für noch mehr theoretische Auflösung.

Das es mit viel Hintergrundlicht schlecher wird, lässt sich übrigens nicht vermeiden. Je mehr Licht auf den Sensor fällt, desto mehr Quatisierungsrauschen durch die Lichtquantelung hat man. Bei Photodioden kommt man durchaus schon mal an diese Grenze.

Bei den Schwankungen im Hintergrundlicht hätte man ggf. noch eine Chance, wenn man parallel 2 Sensoren auswerte, die bei verschiedenen Wellenlängen arbeiten. So könnte man ggf. den Hintergrund gleichzeitig, nur halt bei einer anderen Wellenlänge messen. Wie gut das geht, hängt auch davon ab wie genau die Sensoren den gleichen Bereich aufnehmen.