Mit Microkontroller Frequenz Messen

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 28 11 2024  15:14:46      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
Mit Microkontroller Frequenz Messen
Suche nach: frequenz (6276)

    







BID = 145818

wellenbrecher247

Gerade angekommen


Beiträge: 8
 

  


Hallo... hab schon viele Foren durchgestöbert und noch keine Hilfe gefunden!

Ich möchte ein Gitarrenstimmgerät bauen, mit einem Microcontroller (AT89S8252).

Über ein microfon und einen OP und Schmitttrigger hab ich ein Rechtecksignal... welches ich an PortPin 3.2 lege (Timer 0 zählt dann also wenn eine 5V anliegen (log 1)), bei negativer Flanke wird der externe Interrupt 0 ausgelöst. In der Interrupt Service Routine wird dann der aktuelle ´Timerwert ausgelsen...

soweit bin ich in meinem Denkansatz... aber da habe ich ja erst die halbe Periode... wie bekomme ich die andere Hälfte, kann der AVR das signal invertieren?

Wäre stark wenn ihr mir helft, für jeden Vorschlag bin ich dankbar.

mfg Wellenbrecher247


BID = 145835

Her Masters Voice

Inventar


Avatar auf
fremdem Server !
Hochladen oder
per Mail an Admin

Beiträge: 5308
Wohnort: irgendwo südlich von Berlin

 

  

wie wärs einfach mit verdoppeln?
Aber du kannst dir natürlich auch mal ansehen wie Andere es gemacht haben. Http://www.sprut.de wäre da ne Möglichkeit. Der Frequenzzähler ist dort in mehreren Beispielen erklärt und kann mit etwas Abstraktionsvermögen auch auf nem AVR umgesetzt werden.

_________________
Tschüüüüüüüs

Her Masters Voice
aka
Frank

***********************************
Der optimale Arbeitspunkt stellt sich bei minimaler Rauchentwicklung ein...
***********************************

BID = 145836

Her Masters Voice

Inventar


Avatar auf
fremdem Server !
Hochladen oder
per Mail an Admin

Beiträge: 5308
Wohnort: irgendwo südlich von Berlin

wie wärs einfach mit verdoppeln?
Aber du kannst dir natürlich auch mal ansehen wie Andere es gemacht haben. Http://www.sprut.de wäre da ne Möglichkeit. Der Frequenzzähler ist dort in mehreren Beispielen erklärt und kann mit etwas Abstraktionsvermögen auch auf nem AVR umgesetzt werden.

_________________
Tschüüüüüüüs

Her Masters Voice
aka
Frank

***********************************
Der optimale Arbeitspunkt stellt sich bei minimaler Rauchentwicklung ein...
***********************************

BID = 145870

HarryGr

Gerade angekommen


Beiträge: 5

Ich hab einfach gewartet bis der Eingang 0 ist,
dann gewartet bis der Eingang 1 ist,
Timer auf NULL gesetzt,
gewartet bis Eingang wieder 0 ist,
gewartet bis wieder 1 ist,
und Timer Ausgelesen.


Dieses Verfahren ist recht unwirtschaftlich, da der µC die gesamte Periode nur am Warten ist. Ich brauchte damals aber auch nur einen Frequenzmesser und da war das ausreichend. Nach jeder Messung noch schön das Ergebniss ausgeben und neu messen.

BID = 145891

alpha-ranger

Schreibmaschine



Beiträge: 1517
Wohnort: Harz / Heide


Zitat :
wellenbrecher247 hat am  4 Jan 2005 16:11 geschrieben :

bei negativer Flanke wird der externe Interrupt 0 ausgelöst. In der Interrupt Service Routine wird dann der aktuelle ´Timerwert ausgelsen...

mfg Wellenbrecher247


Hallo,
ist doch alles richtig soweit. In einer vollständigen Periode gibt es nur eine negative Flanke. Es wird also Periodendauer t gemessen. Sowas habe ich schon mal als Drehzahlmesser realisiert, aber mit einem AT90S1200.

Um die Resourcen des Prozessors am besten auszunutzen, mach Dir ein Exel-Sheet, wodrin Du alle Varianten die sich aus der Clockfrequenz und dem Vorteiler des Counters ergeben testen kannst.

Wenn es mit einer Saite klappt, kann man ja die anderen 5 auch implememntieren. E-A-D-G-H-E oder wie war das ?

Mathematischer Zusammenhang: A ist 440 Hz, eine Oktave ist eine Frequenzverdopplung und der Abstand zwischen zwei (Halb)-Tönen ist der Faktor 12te Wurzel aus 2.

Und autotuning ist die Eigenschaft, das das Gerät selbstständig die Saite erkennt.

mfG.

_________________
Wie der alte Meister schon wußte: Der Fehler liegt meist zwischen Plus und Minus. :-)
Und wenn ich mir nicht mehr helfen kann, schließ ich Plus an Minus an.

BID = 145949

MinceR

Stammposter



Beiträge: 277

also sobald der eingang H ist zählt er bis es ne negative flanke gibt. da haste genau die halbe periode.
mal 2 rechnen ist einfach alle binären zahlen im register um 1 nach links schieben. dann haste das richtige ergebniss. aber wie alpha ranger schon sagt du musst dir ja eh vorher ne umrechnung ausdenken. und dann kannste ja auch mit der halben zeit rechnen. also 1/440*2 usw usw...

aber wie wäre es mit folgendem:
weiss ja nicht ob dein micro und op usw genau richtig aufgebaut ist, also die zeit die er low bleibt genausolang ist wie die zeit der er H ist..
du kannst die ganze periode ja auch einfach von fallender flanke bis zur fallenden flanke messen.

also wert aus timer lesen -> timer löschen(und natürlich weiterlaufen lassen) -> ausgeben und das alles im interrupt der ausgelöst wird wenn eine fallende flanke kommt. und dann als hauptprogramm einfach nix oder da halt die

BID = 146150

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
da haste genau die halbe periode.

Wie kommst du denn darauf ?
Hast du schon einnmal die Kurvenform eines solchen NF-Signals gesehen ?
Außerdem sorgt die meist an den Portpins vorhandene Hysterese dafür, daß Ein- und Ausschaltschwelle nicht gleich hoch liegen.


Ich würde aber die Zeit nicht nur einer sondern die mehrerer voller Perioden messen.
Das ist inmmer noch schnell genug, verbessert aber die Genauigkeit erheblich, weil Unsicherheiten bei der Interrupt-Latency eine geringere Rolle spielen, der relative Quantisierungsfehler der Zeitmessung geringer wird, und auch die Rundungsfehler bei der Division f=k/t abnehmen.

_________________
Haftungsausschluß:



Bei obigem Beitrag handelt es sich um meine private Meinung.



Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.



Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !

BID = 146186

wellenbrecher247

Gerade angekommen


Beiträge: 8


Zitat :
alpha-ranger schrieb:
Um die Resourcen des Prozessors am besten auszunutzen, mach Dir ein Exel-Sheet, wodrin Du alle Varianten die sich aus der Clockfrequenz und dem Vorteiler des Counters ergeben testen kannst



wie ist das gemeint?

Ich habe mir eine Schaltung gebaut, leider bin ich nicht so der Profi...und der H Pegel ist nur bei hoher Lautstärke die halbe Periodendauer.

Ich werde meine Schaltung mal als BIld uploaden...könnt mir ja mal sagen, was ich besser machen kann.

Die Idee mit den fallenden Flanken mehrmals messen ist gut...werd sie mal probieren.

Danke an alle die bisher geholfen haben



BID = 146225

wellenbrecher247

Gerade angekommen


Beiträge: 8

Bin auf nochein Problem gestoßen...

wollte von Flanke zu Flanke messen... aber...

Meine Gedanken:
- Bei fallender Flanke -> Interrupt wird ausgelöst
- in der Interrupt Service Routine muss ich den Timer-
Wert auslesen und den Timer zurückstzen. der Timer soll
aber schon die nächste Zeit Messen...

--> Das auslesen und zurücksetzen braucht Zeit und
verfälscht doch somit das Ergebnis... ODER?????

BID = 146256

alpha-ranger

Schreibmaschine



Beiträge: 1517
Wohnort: Harz / Heide

Hallo,
der µC hat 3 16-Bit Timer/Counter.

Aber wenn Du das Interruptverhalten auf Flankengesteuert setzt, und sofort den Counter ausliest und den Counter auf Null setzt, sind die Bedingungen immer gleich.

Der Counter wird entsprechend dem Teilerverhältnis stets incrementiert. Egal was Dein Programm macht.

Aber Du mißt eine Zeit, und keine Frequenz. Wenn der Timer eine Breite von 16 bit hat, wäre es sinnlos, diesen nicht in voller Breite auszunutzen. Wertebereich hier 0 bis 65536.

Bsp. : Um 10 ms zu messen, werde ich die Clockfrequ. und den Vorteiler so einstellen, das ich auf 50 000 Counterincrements komme.
Und nicht auf 100. Die Meßunsicherheit wäre dann zu groß.
Um ungültige Ergebnisse auszuschließen,wäre es sinnvoll den TimerOverflowInterrupt auch zu benutzen.

Ein Excel-Sheet dewegen, weil Excel auch durch Eingabe von Formeln rechnen kann. So kann man für jede gemessne Zeit sich die Frequenz anzeigen lassen und entsprechend der Bewertungskriterien festlegen ob der Ton richtig ist.

Dein Prg. müßte dann anzeigen: E-, E oder E+ für die betreffende Saite.

Hast Du ein besseres Datenblatt ? Ich hab mir das PDF von Atmel heruntergeladen, da steht nicht viel drin.

mfG.








_________________
Wie der alte Meister schon wußte: Der Fehler liegt meist zwischen Plus und Minus. :-)
Und wenn ich mir nicht mehr helfen kann, schließ ich Plus an Minus an.

BID = 146273

wellenbrecher247

Gerade angekommen


Beiträge: 8

Mit dem Exel habe ich noch nicht richtig verstanden... der µC kann das doch auch umrechnen!?

ich habe jetzt ein programm geschrieben...welches nach jeder negativen Flanke abwechselnd den Timer zurücksetzt und ausließt.

Schauts dir mal an!

ich bin neuling in µC...überhaupt in elektronik...

das mit dem Vorteiler und bis 50000 zählen zu lassen...weiß nicht was du meinst (ich habe 12MHZ Quarz... Zähler incrementiert aller 1µs)

Hab kein besseres Datenblatt...



[ Diese Nachricht wurde geändert von: wellenbrecher247 am  5 Jan 2005 13:57 ]

BID = 146735

alpha-ranger

Schreibmaschine



Beiträge: 1517
Wohnort: Harz / Heide

Hallo,
Danke für den Programmteil.

Es sollen die gemessenen Werte zum PC geschoben werden.
Dann braucht der Proz. auch keine Auswertung der Zahlen machen, und Du brauchst keine Exeltabelle um die krummen Werte der Töne in die jeweilige Periodendauer umzurechnen.

Zum testen einen Generator mit 100 Hz Rechteck anschließen.
Ergibt eine Periodendauer von 10 ms, der Counter müßte von Flanke zu Flanke 10 000 Increments machen.

Interruptbehandlung:
Während der Messung den Interrupt der seriellen Schnittstelle disabeln.
ext. Interrupt enabeln
beim ersten ext.Inter. Counter zurücksetzen.
beim zweiten ext. Inter. Counter auslesen.
ext. Inter. disabeln
Ausgaberoutine anspringen/ser. Inter. enabeln
zurück in die loop

Leite das mal mathematisch ab, wie Du bei 12MHz Takt auf exakt 1 µs kommst.

mfG.


BID = 147018

wellenbrecher247

Gerade angekommen


Beiträge: 8

Ich möchte ja später die Daten nicht zum PC senden, sondern über LED's soll angezeigt werden ob der Ton zu Hoch oder zu tief ist und auf eine Anzeige, wahrscheinlich 7 Segment...soll die dem Ton am nächsten liegende Note angezeigt werden...die Auswertung muss ich schon machen.

Das mit dem Generator ist ne gute Idee...danke!

Unser Doten hat gesagt: Quarzfrequenz= 12 MHz

Taktfrequenz= Quarzfreqenz/ 12 = 1MHz

--> Taktperiode = 1/1Mhz =1µs

hab das halt dann auch mal angenommen, dass das stimmt.

BID = 147019

wellenbrecher247

Gerade angekommen


Beiträge: 8

Kann sich bitte nochmal jemand meine Schaltung anschauen ???

Was kann vieleicht vereinfacht werden, wo sollte etwas besser gemacht werden?

Danke!

BID = 147058

wellenbrecher247

Gerade angekommen


Beiträge: 8

jetzt ist mir noch eine Merkwürdigkeit aufgefallen...

Ich hab das Programm mit 1kHz ausprobiert...

Funktioniert eigentlich super...es gibt mir 1000 µs aus...

...aber ab und zu 1007...vieleicht aller 10 Messungen manchmal auch häufiger ...aber immer nur 1007... hab dann ein bischen rumgespielt... z.B. clr ex0 mal weggelassen ... dann hat es 993 ausgegeben...also ab und zu...

wie kann das kommen? Wie beseitige ich den Fehler?


      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 6 Beiträge verfasst
© x sparkkelsputz        Besucher : 182418270   Heute : 2768    Gestern : 7490    Online : 423        28.11.2024    15:14
5 Besucher in den letzten 60 Sekunden        alle 12.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.050940990448