Forum: Mikrocontroller und Digitale Elektronik Fragen zu Bascom DMXSLAVE


von Stefan V. (lj-products)


Angehängte Dateien:

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

von Paul Baumann (Gast)


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

von Stefan V. (lj-products)


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

von Stefan V. (lj-products)


Lesenswert?

Hmm keiner eine Idee? Wenn nicht dann muss ich mich mal an MCS wenden ;)

von Felix (Gast)


Lesenswert?

Stefan Voll schrieb:
> Config Porte.0 = Output

Du hast manchmal Port E  geschrieben sollte das so sein

von Sven (Gast)


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?

von Sven (Gast)


Lesenswert?

ach ja
Config Pinc.0 = Input Ich kenne nur Config portc.0 = Input
Hast du ein Logic analyser oder ein Oscilloscope ? Zum prüfen ob 
Ordentliche Signale vom Bus am Avr ankommen.

von Daniel B. (Gast)


Lesenswert?

Wie Sven schon schrieb:

Es muss "Config PORTx.x = Input" heißen (x natürlich mit dem 
entsprechenden Port/Pin ersetzen).

Edit: Ausgelesen werden Sie dann mit "PINx.x"

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.