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.
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.
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?
@ 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.
> 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 | } |
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 ...
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?
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.
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...
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.
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?
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.
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.
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...?
: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?
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
@ 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
>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?
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?
@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?
@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.
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; |
@ 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.
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?
@ 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.
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?
@ 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.
Anbei ein Foto von meinem Schaltungsaufbau. Sorry für die Qualität, ist nur mit dem Handy fotografiert, aber ich denke man erkennt alles.
@ 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.
Naja, nicht der schönste Aufbau, sollte aber gehen. Ich tippe auf Wackelkontakte oder kalte Lötstellen.
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?!
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.
@ 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?
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
@ 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.
Probier mal, ob der Effekt noch da ist, wenn du die DMX-Adressierung im Programm auskommentierst und dort ne feste Adresse reinschreibst.
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.
@ 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.
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.
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
Sind denn auch alle Massen verbunden? Masse vom DMX-Stecker geht zum MAX-Board, dort muss eine direkte Verbindung zur Masse zum Arduino sein.
@ 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.
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.
Falk Brunner schrieb: > Sind denn auch alle Massen verbunden? Hab es gerade nochmals durchgemessen. Ich hab überall eine Masseverbindung wo auch eine sein soll.
@ 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.
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.
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.
@ 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.
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?
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.
@ 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!
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
@ 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.
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.
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
@ 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
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
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 ---
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."
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.