Impulse Zählen und Auswerten

dg2ygq

Neues Mitglied
23. Juli 2007
239
0
0
Bielefeld
Sprachen
Ich möchte NF-Frequenzen zwischen 60 und 250Hz "auswerten".
Nun habe ich mir gedacht, dass die Impulse eine Zeit lang gezählt werden, und das Zähl-Ergebnis weiter verarbeite.
Ein Ähnliches Projetzt habe ich hier gefunden:
http://home.arcor.de/output/elektronik/5ton-AVR.pdf

Wer kann mir beim (Basic)Grundgerüst helfen? Mega8 solls werden, verschiedne Quarze sind auch vorhanden.
Timer/Counter usw usw?

Genau geht geht es um diese Frequenzen:
http://de.wikipedia.org/wiki/CTCSS


Interessant wäre auch ein Signalgeber, der genau diese NF-Frequenzen ausgibt. Ich glaube dieses ist die einfachere Hälfte?!

Vielleicht habt ihr hierzu auch noch ein kleines (Basic)Programm auf Lager?
 
Puh, das Ton-erzeugen ist dann doch nicht ganz so einfach :eek:
Ich habe es erst mal so versucht :
Code:
$regfile = "m16def.dat"
$crystal = 16000000
Dim Timervorgabe As Byte
Config Timer0 = Timer , Prescale = 1024
On Timer0 Test
Timervorgabe = 224
Enable Timer0
Enable Interrupts
Config Portd = Output
Main:
Do
Loop
End
Test:
Timer0 = Timervorgabe
Toggle Portd.5
Return

So zaubert mir das ding schon schöne Frequenzen, aber genau die, die ich nicht haben will :mad:

Hatt von Euch jemand eine Idee wie ich über Timer1 und OC1A so tiefe Frequenzen arbeiten kann?


Zum Hauptproblem, die Auswertung: fast gelöst!
Ich habe einen Frequenzzähler genommen, und statt dass das Ergebnis auf dem LCD angezeigt wird, vergleiche ich es mit einem Wert aus einer Tabelle. Wenns passt schaltet ein Pin auf High, passt es nicht, gehts wieder zum Frequenzzählen!
 
So zaubert mir das ding schon schöne Frequenzen, aber genau die, die ich nicht haben will :mad:

Hatt von Euch jemand eine Idee wie ich über Timer1 und OC1A so tiefe Frequenzen arbeiten kann?
Mit dem CTC Mode geht es so:
Code:
$regfile = "m16def.dat"
$crystal = 8000000
Config Timer1 = timer , Clear Timer = 1  , Compare A = Toggle , Prescale = 1
Enable Timer1
Enable Interrupts
Config Portd = Output
Dim Frequenz(50) As Word
Frequenz(1) = 59701          '67      ~ 67,001
Frequenz(2) = 57720          '69,3   ~ 69,3
Frequenz(3) = 55633          '71,9   ~ 71,9
Frequenz(4) = 53763          '74,4   ~ 74,401
Frequenz(5) = 51948          '77      ~ 77
Frequenz(6) = 50188          '79,7   ~ 79,7
Frequenz(7) = 48485          '82,5   ~ 82,5
Frequenz(8) = 46838          '85,4   ~ 85,401
Frequenz(9) = 45198          '88,5   ~ 88,499
Frequenz(10) = 43716        '91,5   ~ 91,5
Frequenz(11) = 42194        '94,8   ~ 94,8
Frequenz(12) = 41068        '97,4   ~ 97,399
Frequenz(13) = 40000        '100    ~ 100
Frequenz(14) = 38647        '103,5 ~ 103,501
Frequenz(15) = 37313        '107,2 ~ 107,201
Frequenz(16) = 36069        '110,9 ~ 110,899
Frequenz(17) = 34843        '114,8 ~ 114,801
Frequenz(18) = 33670        '118,8 ~ 118,8
Frequenz(19) = 32520        '123   ~ 123,001
Frequenz(20) = 31422        '127,3 ~ 127,299
Frequenz(21) = 30349        '131,8 ~ 131,8
Frequenz(22) = 29304        '136,5 ~ 136,5
Frequenz(23) = 28309        '141,3 ~ 141,298
Frequenz(24) = 27360        '146,2 ~ 146,199
Frequenz(25) = 26420        '151,4 ~ 151,4
Frequenz(26) = 25526        '156,7 ~ 156,703
Frequenz(27) = 25031        '159,8 ~ 159,802
Frequenz(28) = 24661        '162,2 ~ 162,199
Frequenz(29) = 24169        '165,5 ~ 165,501
Frequenz(30) = 23824        '167,9 ~ 167,898
Frequenz(31) = 23351        '171,3 ~ 171,299
Frequenz(32) = 23015        '173,8 ~ 173,8
Frequenz(33) = 22561        '177,3 ~ 177,297
Frequenz(34) = 22235        '179,9 ~ 179,897
Frequenz(35) = 21798        '183,5 ~ 183,503
Frequenz(36) = 21482        '186,2 ~ 186,202
Frequenz(37) = 21064        '189,9 ~ 189,897
Frequenz(38) = 20747        '192,8 ~ 192,799
Frequenz(39) = 20346        '196,6 ~ 196,599
Frequenz(40) = 20050        '199,5 ~ 199,501
Frequenz(41) = 19656        '203,5 ~ 203,5
Frequenz(42) = 19370        '206,5 ~ 206,505
Frequenz(43) = 18984        '210,7 ~ 210,704
Frequenz(44) = 18340        '218,1 ~ 218,103
Frequenz(45) = 17723        '225,7 ~ 225,695
Frequenz(46) = 17460        '229,1 ~ 229,095
Frequenz(47) = 17123        '233,6 ~ 233,604
Frequenz(48) = 16543        '241,8 ~ 241,794
Frequenz(49) = 15981        '250,3 ~ 250,297
Frequenz(50) = 15742        '254,1 ~ 254,097

OCR1A=Frequenz(1)
Do
Loop

End
Es ist übrigens in diesem Fall besser, wenn du einen 8MHz Quarz nimmst.
Die Werte ergeben sich z.B. so:
Frequenz(27) = 8.000.000 / 159,8 / 2 = 25031,28911 (gerundet = 25031)
Das letzte durch 2 kommt, weil der Ausgang nur toggelt.
Bei 8MHz kommst du für alle Werte (also 59701 - 15742) in den Bereich von 16-bit, was die Auflösung von Timer1 ist.
Du musst im Programm also nur OCR1A auf den richtigen Wert setzen und bekommst am Ausgang PortD.5 die entsprechende Frequenz. Die größte Abweichung ist dabei etwa 6/1000 Hz bei Frequenz(48).

HBA
 
Woooooooow, das ja mehr als nur ein "Gerüst", das ist ja das vollständige Programm!
Sogar die komplette Tabelle hast du übernommen und ausgerechnet!
Funktioniert ganz genau so wie es soll (OK, den Quarz musste ich geringfügig ziehen). Vielen lieben Dank für deine Mühe.

Micha
 
... das ist ja das vollständige Programm!
Das ist ja das Gute, wenn du es in Hardware machst. Du brauchst nur den Config Befehl um alles aufzusetzen. Dann noch das Register auf den gewünschten Wert setzen und fertig.
Mit Prescale=1 kommst du am Leichtesten zu den gewünschten Werten. Dies geht aber nur, wenn du HW Timer benutzt. Musst du erst einmal in den Interrupt, dann ist es sehr schwer, die Genauigkeit hinzubekommen.
Je höher die Frequenz wird, umso ungenauer wird es übrigens, bzw. um so weniger Werte triffst du genau, weil die Schrittweite immer größer wird.

(OK, den Quarz musste ich geringfügig ziehen)
Es kann sein, dass du alle Werte um eins kleiner machen musst. Habe ich mir noch nicht so genau überlegt.

Die Tabelle ist übrigens in Excel in ein paar Minuten errechnet.

HBA
 
Ja stimmt, bei 1kHz wird die Schrittweite schon merklich größer. Aber das brauche ich hierbei ja nicht.

Kann ich das Rechtecksignal mit äußeren Bauteilen in eine Sinus(ähnliche) Schwingung umformen? gibt es dafür Bauteile/Schaltungen?
Die Frequenzen durch PWM erzeugen und mit RC-Kombinationen "glätten" wäre auch eine Möglichkeit, aber wahrscheinlich mehr als aufwändig ?
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)