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.
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
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.
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.
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
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.
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.
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.
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
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?
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
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.
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
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