Hallo Leute, ich spiel hier grad mit nem Tiny13 rum. Als Umgebung verwende ich das AVR-Studio4 und den GCC. Ich programmier somit den Tiny13 in C. Ich hab jetzt mal einen Timerinterrupt eingerichtet und lass innerhalb dessen einen Portpin toggeln. Eingestellt ist der internen Oszillator mit 4,8MHz und der ClockDivider steht auf 8. Somit läuft der µC ja mit 600kHZ. Wenn ich jetzt nen Timer mit dieser Frequenz laufen lasse dann bekomme ich alle 426.7µsec nen OVFIRQ. Soweit ja alles in Ordnung. Wenn ich jetzt aber im TimerIRQ den Timerwert vorbelege und somit den Überlauf zeitlich vor verschiebe dann passt die Messung überhaupt nicht mehr zusammen. Als Beispiel belege ich den Timer mit 250. Somit sind ja nur 6 Takte für nen Überlauf notwndig. Was eine OVFIRQ Zeit von ca. 10µsec ergeben sollte. Wenn ich den Port aber am Oszi messe dann bin ich bei 138µsec. Testweise hab ich auch den Clockdivider mal deaktiviert. Damit läuft der µC deutlich schneller. Auch hier kann ich eine Abweichung feststellen. Allerdings liegt diese bei ca. 50%. Ich kann mir grad dieses Verhalten nicht erklären. Hatte jemand von euch bei diesem µC ähnliches Verhalten? Gruss und Danke, Georg.
Georg X. schrieb: > Als Beispiel belege ich den Timer mit 250. Somit sind ja nur 6 Takte für > nen Überlauf notwndig. Was eine OVFIRQ Zeit von ca. 10µsec ergeben > sollte. Wenn ich den Port aber am Oszi messe dann bin ich bei 138µsec. Du gehst davon aus, daß das Beschreiben des Timer-Registers exakt in dem Moment passiert, in dem die Interrupt-Bedinung auftritt. Tatsächlich liegt da aber einiges an Zeit dazwischen. Der Prozessor muß beim Auftreten eines Interrupts erstmal den aktuell ausgeführten Befehl fertigmachen. Dann sichert er den Program Counter auf den Stack. Als nächstes springt er den Interrupt-Vektor an, wo wieder ein Sprungbefehl steht, der dann die eigentliche ISR anspringt. Die fängt dann erstmal an, das Statusregister und die verwendeten Standard-Register zu sichern. Dann geht es mal so langsam an die Ausführung deines Timer-reset-Befehls. 6 Takte sind aber sowieso bei weitem zu wenig für die Interrupt-Abarbeitung. Für eine kurze ISR kannst du eher so das 5- bis 10-fache davon rechnen. Dazu kommt noch das Hauptprogramm, das ja evtl. auch noch Zeit haben möchte.
Nabend Leute, danke für den Hinweis. Daran hab ich jetzt irgendwie nicht mehr gedacht. Dass kommt davon wenn man mit großen, schnellgetackteten µC verwöhnt ist. Gruß, Georg.
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.