freqeunzzähler

Gast #34957
Lesenswert?

hallo

ich möchte mit einem ds89c420 einen frequenzzähler realisieren.
nun habe ich mir zwei möglichkeiten überlegt:
1. während einer festen zeit von 1s die anliegenden rechteck
   pulse zählen. das gäbe mir dann direkt die frequenz
2. den internen 16bit timer starten durch eine possitive
   flanke des rechteck. den timer stoppen durch die nächste
   possitive flanke des rechtecksignals.der timer wert        ergibt mir 
wiederum die frequenz.

ich möchte gerne frequenzen bis ca.25Mhz messen. mir ist klar das ich 
bei einer frequenz von 25Mhz einen vorteiler gebrauchen muss.

ich wollte nur einmal fragen ob jemand von euch schon einmal so etwas 
programiert hat, und wenn ja, welche variante würded ihr mir empfehlen?

weiss jemand vieleicht eine gute seite oder hat ein bsp. wie er das 
programiert hat?
(das ganze will ich in c-programieren)

besten dank
tobias
Gast #34961
Lesenswert?

hallo

ich habe folgendes problem und habe das auch nicht gerade aus
dem bsp. code lesen können.

nach einer messung hat mein 16bit timer einen wert den ich lesen möchte. 
und zwar ein high byte und ein low byte.

ich speichere beide byte's als uchar.

wie kann ich diese beiden charakter werte in einer ulong variabel 
zusammensetzten das ich einen 16bit wert habe?

oder muss ich das ganz anders anstellen.

besten dank tobias
Gast #34962
Lesenswert?

@peter

kannst du mir vieleicht nicht kurz dein programm erklären?
ich kenne die ganzen register nicht da ich mit einem 8051
arbeite.

wie genau läuft bei dir die messung der frequenz ab mit der ganzen 
interrupt routine?

besten dank tobias
#34963
Lesenswert?

Der 2051 ist ein 100% 8051, bloß P0 und P2 fehlen.

Für die Messung arbeitet T0 im 2*8bit-Mode,
TH0 ist die Zeitbasis, TL0 zählt die geteilte Eingangsfrequenz. Per 
Interrupt werden beide auf 24Bit erweitert.

Im NF-Bereich zählt statt TL der T1 die ungeteilte Frequenz.


Angezeigt wird: fx = Quarz * n / m

Siehe auch:
http://www.specs.de/users/danni/appl/soft/c51/frequenc/index.htm


Peter
Gast #34964
Lesenswert?

ich habe es auf diese weise versucht:

ich inkrementiere den timer1 16bit mit jeder fallenden flanke
am eingang t1 (timer input).
die ganze messung lasse ich eine sekunde laufen.
und somit habe ich schon die freqeuenz.

jetzt habe ich aber folgendes problem: ist die frequenz kleiner als 
255Hz funktioniert es, erhöhe ich die frequenz nun
bekomme ich ein falsches resultat.
vermutlich wird das lsb und msb nicht richtig zusammengesetzt.
ich finde jedoch diesen fehler nicht. vieleicht kann
mir jemand weiterhelfen.

besten dank

tobias
Angehängte Dateien:
Gast #34966
Lesenswert?

habe ich gerade auch gesehen.
jetzt funktioniert der frequenzzähler. ist aber viel zu ungenau. da ich 
ja ein internes delay habe das mir die messzeit von 1 sekunde bestimmt. 
so habe ich eine relativ
grosse abweichung je höher die zu messende frequenz.

jetzt muss ich mal schauen ob ich deine variante programieren kann. dann 
sollte dieses problem ja umgehen können.

gruss tobias
Gast #34967
Lesenswert?

hallo
ich habe das neu programiert. nun habe ich
folgendes problem:

den timer0 lasse ich zählen durch meine externe (zu messende) frequenz.
der timer0 arbeitet im 16bit mode, nun möchte ich immer
bei einem entstehenden owerflow einen interrupt auslösen und
den merken.
der timer1 läuft auch im 16bit mode wird aber durch den internen takt 
gezählt.

aber irgendwo liegt ein fehler beim merken des timerowerflow von timer1 
und timer0.
oder der timer0/1 interrupt wird gar nicht ausgelöst!

kann mir vieleicht jemand helfen wo der fehler liegt?
ich benutze einen 8051 compatiblen "ds89c420"

besten dank

tobias
Angehängte Dateien:
Gast #34968
Lesenswert?

hallo

das mit dem timer owerflow interrupt habe ich gelöst.
die messung funktioniert, aber noch zu ungenau.

in der berechnung der frequenz habe ich im moment noch einen
korrekturfaktor. vieleich kann mir jemand sagen wo
dieser fehler passiert.

besten dank tobias
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren