Witzigerweise zeigte ein Versuch ohne Preload, also durchlaufend, eine Frequenz von 39,7349Hz
Damit kannst Du auf jeden Fall sicher sein, daß der Takt des PICs tatsächlich 41,667MHz ist und der Timer mit der vorab berechneten Rate inkrementiert.
Starte ich den Timer falsch? Habe ich einen Fehler im Berechnen des Preload-Wertes?
Nein. Mit dem Simulator ist der Fehler wesentlich geringer (ca. 1,1µs mehr als die gewünschten 1ms bei deaktivierten Compilieroptimierungen und ca. 0,9µs mehr mit allen Optimierungen). Einen Fehler in dieser Größenordnung hätte ich auch erwartet (die Gründe dafür sind schon erwähnt worden).
Blöde Frage, aber anders kann ich mir eigentlich diese signifikante Abweichung nicht erklären: Könnte der um eine Zehnerpotenz größere beobachtete Fehler aus einem Meß- oder Ablesefehler resultieren?
Poste außerdem bitte mal ein vollständig kompilierbares Beispiel (ich mußte einige Sachen hinzufügen, um den Code zu testen). Sollte weiterer Code vorhanden sein, der für den Test nicht nötig ist, entferne ihn (auch für Deine Tests).
Möglicherweise baut der C18 aber auch das Workaround für den Timer1 Bug ein (eigentlich nur für asynchonen Betrieb), der knapp 31µs dauert
Ich mache nicht viel mit dem C18, aber nach meinem Kenntnisstand berücksichtigt der C18 überhaupt keine Errata. Auf die schnelle habe ich auch keine Compileroptionen gefunden, welche ein Deaktivieren eventueller zeit- oder speicheraufwendiger Workarounds ermöglicht (diese Option müßte gegeben sein, falls der Fehler irgendwann behoben wird

).
Viele Grüße
Bernd