DMX Merger/Shifter Entwicklung Fragen

We proudly present: The release of DMXControl 3.3.3!


On September 29, 2026, we held our release show for DMXControl 3.3.3. During our usual “hour-long” session, we showed you all the new features in this version and what it now has to offer.
Read all about it in the corresponding news article: We proudly present: The release of DMXControl 3.3.3!


  • Moin,

    ich habe vor mir ein Merger selber zu bauen. Da das meine erste Eigenentwicklung wird und ich noch nicht die große Ahnung von µC Programmierung habe, wollte ich mal nachfragen, ob die Grundüberlegung funktionieren kann.

    Und zwar, erstmal die Funktionen, die ich mir vorgestellt habe einzubauen.
    2x DMX In, 1 oder 2 DMX Out
    Merge A & B Modus HTP oder LTP
    Fallback A to B bzw. B to A bei Signalausfall
    Shift B on A oder A on B mit StartChannel xxx
    wenn 2 DMX Out dann noch A auf A und B auf B, wenn A ausfällt wird auf beide B ausgegeben

    Bedienung über 2x16Char Display, 3 Taster.
    Als µC hatte ich den ATMEGA 644P ins Auge gefasst, 2 UARTS, ausreichend Ram.

    Programmierung des Menus, Tasten, Leds etc. sehen ich recht gelassen entgegen, da hilft der Analyzer gut weiter. Allerdings bereiten mir der DMX Empfang und Senden etwas Sorgen, Libs wären auch die von Henne.

    Zum Empfang, ich lege ein Array DmxOut bzw. 2 bei 2 Outs im Ram an.

    else if (DmxState == STARTADR)
    hier würde ich DmxOut[DmxCount] entsprechend dem eingestellten Modus verändern.

    Wie erkenne ich ob ein korrektes DMX Signal ankommt? Überprüfen ob DmxState zu lange == IDLE ist und ob bei else if (DmxState == BREAK) DmxByte != 0 oder != 0xCC ist? (Bin des Assemblers nicht wirklich mächtig, sonst würde ich mir die Dimmer bzw. Switchpack Firmware ansehen)

    Was passiert, wenn der Merger Sendet, und gleichzeitig der Interrupt UART_RX ausgelöst wird? Schalte ich den Interrupt aus während dem Senden? Wäre dann überhaupt für 2x Empfang noch Prozessorzeit frei oder ist der dann die ganze Zeit mit Senden beschäftigt?

    Bekomme ich Probleme mit der Refresh Rate des Ausgegebenen Dmx? Ist es da egal ob der µC mit 8 oder 16MHz läuft?

    Ihr seht schon, das wird viel Try and Error werden, aber wenn das dann mal funktioniert, gibts auch nen Schaltplan und die Firmware.

    Wäre super, wenn ihr was dazu sagen könntet.

    Dennis

  • Hallo Dennis,

    vom praktischen her kann ich dir leider noch nicht so helfen, allerdings bei der Theorie.

    Hier ein paar Punkte, die mir aufgefallen sind:

    Quote

    2 DMX Out dann noch A auf A und B auf B, wenn A ausfällt wird auf beide B ausgegeben


    Da sehe ich (bis auf Spezialfälle) die praktische Anwendung dafür nicht. Wenn ich zwei DMX-Kreise habe, dann hängen doch meist unterschiedliche Geräte dran, oder? Wenn dann ein Sender-Kreis ausfällt, macht es wenig Sinn, diesen mit den Signalen vom anderen Kreis zu füttern, da das ja für eine andere Geräte-Konfiguration gedacht ist.

    Quote

    ich lege ein Array DmxOut bzw. 2 bei 2 Outs im Ram an.


    Die zwei Out-Arrays brauchst du nur, wenn die beiden Outs auch wirklich unterschiedliche Sachen ausgeben können sollen - sonst kannst du die auch elektrisch zusammenschalten.

    Was du noch nicht erwähnt hast: Du brauchst ja noch je ein Array, wo du die eingehenden DMX-Werte speicherst. Erst dann kannst du die beiden Eingänge miteinander vergleichen, und jeweils den höheren Wert ins Ausgabe-Array schreiben. -> HTP Mischung

    Komplizierter wirds mit der LTP-Mischung, da musst du für jeden Eingang zwei Arrays hinterlegen - erst dann kannst du das aktuelle Signal mit dem vorherigen Signal vergleichen, und dann feststellen, welche Werte sich geändert haben.

    Stefan

  • Danke schonmal.

    Quote

    Da sehe ich (bis auf Spezialfälle) die praktische Anwendung dafür nicht.


    Darum gehts mir, das soll ne Eierlegende Wollmilchsau werden, mit all features on.
    Ich benutze oft für konventionelles Licht nen Pult und für Intelligentes DMXControl, somit auch 2 Linien. Fällt das Pult aus, könnt ich auch mit DMXControl weitermachen (mit dem Merger).

    Ich hab mir gedacht, zumindest kommen folgende Sachen in den Schaltplan, ob ich alles nacher Bestücke weiss ich noch nicht.
    2x DMX In
    2x DMX Through (wenn Meger aus dann direkt durchgeschliffen, wenn an dann galvanisch getrennt)
    2x per Software zuschaltbarer Abschlusswiederstand
    die beiden Ausgänge jeweil 4fach gesplittet
    alle Ein und Ausgänge galvanisch von den anderen getrennt


    verschiedene Einstellungen abspeicherbar und auch wieder aufrufbar, etc...

    Über die Implementierung der Merge Modi habe ich nur kurz drüber nachgedacht, mir ist erstmal wichtig zu wissen wie sich der µC beim Empfang verhält etc.

    Ach und LoTP wird er auch noch können.
    Max brauch ich 6 Arrays a 512 Byte, als noch 1Kb Ram frei.

    Im Schaltplan vom DE Interface ist mir heute aufgefallen, dass der Ausgang terminiert ist, ist das in jedem Sender so? Dann sollte ich das auch einbauen? Bei den Koax Netzwerken ist ja auch an beiden Seiten ein Abschlusswiederstand.

    Dennis

  • Also für nen Anfänger in uC und DMX bist du ja scheinbar doch schon recht Tief in der Materie drin. Von daher sollte das für dich schon gut machtbar sein. Beim RAM denk dran, dass auch der Stack noch bischen braucht (rechne mal mit 256 Byte, wenns n paar Subroutinen werden) und du vielleicht auch noch paar globale Variablen halten willst. 1K sollte aber für beides zusammen reichen.
    Ein AVR mit 8 bzw. 16 MHz sollte problemlos in der Lage sein zwei DMX Universen zu senden/empfangen wenn mans nit grad in Basic programmiert. Aber natürlich machts was aus, ob der AVR auf 8 oder 16 MHz läuft. Mit 16 rechnet er grade doppelt so flott und daher würd ich damit auch sicherheitshalber mal anfangen, da sollts dann auf keinen Fall Performanceprobleme geben.
    Was das gleichzeitige Senden/Empfangen angeht: Die Wandlung von Bytes auf Bit bzw. im empfangspfad umgekehrt macht ja die UART hardware und du bekommst dann nen IRQ wenn ein Byte gesendet bzw. empfangen wurde und dort sagste der Hardware dann die nächsten Schritte, die sie tun soll. Wenn zwei Interrupts gleichzeitig auftreten, wird erst der eine angesprungen und wenn der abgearbeitet is, springt der AVR sofort in den anderen. Aber du musst dir keine Sorgen machen, dass du so ein empfangenes Byte nicht direkt bearbeiten kannst falls du gerade noch in nem anderen IRQ steckst. Auch die AVR UARTs haben einen 1 Byte tiefen FIFO, d.h. wenn ein IRQ kam, dass ein Byte empfangen wurde, kann der UART im Hintergrund schon noch ein zweites Empfangen. Erst wenn dessen Empfang beendet ist und es weitergereicht werden soll, musst du das erste Byte ausgelesen haben. Bei DMX (250 Kbit und 8N2) dauert ein Byte 4us*11 = 44us, d.h. bei 16 MHz 704 Takte. Das reicht normalerweise locker.

  • Quote

    Original von fisl
    Darum gehts mir, das soll ne Eierlegende Wollmilchsau werden, mit all features on.


    Ah, das klingt interessant. Dann kannst du für Version 2 ja auch ein DMX Patch vorsehen ;)
    Nur irgendwann ist dann ein größeres (Grafik?-)Display und mehr Tasten (vier für ordentliche Navigation) notwendig :D

    Quote

    Original von fisl
    Ich hab mir gedacht, zumindest kommen folgende Sachen in den Schaltplan, ob ich alles nacher Bestücke weiss ich noch nicht.
    2x DMX In
    2x DMX Through (wenn Meger aus dann direkt durchgeschliffen, wenn an dann galvanisch getrennt)


    Sind die Through die Ausgänge, oder kommt da auch noch 2x DMX Out dazu?
    Ich würde bei ausgeschaltetem Gerät tendenziell eher die Eingänge auf die Ausgänge durchschleifen, statt auf die Thru.
    Du brauchst dann pro Ausgang 1½ 2x Wechsler Relais (du musst ja die Masse auch trennen können, wenns galvanisch getrennt sein soll).

    Quote

    Original von fisl
    2x per Software zuschaltbarer Abschlusswiederstand


    Für den Eingang? Brauchst du nur, wenn du mit Thru arbeitest, sonst kann der immer aktiviert sein (nur beim Stromausfall nicht).

    Quote

    Original von fisl
    die beiden Ausgänge jeweil 4fach gesplittet


    Hui, für den Großeinsatz :) Wenn du bei ausgeschaltetem Merger den DMX-Kreis durchschleifst, dann geht da aber nur ein Ausgang - DMX darfst du ja nicht splitten.

    Quote

    Original von fisl
    Im Schaltplan vom DE Interface ist mir heute aufgefallen, dass der Ausgang terminiert ist, ist das in jedem Sender so? Dann sollte ich das auch einbauen? Bei den Koax Netzwerken ist ja auch an beiden Seiten ein Abschlusswiederstand.


    Genau, ist das selbe Prinzip, beide Enden brauchen nen Abschlusswiderstand. Reflektionen vom Signal könnten ja an beiden Seiten auftreten.

    Weil du oben gemeint hast "ob ich alles nacher Bestücke weiss ich noch nicht" kam bei mir der Gedanke nach dem Preis auf. Das ist schon einiges...

    Ein Ausgang:
    SN 75176 0,26 €
    6N 137 0,52 €
    SIM2-0505S 5,30 €
    NC-5FDL 7,95 €
    + Kleinzeugs (Widerstände, Kondensatoren)
    = 15 €

    Ein Eingang braucht eigentlich die gleichen Teile, da ist nur der Flanschstecker billiger (6,20 €), da liegst du bei 13 €

    Für 2x IN + 2x4x OUT sind wir dann (bei komletter galvanischer Trennung) für die reinen Materialkosten bei 146 € + 26 € (1 HE Rackgehäuse) + Netzteil + Hauptplatine (mit Bauteilen) + Display und Bedienelemente.

    Ich würde die galvanische Trennung modular vorsehen, z.B. ich will nur Ein- und Ausgang voneinander getrennt haben, oder die Ausgänge nur paarweise getrennt. Das kann man ja dann per Drahtbrücken auf der Hauptplatine erledigen.

    Ich wünsche dir auf jeden Fall viel Spaß und Erfolg mit dem Projekt!

    Stefan

    .

    Edited once, last by Stefan (August 14, 2009 at 7:30 PM).

  • Danke Michael und Stafan,

    Quote

    Stefan schrieb
    Nur irgendwann ist dann ein größeres (Grafik?-)Display und mehr Tasten (vier für ordentliche Navigation) notwendig


    Dann kommt auch direkt Tetris oder so drauf :)

    Quote

    Stefan schrieb
    Für den Eingang? Brauchst du nur, wenn du mit Thru arbeitest, sonst kann der immer aktiviert sein (nur beim Stromausfall nicht).


    Hab die Idee auch wieder verworfen, Sinnlos

    Quote

    Stefan schrieb
    kam bei mir der Gedanke nach dem Preis auf


    Ja, der wird nicht gering sein.

    Quote

    Stefan schrieb
    Sind die Through die Ausgänge, oder kommt da auch noch 2x DMX Out dazu?


    Ne das sind nicht die Ausgänge, die führen einfach nur die beiden Eingangssignale weiter.

    Quote

    Stefan schrieb
    Ich würde bei ausgeschaltetem Gerät tendenziell eher die Eingänge auf die Ausgänge durchschleifen, statt auf die Thru.


    Stimmt auch wieder, da müsst ich nochmal drüber nachdenken.

    Jetzt noch ein Frage, die Optokoppler invertieren das Signal oder? Also müssten am Ausgang die Datenpins vertauscht werden. Bei den Ausgängen wäre das ja egal, aber bei den Throughs nicht.

    Dennis

    Edited once, last by fisl (September 7, 2009 at 9:45 PM).

  • Mal nen kleines Update,

    folgende Funktionen soll der Merger unterstützen:

    Merge beide Eingänge werden im Modus HTP, LTP oder LoTP gemerged und auf beide Ausgänge ausgegeben.
    Dabei kann gewählt werden, was passiert, wenn eine DMX Linie ausfällt, Hold, None

    Shift ein Eingang wird an den anderen angehängt (A an B oder B an A). Das Ergebnis wird auf beide Ausgänge ausgegeben.
    Dabei kann gewählt werden, was passiert, wenn eine DMX Linie ausfällt, Hold, None

    Hold jeder Eingänge wird auf den entsprechenden Ausgang ausgegeben. Fällt eine DMX Linie aus, werden die letzten Werte ausgegeben.

    Clone jeder Eingang wird auf den entsprechenden Ausgang ausgegeben. Fällt eine DMX Linie aus, wird der andere auf beide Ausgänge ausgegeben.
    Dabei kann gewählt werden, was passiert, wenn beide ausfallen Hold, None.

    Fallback ein Eingang wird auf beide Ausgänge ausgegeben. Fällt diese DMX Linie aus, wird auf den anderen Eingang umgeschaltet. A auf B, B auf A, oder beide Richtungen.
    Der Eingang muss gewählt werden.

    *Hold bedutet, zuletzt empfangene Werte werden weitergesendet (im Modus Shift werden die Werte der funktionierenden DMX Linie weiterhin übernommen)
    *None bedeutet, es wird nichts mehr gesendet

    Da fällt mir gerade ein, "Zero" könnte man noch einbauen, damit auch jeder Zuschauer merkt, dass etwas nicht stimmt :)

    Desweiteren werden die Ausgänge nicht gesplittet, dafür baue ich mir einen seperaten Splitter.

    Ist der Merger aus, werden die Signale auf die beiden Outs durchgeschliffen.

    Throughs wird es weiterhin geben.

    In Softwareversion 1.1 kann das DMX Signal der Eingänge und Ausgänge als Bargraph angezeigt werden, wie beim Analyzer. Evtl. weitere Funktionen des Analyzers, je nach dem wie viel Platz noch ist.

    In Softwareversion 1.2 können beiden Ausgängen unterschiedliche Funktionen zugewiesen werden,
    z.B. Ausgang 1 Merge A & B Modus HTP, Ausgang 2 Merge A & B Modus LTP, oder
    Ausgang 1 Merge und Ausgang 2 Shift.

    für weitere Ideen und Vorschläge, Verbesserungen bin ich immer offen.
    Besonders würde mich interessieren, ob es festgelegte Begriffe für die Funktionen gibt. In jeder Anleitung, in die ich geguckt habe, stehen andere drin.

    Im Anhang noch die Menustruktur
    "<" stellt dabei den Cursor da, dieser wird immer nur hinter dem Wert angezeigt, der gerade durch die Tasten "Up" & "Down" geändert wird. Durch die Taste "Next" wird der Cursor an die nächste Position gesetzt.

    Über die Taste "Settings" kommt man in ein anderes Menu, in dem dann Einstellungen wie "Single" oder in v1.2 dann "Extended" Modus gewählt werden können, vermutlich dann auch Bargraph etc.

    Dennis

  • Nimm vielleicht sogar einen Atmel (z.B. ATMEGA128 ), an den du externen RAM randübel kannst.
    Kostest je nach ext. RAM-Größe ca. 1,50€. Wenn du dann alles bis auf den Stack im ext. RAM unterbringst, bist du vor nem Stacküberlauf quasi sicher und kannst viele, viele Arrays im Speicher halten. Eindampfen auf den int. RAM kann man immer noch und die paar Takte (ich glaube es waren 2-3) für eine Speicheroperation sollten auch noch drin sein.

    mfg Thorsten

  • Naja eigentlich wollte ich es vermeiden bei meinem ersten AVR Projekt direkt nen 64 Pin AVR reinzulöten.
    Habe keine Ahnung ob der Programmer funktioniert, oder ob ich den AVR nicht Grille. Da wäre es naja nicht ganz so lustig den auszutauschen. Darum ist die Wahl auf den 644P gefallen, ist glaub ich der größte 40P DIL mit 2 UARTS.

    Dennis

    Edited once, last by fisl (August 20, 2009 at 9:36 PM).

  • Hi!

    Ich bin ja nicht wirklich der Platinenlöter, aber ich schätze soviel Platz und Geld sollte für einen Stecksockel eigentlich immer drin sein.
    Sogar bei meinem allerersten Selbstbauprojekt hatte ich welche drin. War auch gut so, denn aufgrund eines (dummerweise selbst reingelöteten) Kurzschlusses war der erste Satz OPs gleich mal durch...

    Außerdem könnte man sich dann auch durchaus eine reine "Programmerplatine" bauen wenn man mal was anderes testen will.

    Hoc

    Mein Equipment:
    1x Hirn | 2x Augen (leicht defekt) |2x Ohren | 1x Mund |32x Zahn (zum Teil V1.5) | 1x Handundfuß-Interface
    *SCNR*

    Edited once, last by Hoc (August 19, 2009 at 9:22 PM).

  • ja auf meinen Platinen ist alles gesockelt, nur habe ich noch keinen für TQFP-64 gefunden :)
    eigene Platine ätzen und dann über pinhead, ok ginge auch ...

    Dennis

  • 162er ist auch gut, da bekommt man auch noch ext. RAM dran wenn man will.
    Das das deine erste Platine werden soll, war mir entfallen.
    TQFP64 sind aber noch gut mit nem 0,4er oder 0,8er Lötkolben zu löten.

    mfg Thorsten

  • sorry hatte mich verschrieben, eigentlich sollte da 644P stehen.
    Je mehr ich drüber nachdenke, desto eher tendiere ich tatsächlich zum externen RAM (Software wird schon recht komplex werden und wenn dann die 6x512Byte nicht im internen RAM rumfliegen würden wäre das gut). Allerdings hab ich da genau 0 Ahnung von.

    Kann da jemand was zu sagen, welche Möglichkeiten es da gibt, hab gesehen RAM direkt dran, übern Latch wie beim DE Interface oder über SPI. Sollte nicht gar so viele Pins verbraten und ausreichend schnell sein. Wenn ich mich jetzt nicht irre im schlechtesten Fall 6 Byte lesen + 6 Byte schreiben / 44us -> 28Kb/s.

    edit: zum Latch wie beim DE Interface hab ich gerade mal nachgelsen, die 16 I/O Pins wären zwar frei, bzw. könnte ich frei machen, aber der 644P hat kein ALE Pin, womit ich wieder beim 162 wäre, der 1Kb RAM hat, genau so viel, wie beim 644P noch frei wäre.

    Eine weitere Möglichkeit wäre noch, sollte das zu wenig sein, einfach den 1284P nutzen, falls der irgendwann mal verfügbar sein sollte ...

    Dennis

    Edited 2 times, last by fisl (August 21, 2009 at 1:19 AM).

  • Ext. RAM geht nur wie beim DE Interface. Du kannst Speicher zwar beliebig an nen AVR anschliessen und über subfunktionen ansprechen, aber du willst, dass es mit den ASM speicherkommandos (sts, lds usw.) geht. Weil was anderes wirste du deinem Compiler nicht erklärt bekommen und das externe hardware Speicherinterface verbrät auch so schon genügend Zyklen.
    Noch ne Andere Idee: Schau dich mal bei den ARMs um. Die sind erstaunlich billig, laufen z.B. richtig flott (100 MHz) und haben auch intern z.B. 64 KByte RAM un kosten trozdem nur 15 Euro oder so...

  • Das wäre natürlich extrem schick.
    Aber dafür müsste ich dann alles auf die andere Plattform portieren (LCD Ansteuerung, DMX Libs) und wenn ich dann etwas nicht hinbekomme, hab ich ne teure Platine zum an die Wand hängen.
    Wenn ich beim ATMEGA bleibe kann ich auf etwas schon funktionierendes zurückgreifen.
    Eventuell ja in der Rev 2 :)

  • Newly created posts will remain inaccessible for others until approved by a moderator. The last reply was more than 365 days ago, this thread is most likely obsolete. It is recommended to create a new thread instead.