DMX Auswertung mit Arduino geht nicht

Gast #3670540
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.
Angehängte Dateien:
#3671128
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.
Gast #3671134
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
}
Gast #3671160
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?
Angehängte Dateien:
Gast #3671167
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.
Gast #3671173
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...
Gast #3671185
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?
Gast #3671197
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.
Angehängte Dateien:
Gast #3671204
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.
Gast #3671365
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?
Gast #3671686
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
Angehängte Dateien:
#3671775
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
}
Gast #3672440
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?
Gast #3672501
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?
Angehängte Dateien:
#3672507
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?
#3672512
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.
Gast #3672536
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;
Gast #3672607
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?
#3672614
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.
#3672647
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.
Gast #3672915
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.
#3672955
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.
Gast #3672994
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.
#3673019
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.
Gast #3673028
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.
Gast #3673037
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
#3673046
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.
#3673053
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.
Gast #3673057
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.
Gast #3673065
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.
#3673066
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.
Gast #3673123
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
#3673127
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.
Gast #3673620
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
Angehängte Dateien:
#3673646
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
Angehängte Dateien:
Gast #3673791
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
Gast #4278426
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.

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