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.
was benutzt du denn als quelle für deine frequenz? was ist "eine konstante Frequenz von 1sek."???
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
na, bei 1Hz und 40 messungen/sek haben wir ein problem, oder? :-)
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.
Hi Chief 05, deine Assemblerroutine würde mich mal interessieren. Kannst du mir die mal zukommen lassen? Danke, Günter
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.