Forum: Mikrocontroller und Digitale Elektronik Audio frequenz erkennung


von Rene (Gast)


Lesenswert?

Hallo,

Wolte fragen ob jemanden shon mall mit nem mega
Ein frequenz gemessen hat.

Bin total unbekant wie ich dass machen konte.

Ich mochte gerne mit eine tiny2313 oder enlicht ein 420Hz, frequens
aus nem audio signal (ca. 0.20 volt) erkennen konnen, sodas ich dan 
etwas schalten kan.

ich weis ist nicht einfach aber werh weis hat shon jemand dass mall 
gemacht.

mfg.

Rene

von Obelix (Gast)


Lesenswert?

Suche -> FIR

von Düsentrieb (Gast)


Lesenswert?

nimm nen ne567 !

von Rene (Gast)


Lesenswert?

Ich muss aug kucken dass dass signal 3 mall im 0.5 sec takt da ist.
also da aug andere frequenzen da sind nur am ende kommen ein pahr stucke 
fon ca 420 hz wonach lass sagen 3 mall ein relais geschalted werden 
solte.

also signal spache.-darnach 
420hz(0.5)-0.5-niks(0.5)-420hz(0.5)-0.5-niks(0.5)-420hz(0.5)-0.5-niks(0. 
5)  dan relais um schalten.

der NE567 ist intressant leider hat mein Hollandsche elktroladen die 
nicht....  und morgen ist hier ein freien tag..

wahr aug ans denken an einen.LM358 aber der wahr aug nicht su bekommen 
..
habe nur UA741 und lm324 aber weis nicht wie oder was ich damit tun 
konte.



von Rene (Gast)


Lesenswert?

Hallo,


Ist da fieleigt etwas mocklich mit dem ICP port.

Ich weis nich ob der aug ein 0,20 V ac signal erkennen kan.
dan konte ich die positive pulse zahlen.

grusse Rene

von Currywurst (Gast)


Lesenswert?

@Rene
Ich will ja nicht meckern aber probier mal folgendes:
-Firefox 2.0 Browser installieren.
-Sprachpaket Plug-In Deutsch (de-de) installieren.
-Automatische Rechtschreibprüfung aktivieren.
Ein Tüte Deutsch hat mich auch gehelft.

von Rene (Gast)


Lesenswert?

Hallo,

Currywurst.

ich finde dass ich nog recht guht su lesen und su begreifen scheibe fuhr 
ein Hollander.


bis jetz habe ich nie probleme gehabt.

groetjes Rene.

von Currywurst (Gast)


Lesenswert?

Oh, sorry Rene!
Ik kan niet weten waar jij vandan komt.
We hebben hier heel vaak mensen die niet so goed Duits schrijven kunnen 
howel se Duitsers zijn. Dat moet jij erder vertellen, anders denkt 
iemand dat jij een Forum Troll of so iets bent.
Zie het niet als een anraking van jou eer.

von Netbird (Gast)


Lesenswert?

@Currywurst

Gute Reaktion von Dir! Nicht schlecht, aber niederländisch nicht ganz 
korrekt ;-))
Voldoende .. Tot volgende keer ..

von Otto (Gast)


Lesenswert?

Hallo Currywurst,

Oh doch - Du hättest es im 2. Post lesen können:

> Hollandsche elktroladen

Gruß Otto

von Christian U. (z0m3ie)


Lesenswert?

Das geht auch mit dem ADC man muss nur die nulldurchgänge zählen. Gar 
nicht so schwierig wenn man sich etwas damit beschäftigt.

von Currywurst (Gast)


Lesenswert?

Vielleicht sollte ich mal was zum Thema beitragen.

Also, man könnte eine primitive DFT basteln.
Man Tastet das Signal mit dem Vierfachen der gesuchten Frequenz ab.
In diesem Fall 420 x4 = 1680.
Die geraden und die ungeraden Samples werden jeweils für gewisse Zeit 
Integriert. Die zwei Ergebnisse der Integrationen enthalten Real- und 
Imaginärteil des gesuchten Signals. Da sogar Festkomma- Division und 
Multiplikation etwas zu heftig für einen Tiny sind kann man den Betrag 
mit einer Faltung des Vektors auf die Reale Achse ermitteln. Dazu kann 
man einen iterativen Kordic-Algorithmus auf den Vektor anwenden bis der 
Imaginärteil gegen Null tendiert.
Oder man wertet den Real und Imaginärteil direkt über einen 
Schwellenwert aus nur um festzustellen ob die gesuchte Frequenz 
vorhanden ist. Dadurch schwankt die Empfindlichkeit zwar mit der 
Phasenlage aber es Funktioniert noch einigermaßen.
Das ganze ist dann natürlich durch Aliasing empfindlich für einige 
Harmonische von 420Hz. Also nicht ganz optimal.

Man kann auch einen analogen Tone-Decoder verwenden. Wie zum Beispiel 
NE567.
Dieser ist ein echter Phase Locked Loop mit einem zweitem Demodulator 
für die Auswertung. Kostet mit allen Bauteilen nur etwas Platz, ein paar 
Milliampere und 30 Cent extra.

von Rene (Gast)


Lesenswert?

Habe mir eine NE567 geholt.

Aber jezt wie berechne ich dem C1 und R1 aus fuhr 420 herz.

ich begreife dem formel nicht

fo=1\1.1R1C1

also 420=...... ?

grusse Rene



von Kai Markus Tegtmeier (Gast)


Lesenswert?

Hooi, Rene!

Yup, dit is juist!

fo = 1 / (1.1  R1  C1)

==> 420 Hz = 1/ (1.1  R1  C1)

==> C1 = 1 / (1.1  R1  420)

oder auch:

==> R1 = 1 / (1.1  C1  420)

Das heißt:

1. Du legst a) R1 oder b) C1 fest
2. Dann kannst Du a) C1 oder b) R1 berechnen

Groetjes
Kai Markus

von Otto (Gast)


Lesenswert?

und dabei hilft:

"Frequency determining resistor R1 should be between 2 and 20k"

Otto

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Wenn man nur eine einzige Frequenz erkennen möchte, dann geht das ohne 
eine komplette DFT mit dem Goertzel-Algorithmus. Das sollte auf einem 
AVR problemlos machbar sein, benötigt aber sicherlich mehr 
Einarbeitungszeit als wenn man einfach den NE567 verwendet.

von Kai Markus Tegtmeier (Gast)


Lesenswert?

Genau das!

Vraag de wiskundige naar de bijwerkingen :-)

Also:

1. R1 of C1 willekeurig opleggen (maar naleven: 2k < R1 < 20k !)
2. met de formule C1 of R1 becijferen.

Groetjes
Kai Markus

von Rene (Gast)


Lesenswert?

super,,

aber in wekchen einheit rechnet man dann
in Ohm, oder kilo ohm.

und fuhr condersator ? farat nf uf ?

bin nicht so guht ins umrechnen.

habe hier potmeter liegen fon 1k und 100K

also am beste nehme ich dem 1k und noch ein extra wiederstand

aber condensator sind swieriger su bekommen in dem richtigen werde.
wasss da hier liegen habe ist 40nf,1uf,460nf,70nf,10nf,100nf,
ist aber swierig ...

von Rene (Gast)


Lesenswert?

also ich meine lass sagen der R1 wird 11K (10k poti und 1k wiederstand)
C1 = 1 / (1.1  11  420) =0.0001967
oder
C1 = 1 / (1.1  11000  420) =0.0000001


und muss ich aug noch aus suchen was fuhr ein condensator am pin 2 und 1 
kommen dass er swischen ungefahr 410 und 430 herz schalted.

gruss Rene

von Currywurst (Gast)


Lesenswert?

Die Einheiten in der Formel sind Ohm, Farad und Hertz.
Mindest-widerstand ist 2 Kiloohm. Für 420 Hz würde ich 4.7K in reihe mit 
eine 10K Trimmer und einen 220n Kondensator nehmen. Die Frequenz ist 
dann von 280 bis 880Hz Einstellbar.

von Rene (Gast)


Lesenswert?

Danke Currywurst,

Werde mir morgen die teile hollen,

da habe ich was an...

und die 2 an pin 1 und 2 ? die sind fuhr dem band breite.
also ich trimme mit dem 10k trimmer auf eine 420hz ton.
unddie 2 auf pin 1 und 2 sorgen fuhr dem breite oder so
<420 und >420.

wie berechnet man dieser ?
ich fand c2 470nf und c1 1nf . 
http://www.oe5.oevsv.at/basteln_js/technik/projekte/funkrelais/beschreibung.pdf

oder 10nf und 1nf
http://www.rason.org/Projects/impdecod/impdecod.htm

von Currywurst (Gast)


Lesenswert?

Beinahe richtig. C2 ist mindestens 470nF und C1 mindestens 1uF.
C1 kann ein Elektrolytkondensator sein.

Formel für C2 ist 130uF / Frequenz.
Und C1 = 2 * C2.

von Rene (Gast)


Lesenswert?

Jezt nog eine weiterefrage,


Dass mit den 567 habe ich noch nicht ans laufen, brauche denklich
ein besserem potti( genauer).
wehn ich im einstelle auf 420 herz funkt ok, aber bei 840 herz tut er es 
aug.


aber habe jetz signal das mein tiny lesen kan via einen ua741.

wie kan ich mit dem tiny2313 via den ICP port
gleigzeitig dem frequenz messen und die seit die dieser
puls hat also solte nur auf ein 420hz puls reagieren fon 0,5 sec.

habe mall versucht mit folgenden.

aber ich bekomme nur 148 im display mit 420hz
146 bei 425hz und 150 bei 415hz

also muss quarz andern nach 8mhz oder prescaler andern.

aber muss aug dem seit des sigales messen konnen

gruss Rene

von Rene (Gast)


Lesenswert?

entshuldige wahr dem code vergessen.



'Config Pind.6 = Output
Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising

Dim Wtime As Byte
Dim Timercounter As Word

On Capture1 Captmr

Wtime = 100
Timercounter = 0

Enable Interrupts
Enable Capture1

Do
  'Set Portd.6
  Waitms Wtime
  'Reset Portd.6
  Waitms Wtime
  Cls
  Lcd "pwidth: " ; " " ; Capture1
Loop

Captmr:
  Timercounter = Capture1
  Timer1 = 0
Return

End

von Rene (Gast)


Lesenswert?

Niemanden ?

also der code erkent bei mir jetz die 420hz ton direkt mit dem ICP pin.
aber jezt mochte ich nog ein weg finden um die dauer fon diesem
siganl zu controlieren so dass ich weis dass der ton 0,5 sec gedauert 
hat.

Ich mochte mit diesen schaltung ein telefoon pfost bedienen.
der mit ein druk knof ein relais schalted ( also telefoon aufnemen und 
contact machen mit einen centrale)
wehn niemanden aufniht solte er nach x mall ausschalten.
oder wehn jemanden aufnimt solte er warten bis er 3 mall dem 0,5 sec
420hz bekomt ausschalten.

ich tapfe dass signal fom speaker ab fon den teurpfosten
so habe ich nicht die hohe spannung fom elefoon netz.
speaker liefert signal fon ca 4 volt ac

grusse Rene

von Currywurst (Gast)


Lesenswert?

Gehst du mit den 4 Volt direkt an den Eingang? Der ist nicht für große 
Signale. Das sollten maximal 20mV bis 100mV sein.

von STK500-Besitzer (Gast)


Lesenswert?

>so dass ich weis dass der ton 0,5 sec gedauert hat.

Du könntest in deiner Interrupt-Routine eine Variable hochzählen.
0,5 Sekunden ergeben 210 Auslösungen dieser Routine bei 420Hz.
Wenn man ca. 200 erkannt hat, kann man ja ein Flag setzen, das anzeigt, 
dass die korrekte Dauer erkannt wurde.
Dann mußt du nur noch eine Möglichkeit finden, wie du feststellst, dass 
die 420Hz nicht mehr anliegen.
Es wäre einfacher, wenn die 420Hz mindestens über eine bestimmte Zeit 
anliegen müssten, um eine Aktion auszulösen (Puls < 2 Sekunden ==> Keine 
Aktion, Puls >2 Sekunden ==> Aktion starten).

Leider kann ich kein Holländisch, ich hoffe, es wird dir trotzdem klar, 
wie ich es meine.

von Rene (Gast)


Lesenswert?

@currywurst ist fuhr dem Tiny die 4volt nicht via dem 567.

Hallo,

Also dan solte ich nicht via dem ICP arbeiten (der jetz kuckt ob da eine 
420hz signal ist)sonder durch ein dem PD3 Int1.
dem acktivieren fuhr 1 secunde und kucken ob da 420 pulse drauf gekommen 
sind und direkt wieder dass selbe 3 mall also bis er dass relais 
schalted.


guht aber wie schreibe ich das im bascom

dem ich weis leidernicht ob ich int0, int1 nutzen kan und aug 
gleichseitig mit timer 0 oder timer1 arbeiten kan, sind die verbunden an 
ein Interupt?

gruss Rene

von Rene (Gast)


Lesenswert?

ps meinte ca 220 pulse anstat 420 pro sec

von Rahul D. (rahul)


Lesenswert?

ICP "misst" eigentlich nur die Zeit zwischen zwei Flanken.
Da du nur auf die eine Flanke triggerst (soweit ich das BASCOM-Programm 
verstehe), misst du nur die Zeit einer Halbwelle. Die muss halt 
entsprechend lang sein. (Kriterium, um die 420Hz zu erkennen)
Wenn du dann 210 gleiche Flanken gezählt hast, sind 0,5Sekunden um.
Dann musst du darauf warten, dass die nächste Flanke auftritt und die 
Zeit zwischen beiden bestimmen. Die Zeit sollte wieder bei 0,5s liegen.
Du hast also das Problem, dass du zwei Zeiten erkennen musst: Die kurze 
Zeit einer Halbwelle des Sinussignals und den Abstand zwischen zwei 
Signalpaketen.
Das lässt sich eigentlich problemlos mit einem einizigen Timer und ein 
paar weiteren Variablen realisieren.

Deine Lösung ist übrigens auch gut.

von Rene L. (rene046)


Angehängte Dateien:

Lesenswert?

Danke Rahul,

Ich habe es jetz soweit ans laufen.

Also program erkent ein 420hz ton fon 0,5 sec und der 420hz ton fon 1
secunde.

Leider dem nachteil ist dass er aug noch 420hz erkent als 1 sec wehn er
langer dauert. weil ich jeden pro secunde sahle.
aber denke dass macht niks da dass nicht oft fohr komt.
audio signale werden nicht erkant die uber oder unter 420hz liegen.

wehn noch jemanden lust hat im software etwas su bessern gerne.

fieleigt ein formel um anstat 10mhz kristal einfach aus su tauchen gegen
8 oder 4mhz dan konte ich dem aug noch ausparen und der interner nutzen.


o und sorry fuhr dass hollandisch im text. wahr fuhr freund gemeint.


$regfile = "ATtiny2313.dat"
$crystal = 10000000
$framesize = 32
$swstack = 32
$hwstack = 32

Dim A As Word                                               'int0 teller
Dim B As Word                                               'tijdelijke
int0 waarde
Dim C As Byte                                               'waarde voor
0,5
Dim D As Byte                                               'waarde voor
1

Config Portd.0 = Output                                     'maak pin D5
uitgang voor relais via bc547 (4k7)
Config Portb.7 = Output                                     'maak pin D5
uitgang voor relais via bc547 (4k7)
Config Pind.6 = Input                                       'maak pind0
ingang voor druk knop
Portd.6 = 1                                                 'gebruik
pullup weerstand intern

Relais Alias Portd.0
Led Alias Portb.7
Knop Alias Pind.6

Config Int1 = Rising                                        'config Int0
op high Level
On Int1 Isr_von_int0                                        'bij hoge
puls ga naar>

Config Timer1 = Timer , Prescale = 256                      'config
Timer1 10000000\256=39062.5
On Timer1 Isr_von_timer1                                    'bij
overloop timer ga naar>
                                         'Interrupts  aanzetten

Timer1 = 26472                                              'is 1 sec
10000000\256=39062.5  65535-39062.5=26472.5
C = 0


Start:
While Knop = 1
Wend
Gosub Neemop
                                                 'aanzetten van
Interrupt Int0
Cls
 Do

 If B => 209 Then                                           'kijk of
waarde binnen de 420hz 0,5sec norm is
 If B =< 211 Then                                           'zo ja tel 1
op bij c en maar waarde weer 0
 C = C + 1
 B = 0
 End If
 End If

 If B > 1 Then                                              'kijk of
waarde buiten norm 420hz 0,5 valt
 If B < 209 Then                                            'zo ja reset
gegevens
 If B > 211 Then
 B = 0
 C = 0
 End If
 Else
 C = 0
 End If
 C = 0
 End If


 If B > 0 Then                                              'kijk of
waarde buiten norm 420hz 1 sec valt
 If B > 415 Then                                            'zo ja reset
gegevens
 If B < 425 Then
 B = 0
 D = D + 1
 Else
 D = 0
 End If
 End If
 End If

 If D => 15 Then Gosub Legneer
'telefoon wordt opgenomen na x keer
 If C => 5 Then Gosub Legneer                               'telefoon
neergelgt na x keer
 Loop
 End



 Isr_von_int0:                                              'isr van
Int0
 Enable Timer1
 A = A + 1
 Return

 Isr_von_timer1:                                            'isr van
timer1
 Disable Timer1
 B = A
 A = 0
 Timer1 = 26472
 Return

Neemop:
D = 0
C = 0
B = 0
A = 0
Enable Interrupts
Enable Int1
Set Relais
Set Led
Return

Legneer:
Reset Relais
Reset Led
Disable Int1
Goto Start

von Rene L. (rene046)


Lesenswert?

Hallo,

Habe nog ein problem.

bin umgeschalted auf der interner Quarz fon 8mhz anstat 10000000

laut berechnung habe ich folgende gemacht

8000000\256 fon prescaler bekomme ich 31250
also pro secunde 31250 pulse.
da ich dem 16 bit counter nutze
65535-31250=34285
wehn ich dem jetz nutze bekomme ich
bei 420hz signal nicht meine 420 im lcd sonder 394

wo liegt dies an ?

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
Noch kein Account? Hier anmelden.