mikrocontroller.net

Forum: Compiler & IDEs Abweichungen bei einer Frequenzmessung -> Ursachen?


Autor: Jens K. (jens_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Mal ne Frage: Ich messe ja eine Frequenz über den ICP.
Jetzt ist mir aufgefallen, das ab ca. 5kHz hin und wieder ein Fehler von 
ca. 1% gemacht wird (ca. bei jeder 3. Messung)  und je höher die 
Frequenz wird, umso größer wird die Abweichung.

Ich verwende einen externen 8MHz Quarz, von daher sollte der Timer 
(läuft ohne Prescaler) schon mal ziehmlich genau sein.

Welche anderen Ursachen könnte das haben?

MFG und Danke

Autor: groc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen anderen interrupt ? Werden die interrupts gesperrt ?

g

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hans Dampf

>Mal ne Frage: Ich messe ja eine Frequenz über den ICP.
>Jetzt ist mir aufgefallen, das ab ca. 5kHz hin und wieder ein Fehler von
>ca. 1% gemacht wird (ca. bei jeder 3. Messung)  und je höher die
>Frequenz wird, umso größer wird die Abweichung.

Rechnen wir mal. 5 kHz = 200 uS Periodendauer, etspricht 1600 Takten bei 
8 Mhz. Hmm, der systematische Fehler beträgt hier 1/1600, also knapp ein 
halbes Promille. Wobei das für einen Freqeunzmesser schon recht schlecht 
ist. Hier solltest du über mehrere Perioden messen, damit wird der 
Fehler geringer.

>Ich verwende einen externen 8MHz Quarz, von daher sollte der Timer
>(läuft ohne Prescaler) schon mal ziehmlich genau sein.

Ja. Ca.+/- 100ppm.

>Welche anderen Ursachen könnte das haben?

Schhlechte Software. Im Prinzip musst du garantiereren, dass kein 
anderer Interrupt länger als 200us läuft, denn dann verschluckst du eine 
Messung (Wobei dann aber die dopplete Zeit gemessen werden sollte??)

@groc

>Einen anderen interrupt ? Werden die interrupts gesperrt ?

Das ist nicht notwendig (bei ordentlicher Programmierung).

MfG
Falk

Autor: Jens K. (jens_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Es laufen lediglich die Interrupts zur Auswertung des Frequenzsignals.
Und erst wenn die Frequenz ausgewertet ist, wird im Hauptprogramm wieder 
etwas gemacht (nämlich die Frequenz auf einem Display ausgegeben.
Somit ist gwährleistet, dass während der Frequenzmessung nichts stört.

Während der Displayausgabe, werden die Interrupts abgeschalten -> Das 
hat den Grund, dass während der Ausgabe sowieso keine Frequenz gemessen 
werden würde, allerdings bei aktiven Interrupts die Displayausgabe sehr 
langsam währe, da der Überlauf ISR sehr oft aktiviert werden würde.

Werd jetzt mal testen über 4 Periodendauern zu messen.
Schon ma Danke.

MFG

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei der Code von dir (aus dem anderen Thread) IMHO die Interrupts 
NICHT sperren kann, weil die Bitoperation falsch ausgeführt wird:
   TIMSK &= (1<<TICIE1) | (1<<TOIE1);      
   // Interrupts für Timer deaktvieren, da sonst Displayausgabe bei 
   // sehr hohen Frequenzen extrem verlangsamt (->Überlauf sehr oft voll)

wenn überhaupt, müsstest du meiner Meinung nach schreiben
   TIMSK &= ~((1<<TICIE1) | (1<<TOIE1));      
   // Interrupts für Timer deaktvieren, da sonst Displayausgabe bei 
   // sehr hohen Frequenzen extrem verlangsamt (->Überlauf sehr oft voll)

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hans Dampf

>Es laufen lediglich die Interrupts zur Auswertung des Frequenzsignals.

Welche interupts sind das denn (Mehrzahl)? Zur Periodendauermessung 
brauchst du nur ICP.

>werden würde, allerdings bei aktiven Interrupts die Displayausgabe sehr
>langsam währe, da der Überlauf ISR sehr oft aktiviert werden würde.

Naja, sehr langsam ist relativ. Ich glaube kaum dass man das direkt 
merkt ob die Zeichenausgabe 40us oder 100us braucht. Ein komplettes LCD 
mit 4x16 Zeichen braucht gerade mal 2,5ms für einen kompletten Refresh, 
wenn den nun 4 ms braucht merkt das niemand.

MFG
Falk

Autor: Jens K. (jens_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Es ist einmal der ISR(TIMER1_OVF_vect) und ISR(TIMER1_CAPT_vect) aktiv.
Jetzt war es so, dass bei hohen Frequenzen der TIMER1_CAPT_vect sehr 
häufig aktiv ist -> und das schreiben auf das Diplay wird immerkurz 
unterbrochen(zumindest hab ich mir den Effekt so erklärt).
Daher die Idee mit dem Interrupts ausschalten.

MFG und Danke

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hans Dampf

>Jetzt war es so, dass bei hohen Frequenzen der TIMER1_CAPT_vect sehr
>häufig aktiv ist -> und das schreiben auf das Diplay wird immerkurz
>unterbrochen(zumindest hab ich mir den Effekt so erklärt).

Wenn man das sehen kann dann tippe ich auf einen Programmierfehler.

MfG
Falk

Autor: Jens K. (jens_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Die Frequenzmessnung funktioniert so wie die von Holger(der sitzt 2 
Stockwerke unterhalb):
Beitrag "Am Input Capture Pin (ICP) Frequenz messen"

Und da trat eben dieses Problem auf bei hohen Freuqenzen.
Das Funktioniert ja mitterlweile wie es soll.

Hab jetzt nen Fehler von ca. 1-2 Promille drin.
Wobei es mich stutzig macht, dass sich der Wert hin und wieder eben um 
die 1-2 Promille ändert, obwohl an der Frequenz nichts verändert wird. 
Also quasi ein "delta" das um den eigentlichen Wert schwingt.
Evtl sind es Störeinflüsse durch das Netzteil / Monitor oder der 
Frequenzgenerator schwankt ein klein wenig (wobei ich mir letzteres 
nicht vorstellen kann).Jetzt muss ich wohl mal auf die geätzte Platine 
warten und mal sehen wie sich das ganze dann verhält wenn es in ein 
gehäuse verbaut ist.

Danke!

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.