Details zur Software, Betrieb als DMX-Steuerpult
- Mit dieser Software wird aus OpenDCC eine einfache DMX-Ansteuerung.
- minidmxmod.c: Empfang vom Host und Ausgabe auf dem DMX-Port
Die Software lehnt sich in einer ersten Version sehr ;-) nahe an miniDMX an, dessen Ersteller mir freundlicherweise erlaubt hat, den Code auch für dieses Projekt zu verwenden.
MiniDMX war auch in C geschrieben, so dass eine Adaption relativ einfach war. Geändert habe ich Ports, Init des UARTs (muß für Freestyler leider fix mit 115200 Baud laufen) und die Timing bestimmenden Inline-Assembler Schleifen.
Die Software besteht daher z.Z. nur aus einem Modul:
Serielle Protokoll v1.0/v1.1
- Einfach folgenden Datenblock mit 38400 (115.200) Bits pro Sekunde, 8 Datenbits, ohne
Parität, einem Stoppbit und ohne Software- oder Hardware-Flußkontrolle
über die serielle Schnittstelle senden:
$5A - Blockstart
$A0 - Befehl: DMX-Out mit 96 Kanäle
96 Bytes für die Kanäle 1 bis 96
$A5 - Blockende
Nach max. 100ms sendet MiniDMX folgendes zurück:
$5A - Blockstart
$C1 - Befehl ausgeführt
$A5 - Blockende
- Wenn nach 100ms nichts zurückgekommen ist, stimmt die Verbindung nicht.
Normalerweise meldet sich MiniDMX schon früher zurück, dann kann sofort
der nächste Datenblock gesendet werden. Auf diese Weise können die
DMX-Daten bis zu 72 mal in der Sekunde aufgefrischt werden.
Serielle Protokoll v2.0
Die Einstellungen der seriellen Schnittstelle entsprechen denen aus Version 1.0/1.1. Es gibt zwei zusätzliche Befehle:
DMX-Out mit 256 Kanälen
$5A - Blockstart
$A1 - Befehl: DMX-Out mit 256 Kanäle
256 Bytes für die Kanäle 1 bis 256
$A5 - Blockende
DMX-Out mit 512 Kanälen
$5A - Blockstart
$A2 - Befehl: DMX-Out mit 512 Kanäle
512 Bytes für die Kanäle 1 bis 512
$A5 - Blockende
Antwort vom MiniDMX bei erfolgreicher Befehlsbearbeitung (wie bei v1.0/v1.1)
Nach max. 100ms sendet MiniDMX folgendes zurück:
$5A - Blockstart
$C1 - Befehl erfolgreich ausgeführt
$A5 - Blockende
Antwort vom MiniDMX bei einem Fehler
$5A - Blockstart
$C0 - Fehler bei der Befehlsausführung
$A5 - Blockende
geplante Erweiterungen
-
Die Software soll noch folgende Eigenschaften bekommen:
Speichern der Zustände der Lampen und Einzelansteuerung. Dimmvorgänge selbständig durchführen, etwa als Befehl: DIMM(channel, value, duration). Sequenz von Dimmvorgängen zusammenfassen, z.B. "es_wird_Nacht" Ziel ist eine einfache Ansteuerung mittels Macros aus TC heraus.
Diese Erweiterungen sind mittlerweile fertig, siehe Raumlichtsteuerung.
Unterlagen
Source Code (modifiziertes Orginal von Mathias Dzionsko: minidmx_mod.zip; (und nochmals Dank für den Support)