www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik freqeunzzähler


Autor: tobias hofer (Gast)
Datum:

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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
www.mino-elektronik.de/fmeter/fm_software.htm
und
www.mino-elektronik.de/fmeter/fmeterx.htm
wenn ich mich nicht vertippt habe.

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei mein Frequenzmesser, geht von 0,5Hz .. 125MHz.


Peter

Autor: tobias hofer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen

danke vielmals.
werde das einmal studieren und ausprobieren.

gruss tobias

Autor: tobias hofer (Gast)
Datum:

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

Autor: tobias hofer (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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


Peter

Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"high_byte*0x80+low_byte" kann ja nicht gehen

Ein Byte hat 8Bit also *256 oder *0x100 oder <<8


Peter

Autor: tobias hofer (Gast)
Datum:

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

Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

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

Autor: tobias hofer (Gast)
Datum:
Angehängte Dateien:

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

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.