Hallo erstmal, ich stehe grade vor einem Riesen Problem und komm nicht weiter. Ich möchte mit einem ATmega8 tonfrequenzen ermitteln. Das ganze soll in 75ms passieren, sodass ich dann den wert habe und damit arbeiten kann. es geht um Frequenzen von bis zu 5 kHz. Momentan bin ich soweit, dass ich den Timer1 verwenden muss. Ich habe auch rausfinden können, dass ich wohl auch noch die Pin's AIN0 und AIN1 verwenden muss. Ich habe aber keine Ahnung, was ich da genau machen soll. Ich muss doch Timer1 auf genau 75ms laufzeit regeln und mit einem Zähler die Positiven Flanken meines Signals zählen. Jedesmal wenn Timer1 dann nach 75ms fertig ist den wert auslesen und damit kann ich dann arbeiten. Kann mir das einer Erklären, damit ich auch verstehe, was ich da mache und später auch drauf aufbauen kann? Bringt mir ja nix, fremden Code zu verwenden und keine Ahnung zu haben, was der eigentlich bewirkt!
>>möchte mit einem ATmega8 tonfrequenzen ermitteln. Das ALLEINE sagt nicht viel... Auch die Kurvenform, nur die Frequenz, welche Genauigkeit,... Falls es nur um die Frequenz geht und Dein Signal elektrisch kompatibel zu den IO-Pegeln des AVR ist... 1) Polling Du machst einen schnellen Timer-Int auf. In der ISR tastest Du das Signal ab und merkst Dir die Anzahl der Abtastungen zwischen 2 Nulldurchgängen. Da die Zeit zwischen den Timer-Ints ja bekannt ist, kann so die Frequenz errechnet werden. 2) Interrupt Dein Signal löst einen PinChange Interupt (flankengesteuert) aus. In der ISR rufst Du den Wert des 16Bit Zählers ab, speicherst ihn. Beim nächsten INT vergleichst Du dann den aktuellen mit dem vorherigen Zählerwert. Aus der Differenz errechnest Du die Frequenz. Das ganze (in beiden Varianten) natürlich immer wiederkehrend und ggfs. aus einer Anzahl von Messungen den Mittelwert bilden. Jochen Müller
Was hälst du davon? http://elm-chan.org/works/akilcd/report_e.html Das ist sogar mathematisch sehr interesant.
hmmm ... hab mal sowas gemacht mit fft war dann ne Lichtorgel mit 32 Kanälen, war ganz interessant. Rechenzeit war irgendwas um 25ms bei 16MHz
Die Genauigkeit sollte im Bereich von +/- 10 Hz liegen. Größere abweichungen kann ich aber noch in der Software berücksichtigen. Die Töne haben einen mindestfrequenzabstand von 100Hz. Es handelt sich immer um einen Einzigen Ton, also ist eine FFT nicht notwendig. Das Signal ist ein Audiosignal und wurde an AIN0 und AIN1 angeschlossen. Wenn ich das Signal nun in ein TTL-Rechtecksignal umwandle kann ich das doch auch an INT0 anschließen und dann Zählen, wieviel Zeit ich von 0-Flanke zu 0-Flanke habe, oder? Wie mache ich das am Besten? Welche Bausteine sind dazu dann geeignet?
Nimm odch die FFT. Ist vermutlich genauer als der Timer. Ausseredem lernst du noch was dabei.
Du könntest auch den Görtzel-Algroithmus probieren. Ist zwar für Multi-Tone Erkennung (DTMF), aber vielleicht lasst er sich auf single tone hinbiegen. http://www.tahina.priv.at/~cm/hacks/ -mah
Goertzel-Algorithmus ist nur für einen Ton, einen bestimmten.
>>Wenn ich das Signal nun in ein TTL-Rechtecksignal umwandle kann ich das >>doch auch an INT0 anschließen und dann Zählen, wieviel Zeit ich von >>0-Flanke zu 0-Flanke habe, oder? Ja. Wie bereits oben erläutert. Liest Du eigentlich die Antworten auf Deine Frage nicht? Jochen Müller
Doch tue ich, ich wollts nur nochmal bestätigt haben, nicht das ich was falsch verstanden habe!
Hallo, ich nochmal. Ich habe es jetzt geschafft, dass der AVR mir eine Frequenz, die ich anschließe auch anzeigt. Funktioniert ganz gut. Wenn ich nun Audiosignale habe, wie messe ich die? Das sind ja keine TTL-Pegel. Haben weder den 5V-Pegel noch sind es rechtecksignale. Wie ändere ich das? Gibt es da eine einfache und dennoch zuverlässige lösung? Tobias
Wohl kaum Tobias, Audiosignale bestehen immer aus Frequenzspektren... Das heisst, ein Sammelsurium an einzelnen Frequenzen wird zusammengemischt damit es ein "Ganzes" ergibt. Es gibt eine Methode herauszufinden aus welchen Spektren Signale zusammengesetzt sind. Aber die ist a) sehr zeitaufwendig zu berechnen und b) nicht leicht zu erlernen bzw. umzusetzten. Das ganze nennt sich Fast Fourier Transformaion. Ich wäre froh wenn mir diese Tranformation mal jemand schlüssig erklären könnte ;-) (Könnt ich selber gut gebrauchen) Was hast du denn nun genau vor? Beschreib mal die Aufgabenstellung... Beats per Minute ermitteln???? ... Gruss Chris
Ich habe eine von einer Externen Signalquelle ein Audiosignal mit einzellnen Tönen. Es handelt sich also nicht um Mischungen verschiedener Frequenzen, die können zwar auch vorkommen interessieren mich aber nicht weiter. Diese einzelnen Töne möchte ich erkennen. Es sind feste frequenzen mit mindestens 100Hz unterschied zu einander, von 800Hz bis etwas über 5kHz möchte ich auswerten. Das auswerten funktioniert auch soweit wenn ich meinen Testtongenerator anschließe und es mit dem TTL-Signalausgang probiere, aber der Audio-Signalausgang ist einfach zu schwach. Ausserdem muss ich das ganze ja noch auf die Rechteckform bringen, damit es wirklich TTl-Signale sind, die ich auswerten kann. Im späteren Betrieb kann das Signal auch mal von einer Soundkarte kommen, deshalb brauche ich diese umwandlung von Audio zu TTL
Du musst das Audiosignal nur genug verstärken, bis der Verstärker zu clippen beginnt, dann hast dei Rechteck. Ein Einlesen mit dem A/D-Wandler wäre ebenfalls möglich und daraus dann den Rechteck ableiten. Für deinen Anwendungsfall würd ich mir aber auch noch folgendes anschauen: Beitrag "Goertzel-Algorithmus" Beitrag "FFT auf dem AVR" Gruß Roland
Also, ich muss einen 5-Ton auswerter nach ZVEI bauen. Soll für einen Hausalarm sein. Die Folgen bestehen aus 5 Nacheinanader vollgenden einfachen Tönen. Jeder Ton ist 75ms lang und besteht nur aus einem Ton. Ich habe vertige Schaltungen gesehen, die dafür den Analogkomperator benutzt haben. Ich benutze momentan den ICP und Timer1. Währe der Analogkomperator für meine Zwecke hier besser geeignet und wie arbeite ich damit?
Hi, Analogkomperator ist im Falle des Audio Signals sicher sinnvoll. Nachdem deine Software aber schon gut ohne dem Komperator läuft würd ich an deiner Stelle extern einen Komperator aufbauen. Schaltungen solltest du im Internet einige finden. Im Grunde besteht sowas aus einem OPV mit einer positiven Rückkopplung, wodurch dein OPV immer in die Begrenzung geht und du damit ein Rechtecksignal bekommst. Rückgekoppelt wird dabei normalerweise so, dass sie die Schaltschwelle ein bisschen ändert (Hysterese) um Schwingungen zu vermeiden (falls dein Signal direkt bei der Schaltschwelle herumtorkelt). Aufpassen musst du noch, da dein Audiosignal wahrscheinlich ohne Gleichanteil daherkommt. D.h. du gehst mit dem Audiosignal über einen Kondensator auf einen Spannungsteiler, der dir das Signal genau auf VDD/2 bringt (Aufpassen auf die Grenzfrequenz des Hochpasses - C + Spannungsteiler). Dann gehst du auf deinen OPV, der als Komperator geschaltet ist, und jetzt hast du am Ausgang ein Rechtecksignal das du auf deinen Mega8 geben kannst. So sollte das ganze eigentlich funktionieren! mfg Andreas
Könntst du einen Link zu einer Kmparatorschaltung Posten? Ich bin auf dem gebiet nicht grad gut bewandert und im Internet gibts es so viele Beispiele. Ich bräuchte halt einen, der so wie er ist auf meine Schaltung anwendbar ist Danke
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.