Forum: Mikrocontroller und Digitale Elektronik Brauche einen Art-Net Spezialisten der mir hilft ;)


von Chris H. (themasterchris)


Lesenswert?

Hey Leute,

bin auf der Suche nach einem Spezialisten für Art-Net und zwar gehts 
darum ich möchte mir ein LED Panel aufbauen und dieses mit Madrix 
steuern. Erste Überlegung war ein Panel zu bauen das DMX kann da gibts 
ja einige Varianten (wobei mir das auch alles noch nicht so gefällt) 
aber bei DMX ist halt bei 512 Kanälen Schluss somit für LED blöde.

Nächste Überlegung Art-Net vor dem DMX dann wären ja 6 Universen möglich 
somit 4096 Kanäle. Guter Ansatz aber jetzt die Frage würde es nicht 
einfacher gehen einfach ein Art-Net zu nehmen und dort direkt Spalen und 
Zeilen für eine Matrix draus zu machen?

Oder eben z.B einen MBI5030 oder einen TLC59116 dran zu hängen und 
direkt anzusteuern.

Wäre das möglich? Kann mir da jemand helfen??

Wäre schon mal über jede Antwort sehr froh ;)

Mfg
Chris

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Du kannst doch DMX-Kanäle beliebig verwenden. Nimm beispielsweise Kanal 
1,2 und 3 für Adressen R,G,B und Kanal 4,5,6 für die Werte der einzelnen 
Farben. Damit kannst Du 256 RGB-LEDs ansprechen. Auf Kosten der 
Wiederholrate natürlich.

von Chris H. (themasterchris)


Lesenswert?

Sorry versteh ich grad irgendwie nicht. ;)

Ich möchte mir eine Matrix mit 8x12 Pixeln aufbauen sprich das Panel hat 
96 RGB LED's was ja wiederum 288 Kanäle sind aber ich möchte jede LED 
einzeln steuern und auch deren Farbe einzeln.

Was wäre für mein ganzes Projekt die elegantes, beste und günstigste 
Lösung? :)

von henne (Gast)


Lesenswert?

DVI.

von Sven P. (Gast)


Lesenswert?

ArtNet definiert doch schon Datenrahmen für Matrixdisplays, werte die 
doch direkt aus, ohne das Ganze noch durch DMX zu quetschen.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Chris Höchner schrieb:
> Sorry versteh ich grad irgendwie nicht. ;)

Du verknüpperst nicht jeden Kristall jeder RGB-LED mit einem DMX-Kanal, 
sondern überträgst über bestimmte DMX-Kanäle Adressen und über andere 
Kanäle Werte für diese Adressen und kannst somit ein Vielfaches an 
physikalischen Adressen ansteuern. Das Ganze geht natürlich auf Kosten 
der Wiederholrate, weil ja nur etwa 50 komplette DMX-Frames pro Sekunde 
übertragen werden können.

von Chris H. (themasterchris)


Lesenswert?

Hmm ok hört sich ja alles sinnvoll an nur wie mach ich das genau? Habe 
hier mal den C Code rauskopiert der meiner Meinung nach für das umsetzen 
auf DMX zuständig ist.

1
// DMX transmission
2
ISR (USART_TXC_vect) {
3
 static unsigned char  dmxState = BREAK;
4
 static unsigned short curDmxCh = 0;
5
6
 if (dmxState == STOPPED) {
7
  if (artnet_dmxTransmitting == TRUE) {
8
   dmxState = BREAK;
9
  }
10
 } else if (dmxState == BREAK) {
11
  UBRR = (F_CPU / (50000 * 16L) - 1);
12
  UDR      = 0;                //send break
13
  dmxState = STARTB;
14
 } else if (dmxState == STARTB) {
15
  UBRR = (F_CPU / (250000 * 16L) - 1);
16
  UDR      = 0;                //send start byte
17
  dmxState = DATA;
18
  curDmxCh = 0;
19
 } else {
20
  _delay_us(IBG);
21
  UDR      = artnet_dmxUniverse[curDmxCh++];      //send data
22
  if (curDmxCh == artnet_dmxChannels) {
23
   if (artnet_dmxTransmitting == TRUE) {
24
    dmxState = BREAK;             //new break if all ch sent
25
   } else {
26
    dmxState = STOPPED;
27
   } 
28
  }
29
 }
30
}
31
32
// ----------------------------------------------------------------------------
33
// DMX reception
34
ISR (USART_RXC_vect) {
35
 static unsigned char  dmxState = 0;
36
 static unsigned short dmxFrame = 0;
37
 unsigned char status = UCSRA;   // status register must be read prior to UDR (because of 2 byte fifo buffer)
38
 unsigned char byte = UDR;     // immediately catch data from i/o register to enable reception of the next byte
39
40
 if ((byte == 0) && (status & (1<<FE))) {        // BREAK detected (Framing Error)
41
  dmxState = 1;
42
  dmxFrame = 0;
43
  if (artnet_dmxChannels > 0) {
44
   artnet_dmxInComplete = TRUE;
45
  }
46
 } else if (dmxFrame == 0) {              // Start code test
47
  if ((byte == 0) && (dmxState == 1)) {          // valid SC detected
48
   dmxState = 2;
49
  }
50
  dmxFrame = 1;
51
 } else {
52
  if ((dmxState == 2) && (dmxFrame <= MAX_CHANNELS)) {  // addressed to us
53
   if (artnet_dmxUniverse[dmxFrame - 1] != byte) {
54
    artnet_dmxUniverse[dmxFrame - 1] = byte;
55
  artnet_dmxInChanged = TRUE;
56
   }
57
   if (dmxFrame > artnet_dmxChannels) {
58
    artnet_dmxChannels = dmxFrame;
59
   }
60
  }
61
  dmxFrame++;
62
 }
63
}
64
65
#endif

aber wie pack ich das jetzt um, dass ich zum Beispiel gleich einen 
MBI5030 oder einen TLC59116 ansteuere?

Sorry bin leider noch etwas unerfahren ;)

von Falk B. (falk)


Lesenswert?

@  Chris Höchner (themasterchris)

>Hmm ok hört sich ja alles sinnvoll an nur wie mach ich das genau?
>Sorry bin leider noch etwas unerfahren ;)

Dann wäre sinnvoll, erstmal kleinere Brötchen zu backen.

Schau mal hier rein.

Beitrag "LED-Matrix, 9x9 RGB, Voll dimmbar"

Mit der Platine kann man eine 9x9 RGB-Matrix per DMX512 ansteuern. Zwei 
davon passen an einen DMX-Strang (Universe, welch anmßender Name ;-)
Wenn deine Software 6 Universen ansteuern kann, macht das max. 12x9x9 
Matritzen. Reicht für den Anfang.

MFG
Falk

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.