Forum: Mikrocontroller und Digitale Elektronik interrupts und genaue Timer


von markus (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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

von markus (Gast)


Lesenswert?

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

von Peter R. (pnu)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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
Noch kein Account? Hier anmelden.