Forum: Mikrocontroller und Digitale Elektronik DMX Auswertung mit Arduino geht nicht


von max2d (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

so langsam bin ich total am verzweifeln.
Ich habe leider vor ein paar Wochen ein Projekt gestartet, bei dem ich 
DMX mit dem Arduino und der Conceptinetics libary auswerten möchte.

Jetzt habe ich das ganze mal aufgebaut. Leider funktionierts nicht 
richtig.
Wenn ich am Mischpult einen Kanal hochziehe erkennt der Arduino es noch 
richtig und schaltet den endsprechenden Ausgang.

Leider erkennt er es nicht wenn ich einen Kanal wieder runterziehe, der 
Ausgang bleibt immer gesetzt, auch ein Reset hat keine Wirkung. Ich muss 
die ganze Schaltung von der Stromversorgung trennen, dann ist der 
ausgang wieder auf 0V und das ganze Spiel geht von vorne los.

Im Anhang findet ihr meine Auswertung fürs DMX.
PIN1 ->RXD
PIN2/3-> PIN2 von Arduino
PIN4 -> TXD
PIN6 -> DMX
PIN7 -> DMX


Ich hoffe ihr habt ne Idee, ich drehe hier grad echt am Rad, weil das 
ding die ganze zeit zicken macht.

von 0815 (Gast)


Lesenswert?

max2d schrieb:
> Ich hoffe ihr habt ne Idee

Das könnte ein Softwarefehler auf dem Arduino sein. In der 
Conceptinetics Library hätte das wohl schon jemand anders bemerkt.

von max2d (Gast)


Lesenswert?

Vielen Dank für deine Antwort.

Kann ich irgendwie nicht glauben, da das ganze früher schonmal 
funktioniert hat.

Kann es sein, dass ich evtl. EMV Probleme habe?

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Wenn ich am Mischpult einen Kanal hochziehe erkennt der Arduino es noch
>richtig und schaltet den endsprechenden Ausgang.

Was heißt das? Wird der Ausgang nur ein/aus geschaltet oder echt 
gedimmt?

>Leider erkennt er es nicht wenn ich einen Kanal wieder runterziehe, der
>Ausgang bleibt immer gesetzt, auch ein Reset hat keine Wirkung. Ich muss
>die ganze Schaltung von der Stromversorgung trennen, dann ist der
>ausgang wieder auf 0V und das ganze Spiel geht von vorne los.

Klingt nach einem Softwareproblem oder falscher Baudrate.

>Ich hoffe ihr habt ne Idee, ich drehe hier grad echt am Rad, weil das
>ding die ganze zeit zicken macht.

Poste deinen Quelltext als Anhang.

von max2d (Gast)


Lesenswert?

> Was heißt das? Wird der Ausgang nur ein/aus geschaltet oder echt
> gedimmt?
>
Der Ausgang wird nur ein/ausgeschalten.

hier der Quelltext:
1
#include <VirtualWire.h>
2
#include <Conceptinetics.h>
3
4
#define DMX_SLAVE_CHANNELS   5 
5
DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS );
6
7
8
const int ledPin = 13;
9
10
//**************************Zuweisung 230V Ausgänge und Statusanzeige Funkkanäle**************************************
11
const int CH1 = 30;
12
const int CH2 = 31;
13
const int CH3 = 32;
14
const int CH4 = 33;
15
const int CH5 = 34;
16
const int CH6 = 35;
17
const int CH7 = 36;
18
const int CH8 = 37;
19
20
//*****************************Zuweisung DIP Schalter für Addressierung***********************************************
21
const int S1 = 11;
22
const int S2 = 22;
23
const int S3 = 23;
24
const int S4 = 24;
25
const int S5 = 25;
26
const int S6 = 26;
27
const int S7 = 27;
28
const int S8 = 28;
29
const int S9 = 29;
30
31
int DMXaddress = 0;
32
int lastS1 = 0;
33
int lastS2 = 0;
34
int lastS3 = 0;
35
int lastS4 = 0;
36
int lastS5 = 0;
37
int lastS6 = 0;
38
int lastS7 = 0;
39
int lastS8 = 0;
40
int lastS9 = 0;
41
42
43
44
45
void setup()
46
{ 
47
    vw_set_ptt_inverted(true); // Required for DR3100
48
    vw_setup(2000);  // Bits per sec
49
    
50
  // Enable DMX slave interface and start recording
51
  // DMX data
52
  dmx_slave.enable ();  
53
  
54
  // Set start address to 1, this is also the default setting
55
  // You can change this address at any time during the program
56
  dmx_slave.setStartAddress (1);
57
  
58
  // Set led pin as output pin
59
  pinMode ( ledPin, OUTPUT );
60
  
61
  //*************************Zuweisung DIP Schalter für Addressierung als Eingang************************************
62
  pinMode (S1, INPUT);
63
  pinMode (S2, INPUT);
64
  pinMode (S3, INPUT);
65
  pinMode (S4, INPUT);
66
  pinMode (S5, INPUT);
67
  pinMode (S6, INPUT);
68
  pinMode (S7, INPUT);
69
  pinMode (S8, INPUT);
70
  pinMode (S9, INPUT);
71
  
72
  //*************************Zuweisung 230V Ausgänge und Statusanzeige Funkkanäle als Ausgang************************
73
  pinMode (CH1, OUTPUT);
74
  pinMode (CH2, OUTPUT);
75
  pinMode (CH3, OUTPUT);
76
  pinMode (CH4, OUTPUT);
77
  pinMode (CH5, OUTPUT);
78
  pinMode (CH6, OUTPUT);
79
  pinMode (CH7, OUTPUT);
80
  pinMode (CH8, OUTPUT);
81
}
82
83
void loop()
84
{
85
 senden (); 
86
 dmxaddress ();
87
88
 dmx_slave.setStartAddress (DMXaddress);
89
 
90
  
91
  
92
}
93
void dmxaddress () //Einstellen der DMX Addresse
94
{
95
  
96
  if (digitalRead (S1) == HIGH && !lastS1)
97
  {
98
    DMXaddress = DMXaddress+1;
99
    lastS1 = 1;
100
  }  
101
  if (digitalRead(S1)== LOW && lastS1)
102
  {
103
     DMXaddress = DMXaddress-1;
104
     lastS1 = 0;
105
  }
106
  
107
  
108
  
109
  if (digitalRead (S2) == HIGH && !lastS2)
110
  {
111
    DMXaddress = DMXaddress+2;
112
    lastS2 = 1;
113
  }
114
  if (digitalRead(S2)== LOW && lastS2)
115
  {
116
     DMXaddress = DMXaddress-2;
117
     lastS2 = 0;
118
  }
119
  
120
  
121
    if (digitalRead (S3) == HIGH && !lastS3)
122
  {
123
    DMXaddress = DMXaddress+4;
124
    lastS3 = 1;
125
  }
126
  if (digitalRead(S3)== LOW && lastS3)
127
  {
128
     DMXaddress = DMXaddress-4;
129
     lastS3 = 0;
130
  }
131
  
132
  
133
    if (digitalRead (S4) == HIGH && !lastS4)
134
  {
135
    DMXaddress = DMXaddress+8;
136
    lastS4 = 1;
137
  }
138
  if (digitalRead(S4)== LOW && lastS4)
139
  {
140
     DMXaddress = DMXaddress-8;
141
     lastS4 = 0;
142
  }
143
  
144
  
145
  
146
    if (digitalRead (S5) == HIGH && !lastS5)
147
  {
148
    DMXaddress = DMXaddress+16;
149
    lastS5 = 1;
150
  }
151
  if (digitalRead(S5)== LOW && lastS5)
152
  {
153
     DMXaddress = DMXaddress-16;
154
     lastS5 = 0;
155
  }
156
  
157
  
158
    if (digitalRead (S6) == HIGH && !lastS6)
159
  {
160
    DMXaddress = DMXaddress+32;
161
    lastS6 = 1;
162
  }
163
  if (digitalRead(S6)== LOW && lastS6)
164
  {
165
     DMXaddress = DMXaddress-32;
166
     lastS6 = 0;
167
  }
168
  
169
  
170
    if (digitalRead (S7) == HIGH && !lastS7)
171
  {
172
    DMXaddress = DMXaddress+64;
173
    lastS7 = 1;
174
  }
175
  if (digitalRead(S7)== LOW && lastS7)
176
  {
177
     DMXaddress = DMXaddress-64;
178
     lastS7 = 0;
179
  }
180
  
181
  
182
    if (digitalRead (S8) == HIGH && !lastS8)
183
  {
184
    DMXaddress = DMXaddress+128;
185
    lastS8 = 1;
186
  }
187
  if (digitalRead(S8)== LOW && lastS8)
188
  {
189
     DMXaddress = DMXaddress-128;
190
     lastS8 = 0;
191
  }
192
  
193
  
194
    if (digitalRead (S9) == HIGH && !lastS9)
195
  {
196
    DMXaddress = DMXaddress+256;
197
    lastS9 = 1;
198
  }
199
  if (digitalRead(S9)== LOW && lastS9)
200
  {
201
     DMXaddress = DMXaddress-256;
202
     lastS9 = 0;
203
  }
204
  
205
 
206
    
207
}
208
209
void senden ()    //Auswertung der DMX Signale und senden an Empfänger
210
{
211
    if ( dmx_slave.getChannelValue (1) > 127 )    //Wenn CH1 auf 1
212
  {
213
    const char *msg = "CH1_1";                    //Sende CH1_1
214
    vw_send((uint8_t *)msg, strlen(msg));
215
    vw_wait_tx();                                 //Warten bis gesendet    
216
    //delay(200);
217
    digitalWrite(CH1, true);                      //Statusanzeige Kanal
218
    
219
    digitalWrite(13, true);
220
  }  
221
  else
222
  {
223
    const char *msg = "CH1_0";                    //Sende CH1_0
224
    vw_send((uint8_t *)msg, strlen(msg));
225
    vw_wait_tx();                                 //Warten bis gesendet
226
   // delay(200);
227
    digitalWrite(CH1, false);                     //Statusanzeige Kanal
228
    
229
    digitalWrite(13, false);
230
  }
231
  
232
      if ( dmx_slave.getChannelValue (2) > 127 )    //Wenn CH1 auf 1
233
  {
234
    const char *msg = "CH2_1";                    //Sende CH1_1
235
    vw_send((uint8_t *)msg, strlen(msg));
236
    vw_wait_tx();                                 //Warten bis gesendet    
237
    //delay(200);
238
    digitalWrite(CH2, true);                      //Statusanzeige Kanal
239
  }  
240
  else
241
  {
242
    const char *msg = "CH2_0";                    //Sende CH1_0
243
    vw_send((uint8_t *)msg, strlen(msg));
244
    vw_wait_tx();                                 //Warten bis gesendet
245
   // delay(200);
246
    digitalWrite(CH2, false);                     //Statusanzeige Kanal
247
  } 
248
  
249
  
250
        if ( dmx_slave.getChannelValue (3) > 127 )    //Wenn CH1 auf 1
251
  {
252
    const char *msg = "CH3_1";                    //Sende CH1_1
253
    vw_send((uint8_t *)msg, strlen(msg));
254
    vw_wait_tx();                                 //Warten bis gesendet    
255
    //delay(200);
256
    digitalWrite(CH3, true);                      //Statusanzeige Kanal
257
  }  
258
  else
259
  {
260
    const char *msg = "CH3_0";                    //Sende CH1_0
261
    vw_send((uint8_t *)msg, strlen(msg));
262
    vw_wait_tx();                                 //Warten bis gesendet
263
   // delay(200);
264
    digitalWrite(CH3, false);                     //Statusanzeige Kanal
265
  } 
266
  
267
  
268
        if ( dmx_slave.getChannelValue (4) > 127 )    //Wenn CH1 auf 1
269
  {
270
    const char *msg = "CH4_1";                    //Sende CH1_1
271
    vw_send((uint8_t *)msg, strlen(msg));
272
    vw_wait_tx();                                 //Warten bis gesendet    
273
    //delay(200);
274
    digitalWrite(CH4, true);                      //Statusanzeige Kanal
275
  }  
276
  else
277
  {
278
    const char *msg = "CH4_0";                    //Sende CH1_0
279
    vw_send((uint8_t *)msg, strlen(msg));
280
    vw_wait_tx();                                 //Warten bis gesendet
281
   // delay(200);
282
    digitalWrite(CH4, false);                     //Statusanzeige Kanal
283
  } 
284
  
285
  
286
        if ( dmx_slave.getChannelValue (5) > 127 )    //Wenn CH1 auf 1
287
  {
288
    const char *msg = "CH5_1";                    //Sende CH1_1
289
    vw_send((uint8_t *)msg, strlen(msg));
290
    vw_wait_tx();                                 //Warten bis gesendet    
291
    //delay(200);
292
    digitalWrite(CH5, true);                      //Statusanzeige Kanal
293
  }  
294
  else
295
  {
296
    const char *msg = "CH5_0";                    //Sende CH1_0
297
    vw_send((uint8_t *)msg, strlen(msg));
298
    vw_wait_tx();                                 //Warten bis gesendet
299
   // delay(200);
300
    digitalWrite(CH5, false);                     //Statusanzeige Kanal
301
  } 
302
}

von Dennis K. (scarfaceno1)


Lesenswert?

max2d schrieb:
> Kann ich irgendwie nicht glauben, da das ganze früher schonmal
> funktioniert hat.

Wenn das Ganze schon mal funktioniert hat, hast du denn seit dem was am 
Code geändert?
Was?

Hängt da noch ein 2tes Pult dran über einen Merger?
LTP / HTP überprüfen ...

von Ein (Gast)


Lesenswert?

max2d schrieb:
> hier der Quelltext:

als ANHANG

von max2d (Gast)


Angehängte Dateien:

Lesenswert?

es ist nur ein Lichtmischpult angeschlossen.

Ich habe eigendlich nichts am Programm verändert.


Sry, hier der Code nochmal als ANHANG :-)


Ich glaube echt, dass es ein Hardware Problem ist.
Liege ich mit der Vermutung richtig, dass ich eigendlich, da ich nur 
empfangen will RE und DE vom MAX dauerhaft auf GND legen kann?

von Noch mal Ein (Gast)


Lesenswert?

max2d schrieb:
> Sry, hier der Code nochmal als ANHANG :-)

Wenn das ein Arduino-Sketch ist, darfst du ihn gern .ino nennen, weil 
der Filetyp üblicherweise so gekennzeichnet wird ;-)

> Ich glaube echt, dass es ein Hardware Problem ist.

Was verwendest du als Stromversorgung?
Zwischen Empfang über die serielle Schnittstelle und digitaler Anzeige 
über die Statusanzeige kann eigentlich kaum ein anderer Hardwarefehler 
als eine kaputte Stromversorgung dazwischenkommen.

von max2d (Gast)


Lesenswert?

ja, ist ein Arduino Sketch.

Momentan verwende ich mein Labornetzteil. Später soll ein Schaltnetzteil 
die Spannungsversorgung übernehmen.

Über DMX hat man doch ziemlich hohe Datenraten, wäre es da nicht sinvoll 
was gegen Störungen zu unternehmen. Vielleicht habe ich ja nur so ein 
Problem. Also ich meine Verdrillte Leitungen iwelche Kondensatoren...

von San L. (zwillingsfreunde)


Lesenswert?

max2d schrieb:
> Vielleicht habe ich ja nur so ein
> Problem. Also ich meine Verdrillte Leitungen iwelche Kondensatoren...

Falls dem so sei, wird dir ohne einen Schaltplan niemand hier helfen 
können.

von Mike (Gast)


Lesenswert?

max2d schrieb:
> Wenn ich am Mischpult einen Kanal hochziehe erkennt der Arduino es noch
> richtig und schaltet den endsprechenden Ausgang.

Dann lass dir doch mal Anzeigen, was der Arduino vom DMX-Bus empfängt 
(ohne deine Programmlogik).

max2d schrieb:
> Über DMX hat man doch ziemlich hohe Datenraten, wäre es da nicht sinvoll
> was gegen Störungen zu unternehmen.

Einen vernünftigen Abschluss hast du am Bus dran?

von max2d (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang das Schaltbild.


Mike schrieb:
>
> Dann lass dir doch mal Anzeigen, was der Arduino vom DMX-Bus empfängt
> (ohne deine Programmlogik).
>
Also Oszi an RXD/TXD und vom Mischpult irgendwas senden?


>
> Einen vernünftigen Abschluss hast du am Bus dran?

Macht keinen großen unterschied. Funktioniert ohne und mit nicht.
R1 hat bei mir 120 Ohm

Logischerweise habe ich direkt am MAX noch einen 100nF Kondensator.

von Mike (Gast)


Lesenswert?

max2d schrieb:
> Also Oszi an RXD/TXD und vom Mischpult irgendwas senden?

Ja wenn du ein Oszu hast, dann ist Signale angucken natürlich der erste 
Schritt. Trigger auf die Reset-Pause vom DMX und dann guck an, ob das 
vernünftige Pulse mit passender Länge sind. Und hinterm LTC485, i.e. RX 
vom Arduino kannst du dann auch gleich noch mal einen Blick aufs Timing 
werfen.

von max2d (Gast)


Lesenswert?

ok, werde ich mal probieren wenn ich wieder daheim bin.

Könnt ihr mir noch Tipps zur verbindung von DMX Buchse zum MAX und vom 
MAX zum Arduino geben?
Also welche Kable, abgeschirmt verdrillt...?

von Falk B. (falk)


Lesenswert?

Es reicht, welche ohne Wackelkontakt zu nutzen.

von max2d (Gast)


Lesenswert?

:D ich werds versuchen.

Könnt ihr mir noch sagen welchen PIN ich vom MAX mit welchem DMX PIN 
verbinden muss?

Im Internet habe ich gefunden, dass pin 2 DMX- und pin3 DMX+ ist.

Muss jetzt pin2 auf A oder auf B vom MAX?

von max2d (Gast)


Angehängte Dateien:

Lesenswert?

es gibt neueigkeiten.

scheint doch an der Software zu liegen.
Sobald ich meine DMX addressierung abschalte funktioniert die Erkennung 
über DMX!

Wenn ich die DMX addressierung wieder mit auf den Arduino programmiere, 
kann ich den Ausgang nichtmehr abschalten.

Ich habe aber keine Ahnung warum.
Im Anhang nochmals mein Programm

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Sobald ich meine DMX addressierung abschalte funktioniert die Erkennung
>über DMX!

Nun ja. Prinzipiell sollte das schon funktionieren. Wenn aber deine 
Eingänge zur DMX-Adressierung zappeln und dauernd eine andere 
DMX-Adresse erkannt wird, könnte da was in Stottern kommen. Liegen alle 
Eingänge IMMER auf einem definierten Potential? Interne oder externe 
Pull-Ups?

Und gibt es keine NOCH umständlichere Methode, um einfach 9 Bit 
einzulesen?
Und warum ist der alte Zustand wichtig?

Vor allem diese sinnlose Addieren Subtrahieren kann beim Umschalten 
schön daneben gehen. Mach es wenigsten dort sinnvoll und sicher!
1
void dmxaddress () //Einstellen der DMX Addresse
2
{  
3
  int dmx_adr_local=0;
4
  if (digitalRead(S1) == HIGH) dmx_adr_local += 1;
5
  if (digitalRead(S2) == HIGH) dmx_adr_local += 2;
6
  if (digitalRead(S3) == HIGH) dmx_adr_local += 4;
7
  if (digitalRead(S4) == HIGH) dmx_adr_local += 8;
8
  if (digitalRead(S5) == HIGH) dmx_adr_local += 16;
9
  if (digitalRead(S6) == HIGH) dmx_adr_local += 32;
10
  if (digitalRead(S7) == HIGH) dmx_adr_local += 64;
11
  if (digitalRead(S8) == HIGH) dmx_adr_local += 128;
12
  if (digitalRead(S9) == HIGH) dmx_adr_local += 512;
13
  DMXaddress = dmx_adr_local;
14
}

: Bearbeitet durch User
von max2d (Gast)


Lesenswert?

>Liegen alle
> Eingänge IMMER auf einem definierten Potential? Interne oder externe
> Pull-Ups?
Habe externe Pulldown Widerstände verbaut. Und mit dem Oszi gemessen, 
alle Eingänge liegen je nach Schalterstellung definiert auf +5V oder auf 
GND.



> Und gibt es keine NOCH umständlichere Methode, um einfach 9 Bit
> einzulesen?
> Und warum ist der alte Zustand wichtig?
Sorry, aber ich bin nicht so ganz der Programmierchecker.
Über den Alten Zustand kann ich erkennen, ob ich dazu zählen muss oder 
abziehen.

Habe gerade mal deine DMX addressierung genommen, funktioniert leider 
auch nicht wirklich.

Momentan ist die DMX Adressierung allerdings nicht mein größtes Problem.
Ich habe gestern mal meine Schaltung ne weile laufen lassen, und musste 
leider feststellen dass manche Lampen ohne dass ich diese ansteuer 
unkontrolliert an/aus gehen.
Woran könnte das liegen?

von max2d (Gast)


Angehängte Dateien:

Lesenswert?

DMX Adressierung funktioniert mittlerweile fast.
Solange ich S9 auskommentiert. Da muss ich nochmal hardware mäßig glaub 
drüber schauen.


Ich habe gerade per zufall bemerkt, dass die Ausgänge unkontrolliert 
schalten, sobald ich mit einer Hand am offenen geäuse bin, und mit 
meinem Stuhl über den Teppich rolle, vermute mal das meine Schaltung 
noch nicht so wirklich emv tauglich ist.
Soll ich vielleicht, wie es bei anderen Schaltungen zu sehen ist von der 
DMX Buxe zur Versorgungsspannung und zum GND auch einen Widerstand 
schalten, so wie im Anhang gezeigt?

von Falk B. (falk)


Lesenswert?

@max2d (Gast)

>Sorry, aber ich bin nicht so ganz der Programmierchecker.

Merkt man.

>Über den Alten Zustand kann ich erkennen, ob ich dazu zählen muss oder
>abziehen.

Eben das ist ein Irrtum.

>Habe gerade mal deine DMX addressierung genommen, funktioniert leider
>auch nicht wirklich.

Was heißt das konkret?
Wie sind die Pins beschaltet?
Ist es heute nicht mehr üblich, auf die Fragen eines Gesprächspartners 
einzugehen?

>Momentan ist die DMX Adressierung allerdings nicht mein größtes Problem.

Scheinbar daoch, denn mit einer festen Adresse lief es ja, oder?

>Ich habe gestern mal meine Schaltung ne weile laufen lassen, und musste
>leider feststellen dass manche Lampen ohne dass ich diese ansteuer
>unkontrolliert an/aus gehen.
>Woran könnte das liegen?

An deinem Aufbau? Wackelkontakte?

von Falk B. (falk)


Lesenswert?

@max2d (Gast)

>DMX Adressierung funktioniert mittlerweile fast.

Mit welcher Funktion? Deine oder meine?

>Solange ich S9 auskommentiert. Da muss ich nochmal hardware mäßig glaub
>drüber schauen.

>Ich habe gerade per zufall bemerkt, dass die Ausgänge unkontrolliert
>schalten, sobald ich mit einer Hand am offenen geäuse bin, und mit
>meinem Stuhl über den Teppich rolle, vermute mal das meine Schaltung
>noch nicht so wirklich emv tauglich ist.

Sieht so aus. Ich tippe mal auf offene Eingänge, die reagieren auf 
kleinste elektrostatische Felder.

JEDER EIngang muss auf einem definierten Potential liegen! Entweder per 
Pull-Up/Down oder direkter Verbindung zu GND oder VCC.

>Soll ich vielleicht, wie es bei anderen Schaltungen zu sehen ist von der
>DMX Buxe zur Versorgungsspannung und zum GND auch einen Widerstand
>schalten, so wie im Anhang gezeigt?


Nein, das braucht man nicht. Der Master auf dem DMX-Bus treibt diese 
dauerhaft.

von Marco (Gast)


Lesenswert?

1
void dmxaddress () //Einstellen der DMX Addresse
2
{  
3
  int dmx_adr_local=0;
4
  if (digitalRead(S1) == HIGH) dmx_adr_local += 1;
5
  if (digitalRead(S2) == HIGH) dmx_adr_local += 2;
6
  if (digitalRead(S3) == HIGH) dmx_adr_local += 4;
7
  if (digitalRead(S4) == HIGH) dmx_adr_local += 8;
8
  if (digitalRead(S5) == HIGH) dmx_adr_local += 16;
9
  if (digitalRead(S6) == HIGH) dmx_adr_local += 32;
10
  if (digitalRead(S7) == HIGH) dmx_adr_local += 64;
11
  if (digitalRead(S8) == HIGH) dmx_adr_local += 128;
12
  if (digitalRead(S9) == HIGH) dmx_adr_local += 512;
13
  DMXaddress = dmx_adr_local;
14
}

Bezüglich Deinem Addressierungsproblem mit dem auskommentierten Switch 
(S9), müsste da nicht eher wie folgt heissen...
1
if (digitalRead(S9) == HIGH) dmx_adr_local += 256;

von Falk B. (falk)


Lesenswert?

@ Marco (Gast)

>(S9), müsste da nicht eher wie folgt heissen...

>if (digitalRead(S9) == HIGH) dmx_adr_local += 256;

uups, kleiner Fehler ;-)
Kommt davon, wenn man immer über DMX512 redet.

von max2d (Gast)


Lesenswert?

Ist mir mittlerweile auch aufgefallen.

Lag aber nicht daren, hatte irgendwie bei Switch9 eine hochohmige 
Verbindung zu nem Ausgang vom Arduino -> neu gelötet und jetzt 
funktionierts auch mit dem S9.

Nur leider habe ich immernoch das Problem mit der EMV.

Vielleicht muss ich dazu sagen, dass ich die Schaltung momentan im 
offenen 19" case verbaut habe, und die Stromversorgung momentan über den 
PC (USB an Arduino) laufen hab. Wenn ich die Masse vom Arduino mit dem 
Gehäuse verbinde bilde ich mir ein den effekt mit meinem Stuhl und 
teppich nichtmehr zu haben.
Legt sich dieses Problem evtl. wenn ich später mein Schaltnetzteil ins 
Gehäuse einbaue und dieses dann auch erde?

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Vielleicht muss ich dazu sagen, dass ich die Schaltung momentan im
>offenen 19" case verbaut habe,

Das ist kein Problemn, die Schaltung sollte definitiv nicht dermassen 
empfindlcih sein.

> und die Stromversorgung momentan über den
>PC (USB an Arduino) laufen hab.

Das ist OK.

> Wenn ich die Masse vom Arduino mit dem
>Gehäuse verbinde bilde ich mir ein den effekt mit meinem Stuhl und
>teppich nichtmehr zu haben.

Hmm.

>Legt sich dieses Problem evtl. wenn ich später mein Schaltnetzteil ins
>Gehäuse einbaue und dieses dann auch erde?

Das Problem ist immer noch da, nur etwas besser versteckt.

von max2d (Gast)


Angehängte Dateien:

Lesenswert?

Kann es evtl. daran liegen, dass ich für die DMX Leitung zum MAX und vom 
MAX zum Arduino kein abgeschirmtes Kabel genommen hab?

Im Anhang noch die Beschaltung meiner Eingänge. Muss ich bei den PINs 
vom MAX auch Pulldown/Pullup Widerstände verbauen? Also beim RxD TxD und 
dem PIN2?

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Kann es evtl. daran liegen, dass ich für die DMX Leitung zum MAX und vom
>MAX zum Arduino kein abgeschirmtes Kabel genommen hab?

Nein.

>Im Anhang noch die Beschaltung meiner Eingänge. Muss ich bei den PINs
>vom MAX auch Pulldown/Pullup Widerstände verbauen? Also beim RxD TxD und
>dem PIN2?

Nein.

von max2d (Gast)


Lesenswert?

ok, woran liegts dann :D

von Falk B. (falk)


Lesenswert?

An deinem Hardwareaufbau. Poste ein Bild unter Beachtung der 
Bildformate

von max2d (Gast)


Angehängte Dateien:

Lesenswert?

Anbei ein Foto von meinem Schaltungsaufbau.
Sorry für die Qualität, ist nur mit dem Handy fotografiert, aber ich 
denke man erkennt alles.

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Sorry für die Qualität, ist nur mit dem Handy fotografiert, aber ich
>denke man erkennt alles.

Ein wenig schärfer darf es ruhig sein.

von Falk B. (falk)


Lesenswert?

Naja, nicht der schönste Aufbau, sollte aber gehen. Ich tippe auf 
Wackelkontakte oder kalte Lötstellen.

von max2d (Gast)


Angehängte Dateien:

Lesenswert?

Hier nochmals ein schärferes Bild.

Es ist ja nur ein mehr oder weniger provisorischer Aufbau.

Kalte Lötstellen und Wackelkontakte glaub ich eher weniger dass die was 
mit EMV zu tun haben oder?!

von max2d (Gast)


Lesenswert?

habe gerade mal das Stromkabel meiner Bohrmaschine ins gehäuse gelegt, 
ohne die Bohrmaschine laufen zu lassen, aber in eingestecktem Zustand.

Die Kanäle machen sich total selbstständig! Sobald ich den GND mit dem 
Gehäuse verbinde verschwindet der Effekt.

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Die Kanäle machen sich total selbstständig! Sobald ich den GND mit dem
>Gehäuse verbinde verschwindet der Effekt.

Welche Kanäle meinst du denn? Die 8 LEDs?

von max2d (Gast)


Lesenswert?

ja, meine die LEDs, somit würden auch die Funkempfänger flackern.

Ich vermute mittlerweile dass das Magnetfeld der Bohrmaschine sich auf 
meiner DMX Leitung im gerät einkoppelt

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Ich vermute mittlerweile dass das Magnetfeld der Bohrmaschine sich auf
>meiner DMX Leitung im gerät einkoppelt

Wenn die Bohrmaschine nicht läuft, fließt keine Strom, also gibt es auch 
kein Magnetfeld. Bestenfalls ein elektrisches Feld.

Das ganze klingt nach einem Masseproblem. Aber wenn deine Schaltung über 
USB am PC hängt, ist sie doch geerdet, denn der PC ist auch geerdet.

Komisch.

von Falk B. (falk)


Lesenswert?

Probier mal, ob der Effekt noch da ist, wenn du die DMX-Adressierung im 
Programm auskommentierst und dort ne feste Adresse reinschreibst.

von max2d (Gast)


Lesenswert?

Also ich habe jetzt mal die DMX adressierung auskommentiert und eine 
feste Adresse im Programm eingestellt.
Leider ohne Erfolg, immernoch der gleiche Effekt.


Zur Bohrmaschine, es entsteht trotzdem ein elektrisches Feld, auch wenn 
diese nicht läuft.

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Leider ohne Erfolg, immernoch der gleiche Effekt.

Dann muss man weiter suchen.

>Zur Bohrmaschine, es entsteht trotzdem ein elektrisches Feld, auch wenn
>diese nicht läuft.

Fehlt da ein Fragezeichen?

Ja, das elektrische Feld kommt vom Anschlusskabel, denn dort liegt ja 
die 50 Hz Wechselspannung an.

von max2d (Gast)


Lesenswert?

hab jetzt mal die leitung von der DMX Buchse zum MAX und vom MAX zum 
Arduino durch ein CAT5e Kabel ersetzt, und den Schirm auf Erde gelegt.
Jetzt ist der Effekt nichtmehr so krass.

Wenn ich jetzt aber das Schaltnetzteil zur Spannungsversorgung nehme, 
tut sich an den Kanälen nichtsmehr, sie gehen nicht ein, obwohl die 
Versorgungsspannungen anliegen.

von spess53 (Gast)


Lesenswert?

Hi

>Wenn ich jetzt aber das Schaltnetzteil zur Spannungsversorgung nehme,
>tut sich an den Kanälen nichtsmehr, sie gehen nicht ein, obwohl die
>Versorgungsspannungen anliegen.

Falk schrieb:

>Das ganze klingt nach einem Masseproblem.

MfG Spess

von Falk B. (falk)


Lesenswert?

Sind denn auch alle Massen verbunden?

Masse vom DMX-Stecker geht zum MAX-Board, dort muss eine direkte 
Verbindung zur Masse zum Arduino sein.

von max2d (Gast)


Lesenswert?

Und wie kann ich dieses Masse Problem beheben?

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Und wie kann ich dieses Masse Problem beheben?

Erstmal musst du es finden. Prüfe ALLE Verbindungen, die mit Masse zu 
tun haben, auch auf deinem MAX-Board.

von Falk B. (falk)


Lesenswert?

Mit etwas Pech können es auch die Y-Kondensatoren von deinem 
Schaltnetzteil sein. Miss mal im AC-Spannungsbereich die Spannung 
zwischen der Masse am PC und dem Ausgang deines Schaltnetzteils, wenn es 
am Ausgang nicht angeschlossen ist. Wenn man dort um die 120VAC misst, 
kann es passieren, dass dein Arduino durch die Leckströme an einem 
empfindlichen Pin gestört wird. Abhilfe schafft dann wie bereits gemerkt 
ein Erden der Masse am Ausgang des Netzteils.

von max2d (Gast)


Lesenswert?

Falk Brunner schrieb:
> Sind denn auch alle Massen verbunden?

Hab es gerade nochmals durchgemessen. Ich hab überall eine 
Masseverbindung wo auch eine sein soll.

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Hab es gerade nochmals durchgemessen.

Wie?

> Ich hab überall eine
>Masseverbindung wo auch eine sein soll.

Das ist OK, kann aber im Einzelfall dennoch ein Fehler sein. Wenn z.B. 
Die Masse vom MAX-Board zum Arduino unterbrochen ist, aber über DMX eine 
Masse anliegt, dann ist das statisch scheinbar in Ordnung, dynamisch 
aber eine Katastrophe! Also klingel ALLE Verbindungen durch, ggf. muss 
man DMX und andere Sachen dabei abziehen, um keine falsch positive 
Messung zu machen.

von max2d (Gast)


Lesenswert?

Falk Brunner schrieb:
> Mit etwas Pech können es auch die Y-Kondensatoren von deinem
> Schaltnetzteil sein.

Hab 107V AC gemessen! Wird wohl auch an den Y-Kondensatoren liegen?
Was vielleicht erklärt warum es mit dem Schaltnetzteil nicht 
funktioniert.

Aber ich habe ja selbst mit den 5V vom PC Netzteil Störungen drauf.

von max2d (Gast)


Lesenswert?

Falk Brunner schrieb:
>>Hab es gerade nochmals durchgemessen.
>
> Wie?

Ich bin mit einer Messleitung vom Multimeter auf die USB Buchse vom 
Arduino gegangen, dann mit der anderen erst auf meine Anzeigeplatine, 
dann auf den MAX und dann auf die DMX Buchse an den PIN1. Hab überall 
0,3Ohm gemessen, sollte also passen.

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Ich bin mit einer Messleitung vom Multimeter auf die USB Buchse vom
>Arduino gegangen, dann mit der anderen erst auf meine Anzeigeplatine,
>dann auf den MAX und dann auf die DMX Buchse an den PIN1. Hab überall
>0,3Ohm gemessen, sollte also passen.

Naja, sieht erstmal OK aus.

von Falk B. (falk)


Lesenswert?

Andererseits, was für ein Netzteil ist das denn GENAU?
So wie das aussieht, sollte es einen PE-Anschluss am Eingang haben. Ist 
der angeklemmt?

von max2d (Gast)


Lesenswert?

Dieses hier:
http://www.reichelt.de/SNT-RS-15-5/3/index.html?&ACTION=3&LA=446&ARTICLE=137080&artnr=SNT+RS+15+5&SEARCH=schaltnetzteil+5v

Es hat eine PE Klemme, und diese ist natürlich auch mit dem PE 
Verbunden.

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Es hat eine PE Klemme, und diese ist natürlich auch mit dem PE
>Verbunden.

Dann darfst du aber keine 107vac zwischen PE und der Ausgangsmasse 
messen! Da stimmt was nicht!

von max2d (Gast)


Lesenswert?

hm... also ich habe jetzt mal das Schaltnetzteil wieder angeschlossen.
Mittlerweile funktionierts auch mit dem Schaltnetzteil. Nur leider 
flackern die lampen abundzu. Also bin ich hergegangen und hab den PE mit 
dem Minus vom Schaltnetzteil verbunden. Jetzt flackert nichts mehr, 
solange ich mit meiner Bohrmaschine fern bleibe

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>flackern die lampen abundzu. Also bin ich hergegangen und hab den PE mit
>dem Minus vom Schaltnetzteil verbunden. Jetzt flackert nichts mehr,
>solange ich mit meiner Bohrmaschine fern bleibe

Aber wenn du sie wieder annäherst, flackert es. Das ist was faul!

Den Ausgangs-Minus auf PE legen ist erstmal OK.

von max2d (Gast)


Lesenswert?

Falk Brunner schrieb:
> Aber wenn du sie wieder annäherst, flackert es. Das ist was faul!

Ja schon, aber was?
An der Masse kanns nicht liegen.

von max2d (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab das Problem jetzt einigermaßen in den griff bekommen.

Mich würde aber gerade noch interessieren, ob ich noch was an meinem 
Code optimieren kann, wie ich die Empfänger ansteuere.

Wenn ich schonmal so einen Programmier gott an der Strippe habe ;-)

Im Anhang nochmals mein Code

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

@ max2d (Gast)

>Ich hab das Problem jetzt einigermaßen in den griff bekommen.

Und wie?

>Mich würde aber gerade noch interessieren, ob ich noch was an meinem
>Code optimieren kann, wie ich die Empfänger ansteuere.

>Wenn ich schonmal so einen Programmier gott an der Strippe habe ;-)

Naja, man könnte die Funktion zum Senden noch kompakter schreiben, 
mittels Schleife und Array. Bringt aber nicht sooo viel, ist eher was 
für die B-Note.

Siehe Anhang sowie

Strukturierte Programmierung auf Mikrocontrollern

von max2d (Gast)


Lesenswert?

Falk Brunner schrieb:
> Und wie?

naja, ist glaub noch nicht das Optimum, aber ich hab halt meine 
Steuerleitungen vom  DMX mit abgeschirmten Leitungen verlegt.
Und ich hab das Schaltnetzteil eingebaut, gehäuse geerdet und komplett 
zusammengebaut.
Auf meine Bohrmaschine reagierts nichtmehr.

Ich werd die Schaltung heute abend mal bei der Premiere Testen, und über 
der Stromverteilung (3x16A) montieren, dann wird es sich ja Zeigen wie 
Störungssicher meine Schaltung ist :D

von Gerald S. (geralds)


Lesenswert?

Hi Max

Ich habe dir im ELKO - Forum eine Antwort geschrieben.
http://www.elektronik-kompendium.de/forum/forum_entry.php?id=207009&page=0&category=all&order=last_answer

Halte mal bitte inne und überlege dir eine Überarbeitung.

Grüße
Gerald
---

von Kaj (Gast)


Lesenswert?

max2d schrieb:
> An der Masse kanns nicht liegen.
Hoer sich so an wie:
"Das Auto springt nicht an. Am Benzin kanns nicht liegen, ist naemlich 
keins drin."

von Falk B. (falk)


Lesenswert?

@Gerald Schwarz (geralds)

>http://www.elektronik-kompendium.de/forum/forum_en...

>Halte mal bitte inne und überlege dir eine Überarbeitung.

Mach mal halblang. Wenn gleich der Aufbau nicht optimal ist, für DMX 
reicht es. Soviel "HF" gibt es da nicht.

von jörg schulz (Gast)


Lesenswert?

Hi, ich weis der beitrag ist schon ein paar monate alt, aber da ich in 
nächster zeit versuche ein dmx gesteuertes gerät zur motorsteuerung 
bauen möchte, wollte ich mal fragen ob es inzwischen einen fertigen code 
gibt bei dem man sich mal inspirieren lassen kann um die funktion zu 
verstehen. würde mich freuen von euch zu hören.

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.