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


von Chief05 (Gast)


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.

von Remo Markgraf (Gast)


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

von Chief05 (Gast)


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.

von Jonas Diemer (Gast)


Lesenswert?

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

von Steffen (Gast)


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.

von Axel(ojojo) (Gast)


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

von Jonas Diemer (Gast)


Lesenswert?

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

von Chief05 (Gast)


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.

von Meiserl (Gast)


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.

von Chief05 (Gast)


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.

von Jonas Diemer (Gast)


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

von Chief05 (Gast)


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?

von Günter König (Gast)


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

von Chief05 (Gast)


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.

von Günter König (Gast)


Lesenswert?

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

Danke,
Günter

von Axel(ojojo) (Gast)


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

von Günter König (Gast)


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

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.