Forum: Mikrocontroller und Digitale Elektronik Probleme mit DMX trennung


von max2d (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte einem Arduino ATMega 2560 DMX auswerten und entsprechend LEDs 
schalten. Was soweit theoretisch auch funktioniert.
Zur Auswertung verwende ich die conceptinetics Libary.
Nur beginnt die angesteuerte LED immer wieder zu flackern. Deshalb habe 
ich mich entschlossen, das DMX Signal mit Optokopplern zu trennen.

Habe das ganze nach dem angehängten Schaltplan aufgebaut, leider 
funktionierts nicht (LED leuchtet nicht). Woran liegts?

von Dennis R. (dennis_ec) Flattr this


Lesenswert?

Die Optokoppler invertieren dein Signal.

von Sascha W. (sascha-w)


Lesenswert?

max2d schrieb:
> Hallo,
> ich mich entschlossen, das DMX Signal mit Optokopplern zu trennen.
obs hilft?

> Habe das ganze nach dem angehängten Schaltplan aufgebaut, leider
> funktionierts nicht (LED leuchtet nicht). Woran liegts?
Sind VDD/2.4  2.4V? Dann wird der Vorwiderstand der OK mit 470 Ohm zu 
groß sein!

Sascha

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Nur beginnt die angesteuerte LED immer wieder zu flackern. Deshalb habe
>ich mich entschlossen, das DMX Signal mit Optokopplern zu trennen.

Wenn die Tür quietsch spannst du den Regenschirm auf?
DMX braucht keine galvanische Trennung, der Fehler liegt woanders.

von Falk B. (falk)


Lesenswert?

@ Dennis R. (dennis_ec)

>Die Optokoppler invertieren dein Signal.

Nö, die sind NICHTinvertierend angeschlossen, siehe Optokoppler.

von Dennis R. (dennis_ec) Flattr this


Lesenswert?

Muss mein Beitrag Revidieren, Die Leds hängen ja an 5V nicht an GND, 
sollte passen.

Hast du mal nachgemessen ob die Pegel passen wenn du über einen Weiteren 
Bustreiber einfach mal ein Signal vorgibst.

Optimal wäre Funktionsgenerator + Oszi.

von max2d (Gast)


Lesenswert?

VDD 2.4 sind 5V. Zugegeben, der name ist unglücklich gewählt.

Ich möchte das DMX Signal aber trotzdem galvanisch Trennen.

Aber wodurch entsteht dann das Flackern?


Habe leider keinen weiteren Bustreiber.
Aber wie gesagt, es funktioniert ja eigendlich, abgesehen von der 
galvanischen trennung.

von Karl H. (kbuchegg)


Lesenswert?

max2d schrieb:

> Aber wodurch entsteht dann das Flackern?

Da hätte ich doch glatt mal auf einen Programmfehler getippt.

von Karl H. (kbuchegg)


Lesenswert?

max2d schrieb:

> Zur Auswertung verwende ich die conceptinetics Libary.

Ach das ist Arduino Zeugs. Und ich hab mich schon gewundert. DMX ist 
doch auch nichts anderes als eine UART - wozu braucht man da eine Lib 
dafür?

Jetzt allerdings bin ich mir recht sicher, dass es ein Programmfehler 
ist.

von max2d (Gast)


Lesenswert?

ok, hier mal das Programm:
1
/*
2
  DMX_Slave.ino - Example code for using the Conceptinetics DMX library
3
  Copyright (c) 2013 W.A. van der Meeren <danny@illogic.nl>.  All right reserved.
4
5
  This library is free software; you can redistribute it and/or
6
  modify it under the terms of the GNU Lesser General Public
7
  License as published by the Free Software Foundation; either
8
  version 3 of the License, or (at your option) any later version.
9
10
  This library is distributed in the hope that it will be useful,
11
  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
  Lesser General Public License for more details.
14
15
  You should have received a copy of the GNU Lesser General Public
16
  License along with this library; if not, write to the Free Software
17
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
*/
19
20
21
#include <Conceptinetics.h>
22
23
//
24
// CTC-DRA-13-1 ISOLATED DMX-RDM SHIELD JUMPER INSTRUCTIONS
25
//
26
// If you are using the above mentioned shield you should 
27
// place the RXEN jumper towards G (Ground), This will turn
28
// the shield into read mode without using up an IO pin
29
//
30
// The !EN Jumper should be either placed in the G (GROUND) 
31
// position to enable the shield circuitry 
32
//   OR
33
// if one of the pins is selected the selected pin should be
34
// set to OUTPUT mode and set to LOGIC LOW in order for the 
35
// shield to work
36
//
37
38
//
39
// The slave device will use a block of 10 channels counting from
40
// its start address.
41
//
42
// If the start address is for example 56, then the channels kept
43
// by the dmx_slave object is channel 56-66
44
//
45
#define DMX_SLAVE_CHANNELS   10 
46
47
//
48
// Pin number to change read or write mode on the shield
49
// Uncomment the following line if you choose to control 
50
// read and write via a pin
51
//
52
// On the CTC-DRA-13-1 shield this will always be pin 2,
53
// if you are using other shields you should look it up 
54
// yourself
55
//
56
///// #define RXEN_PIN                2
57
58
59
// Configure a DMX slave controller
60
DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS );
61
62
// If you are using an IO pin to control the shields RXEN
63
// the use the following line instead
64
///// DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS , RXEN_PIN );
65
66
const int ledPin = 13;
67
68
// the setup routine runs once when you press reset:
69
void setup() {             
70
  
71
  // Enable DMX slave interface and start recording
72
  // DMX data
73
  dmx_slave.enable ();  
74
  
75
  // Set start address to 1, this is also the default setting
76
  // You can change this address at any time during the program
77
  dmx_slave.setStartAddress (1);
78
  
79
  // Set led pin as output pin
80
  pinMode ( ledPin, OUTPUT );
81
}
82
83
// the loop routine runs over and over again forever:
84
void loop() 
85
{
86
  //
87
  // EXAMPLE DESCRIPTION
88
  //
89
  // If the first channel comes above 50% the led will switch on
90
  // and below 50% the led will be turned off
91
  
92
  // NOTE:
93
  // getChannelValue is relative to the configured startaddress
94
  if ( dmx_slave.getChannelValue (1) > 127 )
95
    digitalWrite ( ledPin, HIGH );
96
  else
97
    digitalWrite ( ledPin, LOW );
98
    
99
  
100
}

Hat jemand ne Idee was genau im Programm falsch ist?
Bzw. kann mir jemand bei der erstellung eines richtigen Programms auf 
Arduino basis helfen?
Das muss dieses Wochenende noch einwandfrei laufen. Muss das auf ner 
Veranstaltung einsetzen.

von max2d (Gast)


Lesenswert?

Ich muss mich korrigieren.
Habe das ganze nochmals neu auf meinem Steckbrett aufgebaut. Bisher 
flimmert nichts :-)

Bleibt nurnoch die Frage, warum es mit der Trennung über die Optokoppler 
nicht geht?

von Falk B. (falk)


Lesenswert?

Betreibe eine systematische Fehlersuche. Der Schaltplan an sich ist 
OK.

von Falk B. (falk)


Lesenswert?

Korrigiere! Pin7 der Optokoppler MUSS auf +5V gelegt werden, das ist der 
ENABLE der Ausgänge!

von max2d (Gast)


Lesenswert?

Hab Pin7 der Optokoppler auf +5V gelegt, leider funktionierts immernoch 
nicht :-(

Hab auch nochmal alles durchgeschaut, sollte passen

von Falk B. (falk)


Lesenswert?

@ max2d (Gast)

>Hab auch nochmal alles durchgeschaut, sollte passen

Du sollst SYSTEWMATISCH eine Fehlersuche betreiben!

1.) Versorgungsspannung an allen ICs prüfen.
2.) Wenn du ein Oszi hast, alle Signale der Reihe nach prüfen. Erst 
Optokopplereinigang, dann Ausgang, für ALLER drei Optokoppeler
3.) Wenn du kein Oszi hast, kann man das mit langsamen Signalen und 
einem Multimeter auch testen. Mit dem AVR ein 1 Hz Blinksignal auf PIN2 
und TXD0 ausgeben und mit dem Multimeter prüfen, ob das durch beide 
Optokoppler durchgeht. In Empfangsrichtung muss du ein Blinksignal an 
Eingang A oder B von IC2 anschließen, Masse nicht vergessen! Den anderen 
Eingang kann man auf LOW oder HIGH legen.

von max2d (Gast)


Lesenswert?

also, ich habe das ganze nochmals neu aufgebaut.
Jetzt zu meinen Messergebnissen:

Ich habe die Optokoppler mal manuell beschalten und mit dem Oszi 
gemessen, was sich am Augang tut.

an OK10:
An R11 0V angelegt -> LSP24 0V
An R11 5V angelegt -> LSP24 5V

an den anderen Optokopplern das gleiche.

Mit angeschlossenem DMX ist mir allerdings aufgefallen, dass die 
Ausgangsspannungen am MAX485 minimal einbrechen (geschätz 1V)

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.