Hallo Freunde Ich stehe hier gerade ein wenig auf dem Schlauch... und zwar geht es um Interrupts. Ich habe mir folgende Frage gestellt: Wenn man etwas sehr zeitgenaues machen möchte, zB. einen genauen Timer, so verwendet man ja in der Regel einen Quarz und zählt, bis ein Interrupt ausgelöst wird. So weit so gut....aber... Während die Interruptroutine ausgeführt wird, schwingt der Quarz ja weiter, und während die Routine ausgeführt wird ist der Hauptprogrammfluss unterbrochen, folglich werden diese Schwingungen nicht gezählt...richtig? Auch wenn man in der Routine einfach eine Variable hochzählt ist ja nicht wirklich viel gewonnen, denn man muss diese Variable ja dann auch noch weiterverarbeiten... Ihr merkts, ich bin verwirrt. Danke fürs Entwirren markus
@ markus (Gast) >Wenn man etwas sehr zeitgenaues machen möchte, zB. einen genauen Timer, >so verwendet man ja in der Regel einen Quarz und zählt, bis ein >Interrupt ausgelöst wird. "Man" zählt nicht, man läßt zählen, nämlich den Timer. >Während die Interruptroutine ausgeführt wird, schwingt der Quarz ja >weiter, Hoffentlich ;-) > und während die Routine ausgeführt wird ist der >Hauptprogrammfluss unterbrochen, Ja. >folglich werden diese Schwingungen >nicht gezählt...richtig? Falsch. Wie kommst du darauf? Der Timer ist ein unabhängiges Stück Hardware, das PARALLEL zu deiner CPU, welche das Programm abarbeitet, läuft. Egal was die macht. Siehe Interrupt. >Auch wenn man in der Routine einfach eine Variable hochzählt ist ja >nicht wirklich viel gewonnen, Aber sicher, sonst würde man es ja so nicht machen. Das Gegenteil deiner Annahme ist richtig. Der Timer ist deshalb so gut, eben WEIL er parallel zur CPU zählt. Egal was diese macht, alle yxz Takt erfolgt ein Interrupt, eagl was passiert. Und wenn die CPU die nicht verpennt, was im Normalfall nicht passiert, hast du eine quasi perfekte Zeitbasis. >Ihr merkts, ich bin verwirrt. Geringfügig . . . MFG Falk
Hallo Falk Vielen Dank für deine Antwort. >>folglich werden diese Schwingungen >>nicht gezählt...richtig? >Falsch. Wie kommst du darauf?Der Timer ist ein unabhängiges Stück >Hardware, das PARALLEL zu deiner CPU, welche das Programm abarbeitet, >läuft. Wie ich darauf komme? Hm... ich habe mir das halt immer so vorgestellt. Mir war nicht bewusst, dass der Timer ein unabhängiges Teil ist. Aber so ist meine Frage geklärt. Danke noch mal für das Entwirren. tschau und Gruss Markus
Der Zähler zählt unabhängig von der Arbeit der CPU. Wenn man im Reload-Verfahren zählen lässt kann man eine Teilung der Taktfrequenz bis auf einen Takt genau ereichen und das Overflow-Flag wird Zählertaktsynchron gesetzt. In bestimmten Betriebsarten kann man dann auch einen Ausgangsimpuls direkt aus dem overflow-flag erzeugen. Dann ist fast kein Jitter relativ zum Zählertakt vorhanden. Will man den Zähler aber durch eine externen Takt arbeiten lassen, bekommt man einen Jitter zwischen Eingangssignal und Zählertakt: Da das Eingangssignal den Zähler nicht direkt betätigt, sondern durch Abtastung des Eingangs per Kontrollertakt, entsteht etwa plus/minus eine halbe Kontrollertaktperiode an Verschiebung. Noch schlimmer wirds dann beim INT-Verfahren. Nach dem Overflow-flag dauerte es einige Befehlstakte, bis die Int-Routine beginnt. - je nach Stelle im Programm verschieden. Der Jitter relativ zum overflow-flag beträgt dann einige Takte. Bei Zählschleifen wird die Dauer der Impulse zwar stimmen, aber jeder Interrupt stört dann die Impulszeiten erheblich.
@ Peter R. (pnu) Glaubst du wirklich, dass deine Erklärung zur ENTwirrung des OP beträgt?
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.