Tonfrequenz mit mega8 in 75ms ermitteln

Gast #973274
Lesenswert?

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!
#973279
Lesenswert?

>>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
Gast #973829
Lesenswert?

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?
Gast #974424
Lesenswert?

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
#974453
Lesenswert?

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
Gast #974459
Lesenswert?

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
Gast #974963
Lesenswert?

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?
(Firma: Embedded Microtec) #975065
Lesenswert?

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
Gast #976236
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren