Der Empfang von DMX-Siganlen ist mit einem Microcontroller heutzutage kein Problem mehr. Es sind jedoch ein paar grundsätzliche Punkte zu beachten. Das Grundgerüst empfängt bereits das DMX-Signal und legt es in "Puffer" ab.
Ergänzt werden muß der Code noch um die Ausgabe mehrerer Kanäle und eine Abfrage eines Kodierschalters zur Startadressenbestimmung. Alternativ kann das auch mit Tastern und einem Display geschehen. Beides benötigt einige Pins des Microcontrollers, die dann nicht mehr als Ausgangskanäle zur Verfügung stehen. Deshalb wird Display und Taster im folgenden Projekt über I2C angesteuert.
Seit der Bascomversion 1.11.9.4 wird der DMX-Empfang per Highlevelbefehl unterstützt die Konfiguration geschieht mit z.B. Config Dmxslave = Com1 , Channels = 16 , Start = 3 , Store = 1!!
'--------------------------------------------------------------
' DMX-Empfang.bas
' Grundgerüst für den Empfang des DMX-512 Signals
' (c) 2008, Günter Gerold
' Fileversion 1.0
'--------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 16000000 'selbst mit 8MHz kommt der Code noch locker mit
$baud = 250000
'USART auf DMX512 einstellen
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 1
On Urxc Empfang
Enable Urxc
Enable Interrupts
'Puffer für das angekommene Byte aus dem DMX-Signal
Dim X As Byte
'Alle 512 Kanäle werden in diesem Array gehalten
Dim Buffer(512) As Byte
'Der aktuelle Kanal in der Schleife
Dim Kanal As Word
Do
'Hier muß noch dein genialer Code rein...
Loop
'--------------------------------------------------------------
'
'Empfang:
'
'steht in der USART ein Byte an, wird ein Interrupt
'ausgelöst und folgender Code abgearbeitet:
'--------------------------------------------------------------
Empfang:
X = Udr
If Ucsra.fe = 1 Then
Kanal = 0
Else
Incr Kanal
If Kanal < 513 And Kanal > 0 Then Buffer(kanal) = X
End If
Return