Forum: Mikrocontroller und Digitale Elektronik welchen Wert liefert ICP1 zurück?


von µC (Gast)


Lesenswert?

Hi,

wie der Titel schon aussagt möchte ich gerne wissen was genau denn vom 
Input Capture Pin eines Atmegas zurückgeliefert wird? Mal angenommen das 
man den auf "steigende Flanke" konfiguriert. Würde er bei Pin High nur 
eine 1 zurückliefern oder auch sowas wie einen Timestamp?


Gruß
µC

von Karl H. (kbuchegg)


Lesenswert?

µC schrieb:
> Hi,
>
> wie der Titel schon aussagt möchte ich gerne wissen was genau denn vom
> Input Capture Pin eines Atmegas zurückgeliefert wird?

Vom Input Capture Pin wird überhaupt nichts 'geliefert'. Das ist ein 
Eingangspin so wie jeder andere auch, d.h. du kannst den Zustand des 
Pins ganz normal über das PINx Register auslesen und kriegst eine 1 oder 
eine 0, je nachdem, wie der Pegel am Pin ist.

Aber das ist ja nicht seine eigentliche Funktion. Seine eigentliche 
Funktion ist ja, dass er den Vorgang des Kopierens des aktuellen 
Zählerwerts des Timers in des ICRx Register auslöst. Und den kann man 
sich dann natürlich aus diesem Register holen.

: Bearbeitet durch User
von µC (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Aber das ist ja nicht seine eigentliche Funktion. Seine eigentliche
> Funktion ist ja, dass er den Vorgang des Kopierens des aktuellen
> Zählerwerts des Timers in des ICRx Register auslöst. Und den kann man
> sich dann natürlich aus diesem Register holen.

Hallo KHB,

ok super! Dann kann man sich ja praktisch einen "Timestamp" daraus 
bauen.
Andererseits kann man das natürlich auch mit jedem anderen Pin machen 
auf dem ein Interrupt liegt. Sobald der ausgelöst wird lasse ich den 
Wert von meinem Timer kopieren / ausgeben. Was ich per Software mache 
würde er dann per Hardware machen.


Gruß
µC

von H.Joachim S. (crazyhorse)


Lesenswert?

Wenn du es per Software machst, hast du einen Fehler drin. Läuft nur die 
eine ISR, ist es gut, da der Fehler immer gleich ist (und damit 
korrigiert werden kann oder auch gar keine Rolle spielt, weil du evtl. 
nur Differenzen messen willst.
Läuft aber im Moment des externen Signals eine andere ISR, gibts 
unvorhersagbare Fehler. Oft spielen die keine Rolle, wenn halbwegs gut 
programmiert (kurze Interruptlaufzeiten). Manchmal muss es aber doch so 
genau wie möglich sein und dafür ist der ICP da. Es spielt keine Rolle, 
wann du das Ergebnis abholst, du bekommst den richtigen Wert.

von Ulrich (Gast)


Lesenswert?

Im Unterschied zu einem Interrupt gibt es bei der ICP keine 
(insbesondere keine variable) Verzögerung zwischen Flanke und auslesen 
des Timers. Wenn der Timer also mit dem Systemtakt läuft ist das 
Ergebnis mit ICP bis aus 1 Takt genau - mit der Softwarelösung hat man 
eine Unsicherheit bis etwa 5 Takten plus ggf. noch Zeiten in denen 
Interrupts abgeschaltet sind.

von µC (Gast)


Lesenswert?

Danke nochmal für die ausführlichen Hinweise!



Gruß
µC

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.