Kennen Sie EIA-485 und DMX-512? - Teil 2

Im ersten Teil dieses Blogs habe ich Ihnen den Versuchsaufbau für eine der wichtigsten industriellen Anwendungen des RS-485 Busses gezeigt: den Modbus. Dabei fungierte der PC mit einem USB-RS485-Adapter als Master und der Micro Controller mit Atmel 328 und RS-485-Shield als Slave. Um mich in die Thematik einzuarbeiten, hatte ich vor allem auf der Homepage unseres Zulieferers Fa. zihatec und bei Wikipedia recherchiert.

Ein zweites Anwendungsgebiet des RS-485-Shields habe ich in den Blog-Beiträgen von Tobias Kuch im Frühjahr 2020 gefunden (Links Teil 1, Teil 2, Teil 3). Dabei ging es um die Steuerung von Beleuchtungssystemen mit DMX-512. Hier wird der Micro Controller als Master eingesetzt.

Leider konnte ich die dort verwendete Lampe nicht beschaffen, also habe ich bei Amazon mit der Abkürzung DMX gesucht und einen ähnlichen LED-Scheinwerfer gefunden. Allerdings sind die Anzahl der Kanäle für die Steuerung und die Kanalbelegung nicht standardisiert, was bei unterschiedlicher Funktionalität durchaus Sinn macht, so dass ich die o.g. Blogs nicht ohne weiteres übertragen konnte. 

Schwerpunkt dieses Blogs ist deshalb die Frage, wie Sie Ihre DMX-Beleuchtung anschließen und programmieren können. Dabei kommt man nicht um das Studium des jeweiligen „User Manual“, häufig nur ein Blatt mit den wichtigsten Angaben, herum.

Zunächst zur Hardware. Auf dem folgenden Bild meines LED-Scheinwerfers sehen Sie links viele LED, die reihenweise rot, grün oder blau sind. Man kann diese Lampe auch mit der mitgelieferten Fernbedienung mit verschiedenen Funktionen ansteuern. Auf der rechten Seite sieht man die Rückseite mit zwei dreipoligen XLR-Anschlüssen, einem vierstelligen LED-Matrix-Display und darunter (kaum zu erkennen) vier Taster für die manuelle Bedienung, insbesondere wichtig für die Einstellung der Adresse bei Verwendung mehrerer Scheinwerfer oder DMX-Geräte.

LED Scheinwerfer

Die XLR-Kontakte können ggf. auch fünfpolig sein; wir benötigen jedoch nur zwei Kontakte. Die linke Buchse ist der Eingang, die rechte der Ausgang. Deshalb benötige ich für mein selbstgebasteltes Kabel einen weiblichen XLR-Stecker (Neutrik NC-3 FX BAG - XLR-Stecker, das FX steht dabei für „female“). Damit konnte ich die Verbindung zwischen der Lampe und dem Shield leicht herstellen.

Zwei Abweichungen zum Blog von Tobias Kuch: Bei meiner Lampe sind die Kontakte um 180° gedreht eingebaut, der mittlere Kontakt A liegt also unten, der Kontakt B liegt rechts. Und bei mir blieb die Lampe dunkel, wenn ich die Masseverbindung zum Shield hergestellt habe. Also nur zwei Leitungen: A an A und B an B.

Auf dem Shield sind noch einige Einstellungen vorzunehmen. Dies geschieht einerseits mit Kurzschlusssteckern (Jumper) und andererseits mit Hilfe kleiner Schalter (DIP switches, „Mäuseklavier“). Die Beschriftung der Platine ist dabei sehr hilfreich.

Für unseren Micro Controller mit Atmega 328 stecken wir den einzelnen Jumper J1 auf 5V, in der Reihe neben den Pins 0 bis 7 benötigen wir nur einen Jumper zum Senden, also stecken wir die Verbindung der TX-Leitung an Port 3 (vierte Reihe, weil die Zählung bei 0 beginnt). Die Ports 0 und 1 bleiben frei, somit können wir problemlos den Sketch hochladen und auch den seriellen Monitor in der Arduino IDE benutzen.

Jumper Settings

Die DIP Schalter stellen Sie bitte wie auf dem folgenden Bild ein:

Dip Switches

Auch hier ist der wichtigste Micro-Schalter der erste auf SW 3: Damit wird der Abschlusswiderstand (terminating resistor) aktiviert.

Softwareseitig benötigen wir die Programmbibliothek DmxSimple von Peter Knight. Der Name ist Programm. Tatsächlich kennt die Bibliothek für den Anwender nur drei Funktionen, die ich im Anschluss kurz erläutere. Installiert wird sie wie üblich mit dem Bibliotheksverwalter.

Bibliotheksverwalter

Zu Beginn des Sketches wird die Bibliothek inkludiert mit

 #include <DmxSimple.h>

Die drei Funktionen sind zunächst

 DmxSimple.usePin(3);
 DmxSimple.maxChannel(n);

und am wichtigsten dann 

 DmxSimple.write(channel, value);

Mit usePin(3) wird der Port für die TX-Leitung festgelegt. Aufgrund der historischen Entwicklung, Vorarbeiten der Fa. Tinker.it!, ist Port 3 voreingestellt. Sie können jedoch davon abweichen.

Bei maxChannel wird die Anzahl der Kanäle festgelegt. Voreingestellt ist 512, das maximal Mögliche. Um die Daten schneller zu aktualisieren, kann man die Zahl kleiner wählen. Ich selbst habe nur eine Lampe mit 6 Kanälen angeschlossen, deshalb wähle ich 

 DmxSimple.maxChannel(6);

Bei zwei Scheinwerfern würde ich 2*6 = 12 eintragen und am zweiten Scheinwerfer die Basisadresse 7 einstellen, um alle Funktionen individuell anzusteuern.

Noch einmal zum Mitschreiben: maxChannel ist die Summe aller Kanäle sämtlicher in Reihe geschalteter DMX-Geräte (Daisy Chain). An den einzelnen Geräten wird als Basisadresse die Summe aller davor liegenden Kanäle eingestellt.

Für meine einfachen Versuche habe ich nur ein Gerät mit sechs Kanälen verwendet. Nun zu den Funktionen für meinen Scheinwerfer gemäß Datenblatt:

Channel

Channel value

Function Instruction

Ch 1

0~255

Total dimming

Ch 2

0~255

R dimming

Ch 3

0~255

G dimming

Ch 4

0~255

B dimming

Ch 5

0~9

No strobe

10~255

The larger the value, the slower the stroboscopic

Ch 6

0~50

Manual mode, the first 5 channels are valid

51~100

Jump change

101~150

Gradual change

151~200

Pulse change

201~250

Auto mode

25~255

Sound mode

Also: mein Scheinwerfer hat drei verschiedenfarbige LEDs, die ich einzeln ansteuern kann (Ch 2 bis 4). Ich kann alle LEDs gleichzeitig dimmen (Ch 1). Ich kann Strobe Light (schnelles Aufflackern des Lichts) einstellen (Ch 5). Und ich kann verschiedene Betriebsarten (modes) wählen.

Andere DMX-Geräte habe vielleicht zusätzlich weißes Licht oder können mit Servos geschwenkt werden (pan and tilt). Wie gesagt: Schauen Sie in Ihr Datenblatt und notieren Sie die Zahl für den Kanal plus ggf. die Basisadresse.

Mit der Einbindung der Bibliothek werden auch zwei Beispiele bereitgestellt. Bei dem Beispiel FadeUp müssen Sie ggf. den Kanal verändern oder weitere Kanäle einfügen, bevor Ihr Scheinwerfer kontinuierlich die Helligkeit ändert. Mit dem Programm SerialToDMX können Sie alle Funktionen ausprobieren. Dazu öffnen Sie den seriellen Monitor und folgen den Anweisungen. Mit dem Befehl 1c 255W in der obersten Eingabezeile und Senden schreibe (w=write) ich den Wert 255 für Kanal (c=channel) 1, bei mir „Total dimming“.

Mit meinem modifizierten Sketch schreibe ich zunächst 255 für Kanal 1 (häufige Fehlerursache, wenn nichts leuchtet: Wenn Total dimming auf 0 gesetzt ist, bleiben alle LEDs dunkel). Dann zähle ich zunächst von 0 bis 180 und weise den Wert dem Kanal 2 (Farbe Rot) zu; also rot wird langsam heller. Den Wert (180 – Zählvariable) weise ich Kanal 3 (Farbe Grün) zu; grün wird also langsam dunkler. Wenn Rot am hellsten ist, wähle ich für drei Sekunden den Strobe Light-Modus, dann wird Rot wieder dunkler und Grün heller.

Mein Sketch (download):

 // RS_485_DMX512_Controller
 #include <DmxSimple.h>
 
 unsigned int r, g, b;
 int i;
 
 void setup() {
   DmxSimple.usePin(3);
   DmxSimple.maxChannel(6);
   DmxSimple.write(6, 1);       // Manual mode
   DmxSimple.write(1, 255);  // Total dimming
   DmxSimple.write(2, 0);    // R dimming
   DmxSimple.write(3, 0);    // G dimming
   DmxSimple.write(4, 0);    // B dimming
   DmxSimple.write(5, 0);    // No Strobe, Strobe > 10}
 
 void loop() {
   for (i=0; i < 180; i++) {  
     r=i;  
     g=180-i;
     DmxSimple.write(2, r); // Red
     DmxSimple.write(3, g);  // Green
   // DmxSimple.write(4, b); // Blue
     delay(50);
  }
     DmxSimple.write(5, 16); // Strobe
     delay(3000);
     DmxSimple.write(5, 0); // no Strobe  
 
   i = 180;
   do{  
     r=i;
     g=180-i;
     DmxSimple.write(2, r); // Red
     DmxSimple.write(3, g);  // Green
   // DmxSimple.write(4, b); // Blue
     delay(50);
     i--;
  } while (i > 1);
 }

Abschließend möchte ich noch ein Bildschirmfoto des RS-485-Signals auf dem Logic Analyzer zeigen, in dem man sehr schön die gegensätzliche Polarität der zwei Signalleitungen des RS-485-Busses sehen kann. Dadurch sind gegenüber dem alten Fernschreib-Standard RS-232 größere Distanzen und mehrere Geräte erst möglich.

Screenshot Logic Analyzer

Ich hoffe, ich konnte Ihre Neugier wecken und Sie vor meinen Anfängerfehlern bewahren.

Viel Spaß beim Nachbauen.

Per arduino.Progetti per principianti

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Post di blog consigliati

  1. Installa ESP32 ora dal gestore del consiglio di amministrazione
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - Programmazione ESP tramite WLAN