Beschaltung um AudioSignal in uC zu bekommen

Gast #804908
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
Angehängte Dateien:
(Firma: TravelRec.) Persönliche Seite #806579
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.
Angehängte Dateien:
Gast #809440
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
(Firma: TravelRec.) Persönliche Seite #809451
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.

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