www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pulsdauermessung mit Atmega 32


Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.