Pulsdauermessung mit Atmega 32

Gast #1780995
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
Gast #1781038
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...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.