PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mikrofon zur Frequenzmessung an ATmega128L



Simon92
25.01.2009, 14:56
Hallo,

ich habe mal wieder ein Problem, und zwar, ist es möglich mit Hilfe eines Tonabnehmers, also eines Mikrofons am ATmega128L Frequenzen zu messen? Wenn ja, wie? Genau genommen ist es Der Robonova-Controller, nur ATmega128L ist eben der Chip. Wie genau könnte man dann die Frequenz eines Tones messen?

Besserwessi
25.01.2009, 16:03
An sich kann man mit den Controllern Frequenzen sehr genau messen. Die Genauigkeit wird oft vom Quarz bestimmt.
Das Problem wird wahrscheinlich sein das im Ausgang des Mikrofons mehr als eine Frequenz enthalten ist. Wenn wirklich nur ein Ton vorhanden ist, ohne viele nebengeräusche, kann es reichen den Komperatoreingang des AVRs zu nutzen. Wenn man ein weniger gutes Signal hat könnte es besser sein mit dem AD wandler ein kurzes sample Aufzunehmen und dann die Frequenzanalyse rein rechnerich zu machen. Enweder per Fouriertransformation oder auch durch einen Kurvenanpassung. Auch mit dem wenigen RAM des Mega128 sollte da noch eine gute Auflösung möglich sein.

Etwas mehr informaltion zum Ton sollte man aber schon haben. Auch die die nötige gneauigkeit sollte man angeben.

Als mikrofon sollte ein einfaches Elektretmikrofon reichen. mit dem Komperator als Eingang eventuell sogar ohne Verstärker, einfach nur mit einem Vorwiderstand für die Spannungsversorgung.

Simon92
25.01.2009, 16:55
Also so gesehen ist es super, denn:
- Ich zeichne den Ton eines Instrumentes auf, es ist also garantiert nur eine einzige Frequenz
- Durch den Tonabnehmer werden auch keine Störgeräusche aufgenommen

Aber (hoffentlich ist das keine doofe Frage :) ) was ist denn ein Komperatoreingang? :)

Simon92
25.01.2009, 17:01
Gut, habe mich jetzt ein wenig Informiert in der Anleitung des Chips selber.
Das signal wird sozusagen "verglichen". Und zwar der eine Port mit einem anderen. Also, damit ihr das ein wenig versteht, ich brauch es für eine Art Stimmgerät für Instrumente, das anzeigt, wann der Ton zu hoch und zu niedrig ist. Aber wie soll ich denn dann den Ist-Wert mit dem Soll-Wert-Port vergleichen?

Gock
25.01.2009, 17:21
Ein Instrument ereugt natürlich nicht nur eine Frequenz. Sonst würden ja alle Instrumente gleich klingen...
Sie erzeugen einen Grundton (den Du messen willst) und dieser ist von anderen Frequenzen überlagert, die den Klang des Instruments bestimmen.
Je nach Stärke dieser restlichen Frequenzen solltest Du das Signal vorher filtern, um den Grundton zu bekommen.
Dann kannst Du versuchen die Nulldurchgänge mit dem AnalogComparator zu finden (indem Du an einen Eingang Dein Signal und an den anderen "0") anschließt) und den zeitlichen Abstand messen.
Du könntest auch den Zählereingang T1 benutzen und die Flankenwechsel innerhalb einer bestimmten Zeit zählen, dann bekommst Du die Frequenz auch.
Aer Du musst aufpassen, dass Du keine zu hohen oder negativen Spannungen an den Port bekommst.
Gruß

Besserwessi
25.01.2009, 19:07
Bei den meisten Instrumenten sind die Töne keinen Sinustöne sondern die haben zumindest Obertöne. Man könnte es mit der einfachen detektion der Nulldurchgänge machen. Dann aber nicht durch direktes Zählen, sondern besser über die Input capture funktion, das ist eine interne Hardware zum Messen von Zeiten. Wegen der Oberwellen muß man wahrscheinlich noch eine filterung der Nulldurchgänge machen und ggf. ein paar falsche verwerfen. Das direkte Zählen wird schwer, denn die Töne der meisten Instrumente sind ja eher kurz, und man kann schlecht ein paar Sekunden zählen für ein genaues Ergebnis. Mit der Zeitmessung kann man die zeiten zwischen den Nulldurchgängen messen, die kürzesten und längsten verwerfen wegen möglicher Fehler und den Rest mitteln um die Periodendauer zu erhalten. Das sollte reichen.
An Hardware wird man aber eventuell doch besser eine externe, wenn möglich sogar variable Verstärkung nehmen sollen, denn der interen Komperator hat nominell keine Hysterese.

Der mega128 hat ja schon etwas an RAM, und die Rechengeschwindigkeit ist auch nicht so schlecht. Man könnte also auch gut den Weg über den AD Wandler wählen: ist aber von der Programmierung etwas aufwendig, dafür sollte es sehr unempfindlich gegen Störgeräusche sein.