Forum: Mikrocontroller und Digitale Elektronik Beschaltung um AudioSignal in uC zu bekommen


von BaumPaul (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

ich teste gerade eine Schaltung, die ich im Netz gefunden habe. Es wird 
ein Audiosignal über eine Vorbeschaltung in einen uC gebracht (Bild im 
Anhang).

Die Software dazu löst dann Interrupts aus etc....da tut sich aber 
nichts.
Auf den ersten Blick konnte ich keine Fehler erkennen (bin allerdings 
nicht so Basic bewandert).

Hier mal der Code:
1
$regfile = "m88def.dat"
2
$crystal = 8000000
3
4
5
Ddrd = &B00010000
6
Portd.2 = 1
7
8
9
Config Timer1 = Timer , Prescale = 1 , Capture Edge = Rising , Noise Cancel = 1
10
Config Aci = On , Compare = On , Trigger = Rising
11
12
On Icp1 Oncapture
13
Enable Icp1
14
15
On Int0 Ontaster
16
Config Int0 = Falling
17
Enable Int0
18
19
Enable Interrupts
20
21
Dim Zaehler As Word
22
Dim Icr_neu As Word
23
Dim Icr_alt As Word
24
Dim Frequlong As Long
25
Dim Frequenz As Word
26
Dim A(5) As Word
27
Dim Frequsumme As Word
28
Dim Adizaehler As Integer
29
Dim Durchschnitt As Word
30
Dim Grenzeo As Word
31
Dim Grenzeu As Word
32
Dim Ton As String * 1
33
Dim Tonalt As String * 1
34
Dim Folge As String * 5
35
Dim Timeout As Word
36
37
38
Main:
39
40
Waitms 2
41
42
Frequlong = 8000000 / Icr_neu
43
Icr_neu = 1
44
Frequenz = Frequlong
45
46
Incr Timeout
47
Rem Portd.4 = 0
48
49
If Timeout > 40 Then
50
   Folge = ""
51
   Tonalt = ""
52
   Timeout = 0
53
End If
54
55
A(5) = A(4)
56
A(4) = A(3)
57
A(3) = A(2)
58
A(2) = A(1)
59
A(1) = Frequenz
60
61
Frequsumme = 0
62
63
For Adizaehler = 1 To 5
64
   Frequsumme = Frequsumme + A(adizaehler)
65
Next
66
67
Durchschnitt = Frequsumme / 5
68
Grenzeo = A(1) + 10
69
Grenzeu = A(1) - 10
70
71
If Durchschnitt > Grenzeu And Durchschnitt < Grenzeo Then
72
73
Portd.4 = 0
74
Select Case Durchschnitt
75
   Case 1050 To 1070 : Ton = "1"
76
   Case 1150 To 1170 : Ton = "2"
77
   Case 1260 To 1280 : Ton = "3"
78
   Case 1390 To 1410 : Ton = "4"
79
   Case 1520 To 1540 : Ton = "5"
80
   Case 1660 To 1680 : Ton = "6"
81
   Case 1820 To 1840 : Ton = "7"
82
   Case 1990 To 2010 : Ton = "8"
83
   Case 2190 To 2210 : Ton = "9"
84
   Case 2390 To 2410 : Ton = "0"
85
   Case 2590 To 2610 : Ton = "w"
86
   Case Else : Goto Main
87
End Select
88
   Else : Goto Main
89
End If
90
91
If Ton = Tonalt Then Goto Main
92
93
Tonalt = Ton
94
Folge = Folge + Ton
95
Timeout = 0
96
97
If Len(folge) = 5 Then
98
99
Rem Print Folge
100
Rem Portd.4 = 0
101
102
   If Folge = "29104" Then
103
      Portd.4 = 1
104
   End If
105
106
   Folge = ""
107
108
End If
109
110
Goto Main
111
112
Ontaster:
113
114
   Portd.4 = 0
115
116
Return
117
118
Oncapture:
119
120
Rem   Portd.4 = 0
121
122
   Zaehler = Timer1
123
   Icr_neu = Zaehler - Icr_alt
124
   Icr_alt = Zaehler
125
126
Return

Das ganze soll dann einen 5-Ton Decoder darstellen. Getestet wird mit 
einem Testprogramm für 5Tonschleifen, das eben so eine 5Tonfolge auslöst 
und über die Vorbeschaltung in den uC gelangt. Das einzige was bei mir 
passiert, dass die LED an PD4 an geht und an bleibt. Der Controller 
Mega88 läuft mit 8Mhz int. Takt.

Hab auch schon versucht vorher die LED auszuschalten um zu sehen wo es 
hackt (siehe 'Rems').
Kann ich irgendwie überprüfen ob die Vorbeschaltung richtig 
funktioniert? Da kann man zwar nicht viel falsch machen aber sicher ist 
sicher.

Danke schonmal

BPaul

von Benedikt K. (benedikt)


Lesenswert?

Naja, die Schaltung ist nicht gerade perfekt.
Ich würde beide Pins auf halbe Betriebsspannung legen, und an einem der 
beiden das Signal über den Kondensator einkoppeln.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

C8 läd sich auf. Und dann? Die Schaltung ist murks. Da der 
Analog-Comparator benutzt wird, muß außerdem die Spannung genug Hub 
haben, um die Schaltschwelle von x.xx Volt, die intern von der Referenz 
kommt oder extern bereitgestellt wird, zu über- und auch wieder zu 
unterschreiten.

von BaumPaul (Gast)


Lesenswert?

Moin,

danke für die Antworten. Wie sollte man dann deiner Meinung nach die 
Hardware aufbauen?

BPaul

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Da müßte ein OV mit veränderlicher Verstärkung und veränderbarer 
Ruhespannung. Dessen Ausgang kommt an den Analog-Komparator. Auf die 
Weise kann man verschiedenste Eingangssignale auf ein genügend starkes 
und somit für den µC auswertbares Signal anpassen.

von BaumPaul (Gast)


Lesenswert?

Hi,

kannst das mal zeichnen wie du das meinst? Bin elektronisch nicht soooo 
bewandert. Es sind natürlich auch noch andere Möglichkeiten erwünscht!

Danke, BPaul

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Angehängte Dateien:

Lesenswert?

Etwa so (Bild ist hier aus dem Forum aus Elektronik allgemein -> 
Operationverstärker). R3 und R5 stellst Du leicht unter die 
Referenzspannung des Analogkomperators so daß dieser noch nicht 
umschaltet. Mit R2 und R4 stellst Du die Verstärkung ein, könnte hier 
wohl schon so bleiben. Als OV nimmst Du den OPA340, der kommt mit 5V aus 
und beherrscht den rail-to-rail-Betrieb.

von Robin T. (rotoe) Benutzerseite


Lesenswert?

5-Ton-Decoder wie lustig habe gerade meinen 5-Ton-Codierer fertig.
Heißt: 5 Zahlen rein->5 Töne wieder raus^^

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Travel Rec. wrote:
> C8 läd sich auf. Und dann? Die Schaltung ist murks.

Eben, da kommt doch nichts durch - oder verstehe ich da etwas falsch?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Gut, C2 in der oben geposteten OV-Schaltung muß prinzipbedingt 
entfallen. Hatte ich noch vergessen.

von BaumPaul (Gast)


Lesenswert?

Hi,

> R3 und R5 stellst Du leicht unter die
> Referenzspannung des Analogkomperators so daß dieser noch nicht
> umschaltet.

Das sagst du so leicht :-) Bin kein Elektroniker, kannst du mir da auf 
die Sprünge helfen?

Danke, BPaul

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wenn Du die interne Referenz von 1.1V nimmst, stellst Du den 
Spannunsteiler auf 1V ein. Du kannst ihn auch leicht über die 
Schwellspannung stellen, also 1,2V. Hauptsache, der Analog-Komparator 
kippt ohne Signal nicht ständig um. Im einfachsten Fall ersetzt Du R3 
und R5 durch einen Trimmwiderstand, dann kannst Du den Umschaltpunkt 
durch Drehen ermitteln und dann drehst Du wieder ein kleines Stück 
zurück.

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.