Forum: Mikrocontroller und Digitale Elektronik Pulsdauermessung mit Atmega 32


von Lukas (Gast)


Lesenswert?

Hallo,

Folgendes Probelm ich sollte den Füllstand eines Behälters über die 
Kapazität bestimmen. Messungen zufolge ändert sich die Kapaziät um 
1nf/Liter.

Ich möchte nun den Kondensator mit Gleichstrom laden und an den 
Komparatoreingang des Atmega 32 anschließen. Meiner meinung nach müsste 
ich dann bei einer Bestimmten Spannung am Komparatoreingang einen 
Capture Flag auslösen und eine Interruproutine ausführen.

Meine 1. Frage nun ich verstehe nicht ganz wie das mit dem Capture Flag 
gemeint ist. Bzw. wie kann ich die verschieden große Pulsdauer (je nach 
Füllstand wird ja der Komaprator früher oder später ausgelöst) messen 
bzw. in einen sinnvollen wert wandeln.

Soviel ich gelesen habe löst das Caputure Flag ein Interrupt aus und 
muss ich dann in der Interruptroutine einen Timer starten der so lange 
zählt bis der Puls aus ist. Wie kann ich anschließend den Timer 
weiterverarbeiten?

Hoffe ihr versteht so ungefähr was ich meine.

MFG

Lukas

von STK500-Besitzer (Gast)


Lesenswert?

>Meine 1. Frage nun ich verstehe nicht ganz wie das mit dem Capture Flag
>gemeint ist. Bzw. wie kann ich die verschieden große Pulsdauer (je nach
>Füllstand wird ja der Komaprator früher oder später ausgelöst) messen
>bzw. in einen sinnvollen wert wandeln.

Das InputCapture-Interrupt speichert den Wert eines (laufenden) Timers 
in einem Register ab.
Wenn man diesen Wert bei einer steigenden und einer fallenden Flanke 
speichert, kann man die Dauer zwischen den beiden Flanken messen.
Beispiele dafür gibt es hier im Forum zu Hauf.


>Soviel ich gelesen habe löst das Caputure Flag ein Interrupt aus und
>muss ich dann in der Interruptroutine einen Timer starten der so lange
>zählt bis der Puls aus ist. Wie kann ich anschließend den Timer
>weiterverarbeiten?

Da hast du dich verlesen.
Der Timer wird als erstes gestartet.
Wenn der Interrupt auftritt, wird der aktuelle Zählerstand im ICR 
gesichert.
Den kann man dann in der InterruptServiceRoutine weiterverarbeiten.
Die Differenz der beiden Werte stellt die Anzahl der Timer-Takte 
zwischen den beiden Ereignisse dar. Um auf eine Zeit zu kommen, ist es 
nötig, die Timer-Taktfrequenz zu wissen...

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.