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