mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzzähler verzählt sich andauernd


Autor: Chief05 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe einen Frequenzzähler programmiert, der die gemessene Frequenz 
auf einem LC-Display anzeigt. Tut er auch, nur leider "trifft" er sehr 
selten die richtige Frequenz. Zählen tu´ich mit timer1 als Counter und 
nach einer Zeit (timer0) wird der Zählerstand ausgewertet und 
hochgerechnet. Das ganze etwa 40 mal in der Sek. Normal müßte er doch 
vernünftig zählen oder? Taktfreq. des Controllers ist 10MHz.

Autor: Remo Markgraf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Folgende Ursachen koennt ich mir vorstellen:
- der Time1 laeuft ueber bis er von timer0 erloest wird
- Du nutzt timer1 als 16bit zaehler wertest aber nur 8bit aus

Am besten Du rechnest mal nach, was der erwartete Zahlerstand sein 
sollte, natuerlich bei bekannter Frequenz und ueberpruefst die beiden 
potentiellen Fehlerquellen.

Lass den AVR doch mal eine ganz niedrige Frequenz zaehlen und probiers 
so einfach aus obs dann klappt.

ciao
Remo

Autor: Chief05 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab jetzt einen weiteren Test gemacht: Ich gebe nun eine konstante 
Frequenz von 1sek. auf den Counter-Eingang und lese die gezählten 
Impulse ab. Anschließnd setze ich den Zähler mittels Taster auf Null und 
wiederhole den Vorgang. Ergebnis: AVR zählt mit einer Differenz von 
5-7%. Da kann doch was nicht richtig sein, oder? Hat von euch schon mal 
jemand einen Frequnezmesser oder ähnliches programmiert? Bin für Tipps 
sehr dankbar.

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was benutzt du denn als quelle für deine frequenz?
was ist "eine konstante Frequenz von 1sek."???

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn dein AVR alleine schon eine Tolleranz von +-10% (bei 
Quarzoszillatoren) aufweist, dann ist das doch verständlich. Dazu kommt 
noch die Ungenauigkeit der Frequenzquelle...

Du kannst die Genauigkeit durch Vergrösserung des Zeitfensters ein wenig 
erhöhen. D.h. nicht 40 Messungen pro Sekunde ausführen sondern weniger. 
Den Timerüberlauf kann man ja in einem weiteren Register speichern.

Autor: Axel(ojojo) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zählt Dein Teil immer! zu viel?
dann ist das Signal vielleicht nicht sauber

Wenn Du eine Frequenz von 1Sek schreibst meinst du wohl 1Hz, oda !?

jo
Axel

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na, bei 1Hz und 40 messungen/sek haben wir ein problem, oder? :-)

Autor: Chief05 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit " Frequenz von einer Sekunde" meine ich eine Frequenz, z.B. 1kHz, 
die 1sek anliegt. War vielleicht schlecht ausgedrückt.
Die Frequnezquelle ist aber eigentlich sehr stabil, das sagt jedenfalls 
mein Frequenzzähler ( im Meßgerät als auch Einzelbauweise ).
Ich dachte nur, wenn "normale" TTL-Bausteine sich schon nur mal um ein 
oder zwei verzählen, müsse dies auch der AVR schaffen, und nicht bei 
1kHz 40 Mal.

Autor: Meiserl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Chief
Deine Beiträge sind ja sehr zweideutig geschrieben.
Frequenz von einer Sekunde??

Mal ein paar Grundlagen.
Frequenz = Schwingungen pro Sekunde.
Also bei 1kHz solltest du 1000 Impulse und 1000 Pausen haben.

Die 40??
mißt du 40mal oder verzählt er sich 40mal.
Also jedes 41ste mal gehts.
Dann zeig doch nur immer das 41gste ergebins an :-)))).
War nur Spaß.

Hast du es schon mal im AVR-Studio probiert?

Stimmt es du solltest im Zähler 25 drin haben.
1000kHz=1000Impulse pro Sekunde und wenn du 40mal messen tust
dann sind 1000/40=25

Also ich denke wenn du willst das dir geholfen wird solltes klare 
deuschte Sätze ins Forum schreiben.
Keiner hier kennt sich aus was du wirklich genau machst.
Mich würd auch noch interessieren wie du die 5-7% errechnet hast.
Du hast auch deinen Code nicht gepostet.

Ehrlich gesagt wäre es das beste diesen Beitrag zu löschen und du 
beginnst ein neues Thema.

Autor: Chief05 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist das verständnisproblem? Hast du meine Antwort in diesem Beitrag 
gesehen? Nochmal ganz einfach:
Timer1 zählt als Counter externe Impulse. Auf diesen Eingang wird für 
genau 1 Sekunde eine Frequnez von 1kHz gegeben. Die Frequnez ist stabil 
( überprüft ) und die Zeit auch. Dann müßte der Timer1 also genau bis 
1000 zählen. Dies tut er jedoch nicht, er liegt in etwa zwischen 900 und 
1100. Genauer gehts leider nicht, weil es einfach nicht mehr zu 
beschreiben gibt.

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, wenn du wirklich 40 mal in der sekunde misst, dann is das doch 
klar:


1000/40=25 (wie Meiserl sehr richtig erkannt hat). nun bekommt er z.B. 
den letzten impuls nicht mit, dann steht im zähler 24. Hochgerechnet 
ergibt das dann 24*40=960. Also "vertut" er sich um 40 Impulse, obwohl 
er sich eigentlich nur um 1 verzählt hat...

Jonas

Autor: Chief05 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt glaub ich weiß ich auch wo das verständnisproblem liegt. Wie ich 
in der zweiten Antwort in diesem Beitrag bereits schrieb, habe ich das 
40Mal in der Sekunde zählen erstmal weggenommen. Ich zählen nun den 
Zähler ohne Teilung oder etwas direkt hoch und setzte ihn mittels Taster 
wieder auf Null. Und da er bei dieser 1:1 Zählung ohne Umrechnung oder 
etwas schon so falsch liegt, kann doch was nicht stimmen, oder? gibt es 
irgendwelche Sonderbeschaltungen um NF-Signale an den AVR heranzuführen?

Autor: Günter König (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo auch Chief 05,

kann es sei, das du mit einem Sinussignal auf den AVR-Eingang gehst? 
Wennja, wie groß ist denn die Amplitude (Pegel)? Ich vermute fast, zu 
niedrig.
Es ist gut, wenn du das Signal erst mal über einen Schmitt-Trigger  der 
dir dann aus dem Sinus ein Rechtecksignal formt und dann den Pegel auf 
TTL-Werte bringt.
Ist wohl reiner Zufall (wenn es ein zu niedriges Signal ist) das 
überhaupt was angezeigt wird.

So denn,
Günter

Autor: Chief05 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SUPER ! Danke für den Tip, Günter. Hab zwar kein Schmitt-Trigger 
genommen, sondern gebe das Signal auf einen Transistor ( Emitter auf 
Masse, Collektor über 10kOhm an +5V ) und gebe das Signal am Collektor 
auf den Countereingang. Und es funktioniert.

Autor: Günter König (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Chief 05,
deine Assemblerroutine würde mich mal interessieren. Kannst du mir die 
mal zukommen lassen?

Danke,
Günter

Autor: Axel(ojojo) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo
ich hätte die auch gerne :-)

Wie hast Du den Transistor angeschlossen?

Emitter: Masse
Basis : 10k dann Signalquelle
Collector: AVR

???
Hab ich`s richtig verstanden?

Günter: kannst Du mir mal einen Schmitt Trigger empfehlen ?
macht der auch saubere Flanken?
was kostet sowas?
Wie schliße ich das an mein KFZ-Tacho-Signal an ?

Wie misst man bei einer Frequenz die (Maximale)Spannung ?

jo
Axel

Autor: Günter König (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Holla Axel,

1. Anschluss des Transistors:

das NF Signal über 1 - 4,7K an die Basis,
den Emitter an Masse,
den Kollektor über 10K an VCC und auch den Kollektor direkt an den 
Portpin des AVR`s.

2. Schmitt - Trigger:

Sicher macht der saubere Flanken, das ist ja seine Aufgabe. Aber
da gibt`s ja nun einiges. Wenn du unsaubere TTL Signale formen willst, 
kannst du jedes beliebiebige Gatter mit Schmitt-Trigger Eingängen 
nehmen. Das gilt auch für C-Mos.
Bei NF Signalen, die im mV Bereich liegen baue ich sie am liebsten "zu 
Fuss" auf, also mit zwei Transistoren. Wenn du im Besitz eines 
Layout-Programms bist (EAGLE) kann ich dir mal was mailen. Allerdings 
erst nach Ostern all die Weil ich ein paar Tage in Urlaub gehe.

3. Spannungsmessung

da gibt es auch mehrere Möglichkeiten
a.) die Spitzenspannung, ist der Wert der maximalen Amplitude. Kann man 
messen mit einem Oszilloskop.

b.) der Spitze - Spitze Wert, kannst du auch messen mit einem 
Oszilloskop.

c.) Effektivwert, geht mit einem Multmeter

d.) Spitzenwert = Effektivwert * SQR2

c.) Spitze - Spitzewert = Effektivwert  2  sqr2

e.)über eine Diode und einen Widerstand lädt sich ein Kondensator auf 
den Spitzenwert der angelegten Wechselspannung auf. Die kannst du dann 
mit einem hochohmigen Multimeter messen
(Uspitze = Messwert+Schwellspannung der Diode)

Hilft das erstmal?

Gruß,
Günter

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.