mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ICP_Pulsdauermessung - Timerkonfig?


Autor: Lukas Zopf (Firma: HTBLuVA - Salzburg) (lzopf)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe als Matura Projekt die Aufgabe den Füllstand eines Bier 
Braukessels zu messen. Die Messschaltung funktioniert bereits und ich 
bekomme den Füllstand des Kessels als porportionale Frequenz.

Nun zu meinem Problem:

Ich habe mich bereits gründlich in die Pulsdauermessung über den ICP-Pin 
eingelesen.

Mein System: ATmega32 @ 16MHz

Der längste Pulsdauer bekomme ich wenn der Kessel voll ist --> Tp = 5ms
Die kürzeste Puldauer bekomme ich wenn der Kessel leer ist --> Tp = 
0,4ms

Ich verwende für die Messung der Pulsdauer den ICP - Pin und takte den 
Timer mit der fcpu / 2 (habe ich gelesen das das für extrerne Signale 
möglich sein sollte).

Meine frage ist nun da ich anschließend die Pulsdauer (Timerdifferenz) 
via PWM ausgeben muss. Reicht die Pulspause bzw. die Dauer um alles 
abzuarbeiten bzw. bekomme ich dann probleme dass der µP eine Flanke 
übersieht usw???


Weil Zeit ist ja nicht viel wenn der Kessel leer ist habe ich ja nur 
Tp=0,4ms zeit um die ganze ICP- INterrupt routine durchzugehen.

Falls das alles nicht realisierbar ist bzw. falls jemanden auffällt das 
etwas nicht funktionieren kann. Ich freue mich über jeden Hinweis.

MFG

Luks Zopf


PS:

Im Anhang habe ich meine Berechnung hinzugefügt hoffe sie hilft etwas 
weiter.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der ISR wirst du (hoffentlich) nicht viel mehr machen, als den 
Zählerstand und die Anzahl der Overflows abzuholen und ein Flag zu 
setzen. Die eigentlich Auswertung passiert dann im Hauptprogramm. Dabei 
geht dann keine Flanke verloren.

Wenn ich deine Notizen richtig verstehe, bekommst du ein Rechtecksignal 
mit einer Frequenz zwischen 100Hz und 1300Hz. Wenn du den ICP auf die 
steigende Flanke triggerst, kommt diese alle 10ms bis alle 0,77ms. Die 
Pulslänge ist dabei egal, die enthält ja keine zusätzliche Information, 
und braucht auch nicht ausgewertet zu werden.
Deine 8MHz Timertakt lösen das auf 125ns genau auf, das sollte doch mehr 
als ausreichend sein. Ein paar Mhz weniger tätens da wohl auch noch.

Oliver

Autor: Lukas Zopf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hy,

vielen Dank Oliver. Stimmt also d.h ich löse den ICP nur bei steigender 
Flanke aus und bestimme nicht die Pulsdauer sondern eigentlich die 
Periodendauer somit müsste ich noch mehr Zeit für die PWM und weitere 
Funktionen haben.

MFG

Lukas

Autor: avion23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lukas,
noch zwei andere Ansätze die ich gerne benutze:
- Am Anfang und Ende der ISR  PORTB ^= (1 << PB0); o.ä. schreiben. Dann 
mit dem Oszi schauen wie lange der Bereich wirklich ist. Trägt nur zwei 
Zyklen dazu. Den Sprung muss man leider noch beachten, kann man aber 
abschätzen.
- Mit editor dein *.lss öffnen. Zur ISR springen. Zählen wieviele Zeilen 
der Code für deine ISR einnimmt. Mit Zwei und den der Zeit/Cycle 
multiplizieren, fertig.

Je nach Situation geht das eine oder das andere schneller.

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.