Forum: Mikrocontroller und Digitale Elektronik Frequenzmessung ATmega8


von unbekannt (Gast)


Lesenswert?

Guten Tag.

Habe bereits im Forum gesucht und auch viel gefunden, aber leider nichts 
was mich weiterbringt.

Mein Problem:

Ich möchte messen:

Frequenz:            10Hz - 400Hz
Signalform:          Rechteck oder Sinus (eher Sinus)
Spitze-Spitze:       5V
Genauigkeit:         0,05Hz
Messintervall:       0,1sek - 0,5sek (fix, am besten 0,1 max. 0,5)
AVR tackt:           4MHz
externe Beschaltung: nach Möglichkeit nicht.


Das beste was mir bisher eingefallen ist, ist das Signal durch eine PLL 
mit 20x zu schicken und dann über eine Zeit von 0,5sek die Interrupts am 
einem Pin zu zählen. Interrupt bei Flankenwechsel.

Gibt es eine einfachere, bessere, schnellere, genauere Möglichkeit?

von unbekannt (Gast)


Lesenswert?

Info: Die Genauigkeit bezieht sich auf die 10 - 400Hz .. was bei x20 
dann nurnoch ein genauigkeit von 1Hz bringt beim zählen beider Flanken 
und messung über 0,5sek.

von Peter D. (peda)


Lesenswert?

Einfach Periodendauer messen und dann in Frequenz umrechnen.

400Hz / 0,05Hz = 8000
Das läßt sich noch mit einfachem float genügend genau rechnen.


Peter

von Helfer (Gast)


Lesenswert?

1) +-0.05 Hz bei 400 Hz Messwert sind 0.125 o/oo (Promille) bzw. 125 
ppm.

Da stellt sich schon die Frage "Wie genau ist eigentlich deine 
Referenztaktquelle?" also z.B. der 4 MHz Quarz => 
Beitrag "Quarzgenauigkeit"

2) Bei den niedrigen Frequenzen würde ich statt dem Verfahren "Wieviele 
Impulse innerhalb der Torzeit?" das Verfahren "Wie lange dauert eine 
(Halb-)Periode?" verwenden und die Frequenz über f = 1/t berechnen.

von unbekannt (Gast)


Lesenswert?

Der Quarz ist genau (Per Geeichtem Frequenzmesser 10sec Messung genau 
eingestellt und im geheizten Gehäuse ^^)

Das Problem ist das ich wenn ich bei einer Messung von 10Hz einen Timer 
bis 50.000 (16Bit Zähler) zählen lassen kann so zählt er bei 400Hz 
nurnoch bis 1.250, was bei einer änderung um 1Zählerstellung bereits 
knappe das 6fache der angestrebten Tolleranz ist (soweit ich das gestern 
ausgerechnet und vernichtet habe)

von unbekannt (Gast)


Lesenswert?

Weitere Info: Ich arbeite bisher nur mit Assembler

von Peter D. (peda)


Lesenswert?

unbekannt schrieb:
> Das Problem ist das ich wenn ich bei einer Messung von 10Hz einen Timer
> bis 50.000 (16Bit Zähler) zählen lassen kann so zählt er bei 400Hz
> nurnoch bis 1.250, was bei einer änderung um 1Zählerstellung bereits
> knappe das 6fache der angestrebten Tolleranz ist (soweit ich das gestern
> ausgerechnet und vernichtet habe)

Dieses Problem läßt sich ganz einfach lösen, indem Du den Vorteiler 
rausnimmst und die vollen 4MHz zählst, dann hast Du bei 400Hz immer noch 
10.000 Counts.
Zusätzlich kann man noch soviele Perioden zählen, bis 0,1s rum sind 
(1..40).


Peter

von Helfer (Gast)


Lesenswert?

> Das Problem ist das ich wenn ich bei einer Messung von 10Hz einen Timer
> bis 50.000 (16Bit Zähler) zählen lassen kann so zählt er bei 400Hz
> nurnoch bis 1.250,

Kann ich nicht nachvollziehen.

Bei 4 MHz kann der Timer in der Torzeit 0.1s bis 400000 zählen. Bei 
einem 16-Bit Timer heisst das 6 per Overflow-Interrupt gezählte 16-Bit 
Overflows plus ein Restzählerstand von 6784 im Timerzähler.

von Helfer (Gast)


Lesenswert?

4 MHz, Vorteiler 1 => 4.000.000 Takte/s

400 Hz Signal => 4.000.000 / 400 = 1000 Takte/s => +- 1 Takt ist 1 o/oo 
Fehler, d.h. größer als angestrebte 0.05/400 = 0,125 o/oo
Bei einer Messzeit von 1/400s = 0,0025s = 2,5 ms!

Die Messzeit muss mindestens um den Faktor 1/0.125 = 8 verlängert 
werden: 2,5ms * 8 = 20 ms. Deine minimale Messzeit von 0,1s = 100 ms hat 
zusätzlich einen weiteren Faktor 5 drin. Das sollte passen.

von Helfer (Gast)


Lesenswert?

Quatsch!!!
4000000 / 400 ist und bleibt natürlich 10000 und keine 1000.
DESWEGEN stürzen Satelliten ab!

von unbekannt (Gast)


Lesenswert?

Sehe ich das richtig das ich hier widerrum massig Platz für die 
Berechnungen brauche?

1111010000100100000000/1001110001000000=1100100                    100Hz

b.z.w.

1111010000100100000000/(110*1111111111111111+1101010000000)=1010   10Hz


Systemtackt / (Overflows * 65536 + Zählerstand)

Ggf. noch +1 oder 2 pro Overflow ...

Oder gibt es da ne einfachere Rechnung?

von Peter D. (peda)


Lesenswert?

unbekannt schrieb:
> Sehe ich das richtig das ich hier widerrum massig Platz für die
> Berechnungen brauche?

Was meinst Du mit "massig"?
Eine Divisionsroutine 32Bit kostet einmalig 62 Byte.
Das sind lächerliche 0,8% des ATmega8.


unbekannt schrieb:
> 1111010000100100000000/(110*1111111111111111+1101010000000)=1010   10Hz

Das kann doch kein Schwein lesen.
Warum nimmst Du nicht einfach die Dezimalschreibweise?


Peter

von Helfer (Gast)


Lesenswert?

Diesen Betrag hast du gesehen?
Beitrag "Frequenzzähler 1Hz - 40MHz"

von unbekannt (Gast)


Lesenswert?

>Das kann doch kein Schwein lesen.
>Warum nimmst Du nicht einfach die Dezimalschreibweise?

Deswegen habe ich ja nochmal:
Systemtackt / (Overflows * 65536 + Zählerstand)
drunter geschrieben ^^.


Ja aber ziemlich früh abgebrochen, da es gleich schön mit C losging, was 
ich aber "noch" nicht kann.
Soweit ich ich das mitbekommen habe arbeitet der mit einer Umschaltung 
zwischen den beiden Zählvarianten.

von unbekannt (Gast)


Lesenswert?

Grad mal so ein wenig auf papier aufgeschrieben .. wird auf jeden Fall 
interssant ^^.

von Sven W. (Firma: basement industries) (dj8nw)


Lesenswert?

Mir brennts in den Augen!
Ohne jetzt zu nörgeln, aber wenn ich bei Google "Tackt" eingebe, kommt 
als erstes die Meldung:
Meinten Sie: takt

...

von unbekannt (Gast)


Lesenswert?

Wie gut für mich das dies hier nicht Google ist ^^.

von Guckel (Gast)


Lesenswert?

unbekannt schrieb:
> Wie gut für mich das dies hier nicht Google ist ^^.

Meinten Sie: dass

von unbekannt (Gast)


Lesenswert?

Sven W. schrieb:
> Ohne jetzt zu nörgeln, aber wenn ich bei Google "Tackt" eingebe, kommt
> als erstes die Meldung:
> Meinten Sie: takt

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.