Fragen zu Bascom DMXSLAVE

#1575362
Lesenswert?

Hallo Leute,

habe ein paar fragen zum HIGHLEVEL Befehl "Config DMXSLAVE" in Bascom.

Hier erst mal mein Code:
1
'$sim
2
$regfile = "m8515.dat"                                      'Atmega 8515-16PU
3
$crystal = 16000000                                         'Quarz 8Mhz extern
4
$hwstack = 100
5
$swstack = 100
6
$framesize = 100
7
Config Dmxslave = Com1 , Channels = 9 , Store = 9
8
Enable Interrupts
9

10

11

12
'Programmmvariablen:
13
Dim Teiladresse1 As Bit
14
Dim Teiladresse2 As Byte
15
Dim Teiladresse3 As Byte
16
Dim Teiladresse4 As Byte
17
Dim Teiladresse5 As Byte
18
Dim Teiladresse6 As Byte
19
Dim Teiladresse7 As Byte
20
Dim Teiladresse8 As Byte
21
Dim Teiladresse9 As Word
22
Dim Adresse As Word
23
Dim Timer_zaehler As Byte
24
Dim Dimmer_kanal_1 As Byte
25
Dim Dimmer_kanal_2 As Byte
26
Dim Dimmer_kanal_3 As Byte
27
Dim Dimmer_kanal_4 As Byte
28
Dim Dimmer_kanal_5 As Byte
29
Dim Dimmer_kanal_6 As Byte
30
Dim Dimmer_kanal_7 As Byte
31
Dim Dimmer_kanal_8 As Byte
32
Dim Dimmer_kanal_9 As Byte
33

34

35
'Subs / Funktionen deklarieren
36
Declare Sub Dmx_adresse_auslesen
37
Declare Sub Led_rot_doppelblinken
38

39

40

41
'Eingänge zuweisen
42
Config Pinc.0 = Input                                       'Eingänge von PortC.0 bis PortC.7 = DIP-Schalter
43
Config Pinc.1 = Input
44
Config Pinc.2 = Input
45
Config Pinc.3 = Input
46
Config Pinc.4 = Input
47
Config Pinc.5 = Input
48
Config Pinc.6 = Input
49
Config Pinc.7 = Input
50
Config Pine.1 = Input                                       'Eingänge von PortE.1 bis PortE.2 = DIP-Schalter
51
Config Pine.2 = Input
52
Config Pind.5 = Input                                       'Spare 1 (Ausgabe Invertieren)
53
Config Pind.4 = Input                                       'Spare 2
54
Config Pind.3 = Input                                       'Spare 3
55

56

57
'Ausgänge zuweisen
58
Config Portd.7 = Output                                     'LED Rot (Fehler)
59
Config Portd.6 = Output                                     'LED Orange (DMX Aktiv)
60
Config Porte.0 = Output                                     'Kanal 1
61
Config Porta.7 = Output                                     'Kanal 2
62
Config Porta.6 = Output                                     'Kanal 3
63
Config Porta.5 = Output                                     'Kanal 4
64
Config Porta.4 = Output                                     'Kanal 5
65
Config Porta.3 = Output                                     'Kanal 6
66
Config Porta.2 = Output                                     'Kanal 7
67
Config Porta.1 = Output                                     'Kanal 8
68
Config Porta.0 = Output                                     'Kanal 9
69

70

71

72

73
'Eingänge Alias Zuweisen
74
Dip_1 Alias Pinc.0
75
Dip_2 Alias Pinc.1
76
Dip_3 Alias Pinc.2
77
Dip_4 Alias Pinc.3
78
Dip_5 Alias Pinc.4
79
Dip_6 Alias Pinc.5
80
Dip_7 Alias Pinc.6
81
Dip_8 Alias Pinc.7
82
Dip_9 Alias Pine.2
83
Dip_10 Alias Pine.1
84
Spare_1 Alias Pind.5
85
Spare_2 Alias Pind.4
86
Spare_3 Alias Pind.3
87

88

89
'Ausgänge Alias Zuweisen
90
Led_rot Alias Portd.7                                       'Fehler LED
91
Led_orange Alias Portd.6                                    'DMX aktiv LED
92
Kanal_1 Alias Porte.0
93
Kanal_2 Alias Porta.7
94
Kanal_3 Alias Porta.6
95
Kanal_4 Alias Porta.5
96
Kanal_5 Alias Porta.4
97
Kanal_6 Alias Porta.3
98
Kanal_7 Alias Porta.2
99
Kanal_8 Alias Porta.1
100
Kanal_9 Alias Porta.0
101

102

103
'interne Pullup aktivieren
104
Portc.0 = 1
105
Portc.1 = 1
106
Portc.2 = 1
107
Portc.3 = 1
108
Portc.4 = 1
109
Portc.5 = 1
110
Portc.6 = 1
111
Portc.7 = 1
112
Porte.2 = 1
113
Porte.1 = 1
114
Portd.5 = 1
115
Portd.4 = 1
116
Portd.3 = 1
117

118

119

120
Config Timer0 = Timer , Prescale = 1
121
On Timer0 Timerueberlauf
122
Enable Timer0
123

124

125
'##################START#################
126

127

128
'Power-On Sequenz
129
Led_rot = 1
130
Led_orange = 1
131
Waitms 500
132
Led_rot = 0
133
Led_orange = 0
134

135

136

137

138

139
'Hauptschleife
140

141
Do
142
Main:
143

144

145

146

147

148
'Adresse auslesen:
149
Call Dmx_adresse_auslesen
150

151

152
'Adresse auswerten:
153
If Adresse = 0 And Dip_10 = 1 Then
154
Call Led_rot_doppelblinken
155
End If
156

157

158

159
'Test
160

161
If _dmx_received(1) = 1 Then
162
Dimmer_kanal_1 = 255
163
End If
164

165
dimmer_kanal_2 = _dmx_received(2)
166

167

168

169

170

171

172

173

174

175
Loop
176

177

178
'Sub DMX_Adresse_Auslesen
179
Sub Dmx_adresse_auslesen:
180

181
'Dip-Schalter abfragen
182
  If Dip_1 = 0 Then
183
  Teiladresse1 = 1
184
  Else
185
  Teiladresse1 = 0
186
  End If
187

188
  If Dip_2 = 0 Then
189
  Teiladresse2 = 2
190
  Else
191
  Teiladresse2 = 0
192
  End If
193

194
  If Dip_3 = 0 Then
195
  Teiladresse3 = 4
196
  Else
197
  Teiladresse3 = 0
198
  End If
199

200
  If Dip_4 = 0 Then
201
  Teiladresse4 = 8
202
  Else
203
  Teiladresse4 = 0
204
  End If
205

206
  If Dip_5 = 0 Then
207
  Teiladresse5 = 16
208
  Else
209
  Teiladresse5 = 0
210
  End If
211

212
  If Dip_6 = 0 Then
213
  Teiladresse6 = 32
214
  Else
215
  Teiladresse6 = 0
216
  End If
217

218
  If Dip_7 = 0 Then
219
  Teiladresse7 = 64
220
  Else
221
  Teiladresse7 = 0
222
  End If
223

224
  If Dip_8 = 0 Then
225
  Teiladresse8 = 128
226
  Else
227
  Teiladresse8 = 0
228
  End If
229

230
  If Dip_9 = 0 Then
231
  Teiladresse9 = 256
232
  Else
233
  Teiladresse9 = 0
234
  End If
235

236
'Adresse zusammenrechnen
237

238
  Adresse = 0
239
  Adresse = Adresse + Teiladresse1
240
  Adresse = Adresse + Teiladresse2
241
  Adresse = Adresse + Teiladresse3
242
  Adresse = Adresse + Teiladresse4
243
  Adresse = Adresse + Teiladresse5
244
  Adresse = Adresse + Teiladresse6
245
  Adresse = Adresse + Teiladresse7
246
  Adresse = Adresse + Teiladresse8
247
  Adresse = Adresse + Teiladresse9
248

249
'Adresse festlegen
250
  _dmx_address = Adresse
251

252

253
End Sub
254

255

256

257

258

259

260
'Timerüberlauf
261

262
Timerueberlauf:
263

264

265
 Timer0 = 6
266
'If Timer_zaehler = 255 Then
267
'Timer_zaehler = 0
268
'End If
269

270
Incr Timer_zaehler                                          ' Zähler hochzählen lassen
271

272

273
 If Timer_zaehler < Dimmer_kanal_1 Then
274
    Kanal_1 = 1
275
  Else
276
    Kanal_1 = 0
277
  End If
278

279
  If Timer_zaehler < Dimmer_kanal_2 Then
280
    Kanal_2 = 1
281
  Else
282
    Kanal_2 = 0
283
  End If
284

285
  If Timer_zaehler < Dimmer_kanal_3 Then
286
    Kanal_3 = 1
287
  Else
288
    Kanal_3 = 0
289
  End If
290

291
  If Timer_zaehler < Dimmer_kanal_4 Then
292
    Kanal_4 = 1
293
  Else
294
    Kanal_4 = 0
295
  End If
296

297
  If Timer_zaehler < Dimmer_kanal_5 Then
298
    Kanal_5 = 1
299
  Else
300
    Kanal_5 = 0
301
  End If
302

303
  If Timer_zaehler < Dimmer_kanal_6 Then
304
    Kanal_6 = 1
305
  Else
306
    Kanal_6 = 0
307
  End If
308

309
  If Timer_zaehler < Dimmer_kanal_7 Then
310
    Kanal_7 = 1
311
  Else
312
    Kanal_7 = 0
313
  End If
314

315
  If Timer_zaehler < Dimmer_kanal_8 Then
316
    Kanal_8 = 1
317
  Else
318
    Kanal_8 = 0
319
  End If
320

321
  If Timer_zaehler < Dimmer_kanal_9 Then
322
    Kanal_9 = 1
323
  Else
324
    Kanal_9 = 0
325
  End If
326

327

328

329
Return
330

331

332
'Sub Led_rot_doppelblinken
333
Sub Led_rot_doppelblinken:
334

335
Led_rot = 1
336
Waitms 50
337
Led_rot = 0
338
Waitms 20
339
Led_rot = 1
340
Waitms 50
341
Led_rot = 0
342
Waitms 200
343
End Sub
344

345

346

347

348

349

350
'Ende des Programms
351
End

1. Das umwandeln von _dmx_received(x) in die Dimmerwerte funktioniert 
leider nicht. Kann mir jemand sagen warum?
2. Wie kann ich mit "DMXSLAVE" auswerten, ob ein DMX-Signal 
angeschlossen ist?
3. Wie kann ich feststellen, ob momentan Daten empfangen werden?
4. Wie kann ich feststellen, ob das DMX Signal vertauscht ist?

Ich hoffe ihr könnt mir da ein bisschen mit Helfen.

Danke schonmal

PS: Im Anhang meine Fuses für den 8051

Bye
Angehängte Dateien:
Gast #1575393
Lesenswert?

In dem Quelltext stimmt die Quarzfrequenz nicht mit dem Kommentar 
überein.
Bei DMX muß $Baud die Übertragung mit 250kBaud laufen, sonst wird es
nicht gehen.

Schreib erst mal nur ein Probierprogramm, was die LED mit 1Hz blinken
läßt, um zu sehen, ob überhaupt der richtige Takt eingestellt ist, bevor
Du hier weitersuchst.

Guck auch mal hier hin:
http://www.ledstyles.de/ftopic11072.html

MfG Paul
#1575434
Lesenswert?

Hi,

das mit der Quarzfrequenz war mein Fehler. Das Kommentar war falsch.

So Baud habe ich mit rein gemacht. Hier mein neuer Code
1
'$sim
2
$regfile = "m8515.dat"                                      'Atmega 8515-16PU
3
$crystal = 16000000                                         'Quarz 16Mhz extern
4
$hwstack = 100
5
$swstack = 100
6
$framesize = 100
7
$baud = 250000
8
Config Dmxslave = Com1 , Channels = 9 , Start = 1 , Store = 9
9
Enable Interrupts
10

11

12

13

14

15
'Eingänge zuweisen
16
Config Pinc.0 = Input                                       'Eingänge von PortC.0 bis PortC.7 = DIP-Schalter
17
Config Pinc.1 = Input
18
Config Pinc.2 = Input
19
Config Pinc.3 = Input
20
Config Pinc.4 = Input
21
Config Pinc.5 = Input
22
Config Pinc.6 = Input
23
Config Pinc.7 = Input
24
Config Pine.1 = Input                                       'Eingänge von PortE.1 bis PortE.2 = DIP-Schalter
25
Config Pine.2 = Input
26
Config Pind.5 = Input                                       'Spare 1 (Ausgabe Invertieren)
27
Config Pind.4 = Input                                       'Spare 2
28
Config Pind.3 = Input                                       'Spare 3
29

30

31
'Ausgänge zuweisen
32
Config Portd.7 = Output                                     'LED Rot (Fehler)
33
Config Portd.6 = Output                                     'LED Orange (DMX Aktiv)
34
Config Porte.0 = Output                                     'Kanal 1
35
Config Porta.7 = Output                                     'Kanal 2
36
Config Porta.6 = Output                                     'Kanal 3
37
Config Porta.5 = Output                                     'Kanal 4
38
Config Porta.4 = Output                                     'Kanal 5
39
Config Porta.3 = Output                                     'Kanal 6
40
Config Porta.2 = Output                                     'Kanal 7
41
Config Porta.1 = Output                                     'Kanal 8
42
Config Porta.0 = Output                                     'Kanal 9
43

44

45

46

47
'Eingänge Alias Zuweisen
48
Dip_1 Alias Pinc.0
49
Dip_2 Alias Pinc.1
50
Dip_3 Alias Pinc.2
51
Dip_4 Alias Pinc.3
52
Dip_5 Alias Pinc.4
53
Dip_6 Alias Pinc.5
54
Dip_7 Alias Pinc.6
55
Dip_8 Alias Pinc.7
56
Dip_9 Alias Pine.2
57
Dip_10 Alias Pine.1
58
Spare_1 Alias Pind.5
59
Spare_2 Alias Pind.4
60
Spare_3 Alias Pind.3
61

62

63
'Ausgänge Alias Zuweisen
64
Led_rot Alias Portd.7                                       'Fehler LED
65
Led_orange Alias Portd.6                                    'DMX aktiv LED
66
Kanal_1 Alias Porte.0
67
Kanal_2 Alias Porta.7
68
Kanal_3 Alias Porta.6
69
Kanal_4 Alias Porta.5
70
Kanal_5 Alias Porta.4
71
Kanal_6 Alias Porta.3
72
Kanal_7 Alias Porta.2
73
Kanal_8 Alias Porta.1
74
Kanal_9 Alias Porta.0
75

76

77
'interne Pullup aktivieren
78
Portc.0 = 1
79
Portc.1 = 1
80
Portc.2 = 1
81
Portc.3 = 1
82
Portc.4 = 1
83
Portc.5 = 1
84
Portc.6 = 1
85
Portc.7 = 1
86
Porte.2 = 1
87
Porte.1 = 1
88
Portd.5 = 1
89
Portd.4 = 1
90
Portd.3 = 1
91

92

93

94
'##################START#################
95

96

97
'Power-On Sequenz
98
Led_rot = 1
99
Led_orange = 1
100
Waitms 1000
101
Led_rot = 0
102
Led_orange = 0
103
Waitms 1000
104
Led_rot = 1
105
Led_orange = 1
106
Waitms 1000
107
Led_rot = 0
108
Led_orange = 0
109
waitms 1000
110

111

112

113

114
'Hauptschleife
115

116
Do
117
Main:
118

119
If _dmx_received(1) > 0 Then
120
Kanal_1 = 1
121
End If
122

123
If _dmx_received(2) > 0 Then
124
Kanal_2 = 1
125
End If
126

127
If _dmx_received(3) > 0 Then
128
Kanal_3 = 1
129
End If
130

131
If _dmx_received(4) > 0 Then
132
Kanal_4 = 1
133
End If
134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149
Loop
150

151

152

153

154

155

156

157

158

159
'Ende des Programms
160
End

Leider läuft es immer noch nicht.

PS: Den Link kannte ich schon, hat mir aber leider nicht weiter 
geholfen.



Bye
Gast #3386208
Lesenswert?

Also Grundlagen Prüfen.
Dein Avr ist ein Mega8515? Gibt es den überhaupt noch?
Du hast 16Mhz anliegen Quarz oder Oscilator und keinen Avr internen 
Teiler aktiv.
Woher kommt dein Dmx Signal? Der Bus Treiber alias sn75176 arbeiten 
ordentlich ? An Rxd vom Avr angeschlossen? Spannungsversorgung 
abblockkondensatoren Resetbeschaltung ordentlich?

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