Zitat Zitat von Sauerbruch
Wenn ich aber einen Vorgabewert von 254 gebe , errechne ich 500 khz mess aber nur ca 4 Khz.
Der Knackpunkt ist der, dass mit dem Überlaufen des Timers die ISR bei weitem nicht sofort erreicht wird. Der Controller muss eine Menge an internen Registern "retten", bevor er sein Hauptprogramm verlässt und in die ISR geht. Wie for_ro und ich bereits gestern geschrieben haben, dauert es alleine schon 62 (!!) Taktzyklen, bis die ISR ausgeführt wird. Und weil diese Register nach dem Abarbeiten der ISR ale wieder zurückgeholt werden müssen, vergehen weitere 62 Taktzyklen, bevor über eine neue ISR überhaupt nur nachgedacht werden kann. Selbst wenn in der ISR (wie bei Deinem Code) fast nichts drinsteht, dauert das reine "Vorbereiten, Abarbeiten und Nacharbeiten" der ISR schon etwa 125 Taktzyklen! Die ISR kann deshalb also maximal 8000 mal pro Sekunde ausgeführt werden, was einer maximalen Frequenz von 4kHz entspricht.

Wenn Du den Timer auf 254 vorlädst, wird zwar tatsächlich 2 Takte später der Interrupt ausgelöst. Das heißt aber nicht, dass bereits 2 Taktzyklen später der nächste Interrupt erfolgen kann - weil´s eben mindestens mal 125 Zyklen dauert, bis die ISR einschließlich aller "Hausaufgaben" erledigt ist. Und vorher kann´s keine neue ISR geben...

Ist das ganze jetzt etwas klarer?

Ok . jetzt hab ich's verstanden. Danke für die sehr aufschlussreiche Erklärung.

Gruß Nase