Moin, wie kann ich mir die Timer Clock Source vorstellen? Ist diese vom Controller-Takt abhängig oder besitzt der Timer einen eigenen Takt?
Das kommt drauf an. Jeder Timer besitzt eine Taktquelle, auf deren Flanken er zählt. Wie er zählt (aufwärts, abwärts) und wie die Taktquelle beschaffen ist, hängt davon ab, was für einen Timer man hat. Bei Timer/Zähler-Komponenten in Mikrocontrollern (gehe mal davon aus, dass Deine Frage sich darauf bezieht, auch wenn Du Details verschweigst) sind i.d.R. unterschiedliche Taktquellen auswählbar. Welche das sind steht im Datenblatt des betreffenden Controllers. Timer sind nix anderes als Zähler, die mit einer festen Frequenz getaktet werden, also i.d.R. mit dem Prozessortakt oder einem durch einen Vorteiler (Prescaler) erzeugten Teil davon. Es sind Zähler, die feste Zeiteinheiten zählen. In der Betriebsart "Ereigniszähler" kann ein Timer durch ein externes (asynchrones und frequenzvariables) Taktsignal getaktet werden.
>Ist diese vom >Controller-Takt abhängig nicht unbedingt. >oder besitzt der Timer einen eigenen Takt? Jain... Den Takt kann der Timer entweder über einen bestimmten Pin von aussen zugeführt bekommen oder über verschiedene Vorteiler aus dem Systemtakt ableiten. Wenn du verrätst um welchen Controller es sich handelt, kann man die auch entsprechende Passagen im Datenblatt empfehlen...
Atmega8 mit 14,745600MHz Ok, also wenn ich den Timer mit einem Vorteiler betreibe, ist der Takt des Timers vom Prozessortakt abhängig. Bei einer Frquenz von 1475600 Hz dauert ein Takt also 68ns. Wenn ich jetzt einen Vorteiler von 8 verwende, braucht ein 8Bit Timer für einen Überlauf also ungefähr 138µs. (8 * 255) / 14745600 = 138,346µs Soweit Richtig?
> Soweit Richtig?
Fast. Der Timer macht 256 Zählvorgänge von einem
Überlauf zum nächsten. Er zählt ja von 0 bis 255
und das sind nun mal 256 Zählvorgänge :-)
(8 * 256) / 14745600 = 138,888µs
Aber ansonsten ist dein Gedankengang bis hierher
richtig.
Ja stimmt, die 0 muss ja auch noch mit ;-) Ok, wenn ich jetzt den Overflow Interrupt des Timers benutze, sollte dieser ja theoretisch alle 138,888µs ausgelöst werden. Theoretisch, das heißt wenn ich keinen anderen Interrupt benutze. Kommt jetzt z.B. ein anderer Interrupt hinzu, und dieser wird gerade beim Overflow ausgeführt, verschiebt sich doch der Overflow Interrupt um ein gewisse Zeit. Oder lieg ich da falsch?
>Oder lieg ich da falsch?
Ja, der Interrupt tritt immer zum gleichen Zeitpunkt auf. Nur dessen
Bearbeitung kann sich nach hinten verschieben, wenn die "zeitgleich"
auftretende ISR zu lang ist...In der Kürze liegt die Würze - das gilt
für ISR, sofern mehr als nur eine benutzt wird.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.