Probleme mit DMX library DMXSerial.h

Hi zusammen,

ich scheitere grade bei einem relativ simplen Projekt:
Ich möchte einen DMX Empfänger/slave programmieren, der eine WS2812 steuert.

Es sollen Kanal 1 für Rot, Kanal 2 für Grün und Kanal 3 für Blau genutzt werden.

Wenn ich es mit einem Controller von DASLIGHT nutze, funktioniert es, wenn ich aber einen Arduino zum steuern, oder ein Steuerpanel nutze funktioniert es nicht.

Ich habe die Signale an ein Oszilloskop gehangen und die Startimpulse scheinen unterschiedlich lang zu sein, deswegen denke ich, das das der Fehler ist.

aber mein Arduino Master greift auf die selbe Lib zu, da sollte es doch kompatibel sein!

Weiß jemand, wie man das tweaken kann oder eine andere Bibliothek?

hier ist der Code:

#include <Arduino.h>
#include <DMXSerial.h>
#include "FastLED.h"


#define WSPIN 13
#define NUM_LEDS 144
#define adresse  1


int menuaktiv = 0, millisgedruckt;
long editbeginn, druckzeitbeginn;

int i, j, du;
byte NUM_LEDS_LOW, NUM_LEDS_HIGH;
bool empfangen, anderung;
byte werte[5], wertevorher[5];


CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812B, WSPIN, RGB>(leds, NUM_LEDS);
  DMXSerial.init(DMXProbe);
  fullcolor(255, 255, 255); //Weiss
}

void loop() {
  if (DMXSerial.receive()) {
    for (i = 0; i <= 4; i++) {
      werte[i] = DMXSerial.read(i + adresse);
    }
    empfangen = true;
    for (i = 0; i <= 3; i++) {
      if (werte[i] != wertevorher[i])
        anderung = true;
    }
  }
  if (anderung == true) {
    anderung = false;
        fullcolor(werte[0], werte[1], werte[2]);
    }
  }


void fullcolor(byte G, byte R, byte B) {
  for (i = 0; i < NUM_LEDS; i++) {
    leds[i] = CRGB(R, G, B);
  }
  FastLED.show();
}
  1. Schritt wäre zunächst mal das ganze mit den mitgelieferten Beispielen zu testen, also am Master mit dem DmxSerialSend und am Slave mit DmxSerialNeopixel.
    Funktioniert das?

  2. Zeige die Schaltpläne von deinem Slave UND deinem Master sowie Echtbilder aus denen wir jede Verkabelung erkennen können.

Ich habe das schon versucht, allerdings passt der Pin nicht zu meinem Board, da ich den LED Strip an Pin 13 habe. ich habe zwar versucht, das mit PortB Bit 5 zu nutzen, aber trotzdem nichts.

Schaltplan ist hier:

es ist eine richtige Platine.

So, habe jetzt die standartsketche aus dem Beispiel geladen, nur den Pin angepasst:
von

#define PIXEL_PORT  PORTB  // Port of the pin the pixels are connected to
#define PIXEL_DDR   DDRB   // Port of the pin the pixels are connected to
#define PIXEL_BIT   4      // Bit of the pin the pixels are connected to

auf

#define PIXEL_PORT  PORTB  // Port of the pin the pixels are connected to
#define PIXEL_DDR   DDRB   // Port of the pin the pixels are connected to
#define PIXEL_BIT   5      // Bit of the pin the pixels are connected to

Damit haben die Neopixel schonmal funkioniert.

jetzt also die standartsketche genutzt und ausprobiert.

mit dem Daslight Virtual Controller - DVC Fun funktioniert es wieder, genau so wie es soll, jeder Regler eine LED Farbe.

mit dem IBIZA LC12DMX 12 Kanal DMX Controller: Keine Funktion

Mit einem Arduino als Sender: Keine Funktion

Arduino an einer RGB DMX Leuchte funktioniert.

Am Oszilliskop ist mir aufgefallen, dass das Daslight Modul längere Pasuen zwischen den Ketten hat...

in den Sketchen wo ich nachschaue gibts keine PIXEL_DDR #defines.
Welche Library verwendest du genau? LINK! (!!!)

lass mal den Sender fix 512 Channels schicken (wenn das deine Lib kann) und reduziere den Slave auf eine LED = 3 Channels.

Hast du zum Testen USB ausgesteckt?
Welcher Arduino?

Fotos und vollständige Schaltpläne haben wir ja immer noch keine.

so, ich bin jetzt komplett zurück zur basis:

Nano Sender und Mega Empfänger.

Bibliothek ist die aus der Bibliotheksverwaltung:

sketche sind die:
image

Nichtmal das geht.

Ach, Signalanalyse besagt, dass das DASLIGHT gerät fast 200us startbit hat, während der Arduino und der 12 Kanal Sender nur 140us Startbit sendet.

DASLIGHT schickt immer alle 512 Kanäle, der 12 Kanal Sender schickt nur die ersten 12 und macht dann pause.

oben schrieb ich schon mal

Ja, der Arduino sendet alle 512 bytes.