Forum: Mikrocontroller und Digitale Elektronik Input Capturing


von Marian (Gast)


Lesenswert?

Hallo Forum,

ich habe eine Frage zum Input Capturing des Atmega32.
Ich will nur wissen ob ich seine Funktion richtig verstanden habe.

Ich konfiguriere mir den 16 bit Timer so das ich meine gewünschte
Frequenz erzeugen lasse. Wenn ich dann noch das Input Capturing per
TICIE1 in TIMSK aktiviere kann ich Signale am PIN PD6 erkennen. Je nach
Einstellung im TCCR1B kann ich auf steigende oder fallende Flanken
reagieren und auch den Noise Canceler einschalten. Wenn dann je nach
Konfiguration eine steigende Flanke an diesem PIN anliegt, wird der
aktuelle Zählerstand des Timers in das Input Capture Register1 kopiert
und dann kann ich diesen in der ISR des Capture Interrupts auslesen.
Das heisst doch, dass ich mir damit die Zeiten zwischen 2 steigenden
Flanken ausgeben lassen kann oder?

Gibt es sonst noch etwas, was man bei der Nutzung dieser Funktion
beachten muss?

Gruß,
Marian

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>Das heisst doch, dass ich mir damit die Zeiten zwischen 2 steigenden
>Flanken ausgeben lassen kann oder?

Ja, genau.

>Ich konfiguriere mir den 16 bit Timer so das ich meine gewünschte
>Frequenz erzeugen lasse

Was meinst du damit?
Es erleichtert den Umgang mit ICP sehr, wenn man den Timer "einfach so
durchlaufen" lässt. Du kannst natürlich per Prescaler die Frequenz
heruntersetzen.
Wenn du innerhalb der ISR die Flankenrichtung umschaltest, kannst du
auch Impulsdauern und nciht nur Periodendauern messen.

von Marian (Gast)


Lesenswert?

>Ich konfiguriere mir den 16 bit Timer so das ich meine gewünschte
>Frequenz erzeugen lasse

Was meinst du damit?

Damit meine ich, dass ich mir den Timer so zurecht lege das ich auch
einen Wert auslesen kann, mit dem ich dann vernünftig weiterrechne.
Sozusagen, dass er in ms-Takt hochzählt. Was bringt es mir denn sonst,
den aktuellen Timerstand abzufragen wenn ich nicht weiß, welche Zeit
vergangen ist? Verstehst du was ich meine?

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>Verstehst du was ich meine?

ja. Das hängt mit dem Vorteiler und der Taktfrequenz zusammen.
Du kannst aber auch einfach den Mikrocontroller etwas rechnen
lassen...
Die Werte sind ja sowieso 16Bits lang. Dann subtrahiert man den älteren
vom neueren Wert und hat die Anzahl der Impulse zwischen den beiden
Ereignissen (das weisst du aber schon...).

>ms-Takt
ist aber verdammt langsam.

Was soll das denn am Ende werden?

von Rolf Magnus (Gast)


Lesenswert?

> Was bringt es mir denn sonst, den aktuellen Timerstand abzufragen
> wenn ich nicht weiß, welche Zeit vergangen ist?

Warum solltest du das nicht wissen? Der µC läuft mit einem bestimmten
Takt, und der geht über den Prescaler an den Timer. Damit weißt du ganz
genau, mit welchem Takt dieser läuft.

von Marian (Gast)


Lesenswert?

Ja sicher weiß ich das aber so müsste ich es ja noch explizit
umrechnen.
Wenn ich nun einen Timer mit nem Takt von 1ms(1000Hz) nehme, dann
brauche ich ja nur die 2 Zahlen zu subtrahieren und habe somit gleich
die verstrichene Zeit zwischen 2 Flanken. Wollte mir es halt nur recht
einfach machen.

Das soll mal ein Pulszähler werden. Ich bekomme von einem Pulssensor
immer einen Highpegel, wenn er einen Puls gemessen hat. Und ich finde,
da reicht eine Auflösung von 1 ms. D.h. ich zähle halt die Highpegel in
einer Bestimmten Zeit und kann somit dann den Puls pro Minute ausgeben.

Und mit dem Input Capture möchte ich halt die Zeit zwischen den
Impulsen messen und diese dann mitteln.

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.