DMX Code

Microcontroller, Steuerungen, Protokolle und und und.

Moderators: thomasf, random

Post Reply
User avatar
gento
Posts: 3973
Joined: Fri 17 Nov, 2000 12:00 pm
Do you already have Laser-Equipment?: Apollo 4a + 4b , Turbotrack 2 , Minisax +++ G120DT +++ G138DT +++
Raytrack 40 ,CT 6210 , CT 6800 , K12
Pangolin , LDS Dynamics ,Phoenix Premium , LDS 2010 ,LDS 2008 , HE
Gas RGB 2W , 800 mW , ALC60
RGB >1W +++
Location: D / NRW / Hamm

DMX Code

Post by gento » Mon 10 Apr, 2006 12:17 am

DMX Code für Bascom zum AVR gefunden

Fand ich so im Netz , als Basis um was ...................... recht Nett denke ich.

Gento

Code: Select all

'--------------------------------------------------------------------
' Original von:
' DMX - Dimmer 512 / by DW-Soft
' Dirk Wegener - 2004 - the_clown@web.de
'--------------------------------------------------------------------
' Bearbeitet von Jochen Steinmann
' DMX - SwitchPack
' AVR-Bascom
'--------------------------------------------------------------------
' "Deklaration" m³sste klar sein
$regfile = "m32def.dat"                                     'AT90S2313
$crystal = 16000000                                         '8MHz Quarz
$baud = 250000                                              'Baudrate 250Kbaud

' ben÷tigete Variablen
Dim Dmx_count As Word                                       'Pakete die auf Ausgõnge zielen
Dim Dmx_count_temp As Byte                                  'Gesendete Pakete
Dim Dmx_byte As Byte                                        'DMX Wert
Dim Dmx_clock As Byte                                       'Spielerei
Dim Dmx_adr As Word                                         'DMX-Adresse
Dim Dmx_adr_temp As Byte                                    'DMX-Adresse (Temp)
Dim Dmx_adr_c As Word                                       'DMX-Adresse (Counter)
Dim Dmx_off As Byte                                         'DMX-Signal noch da?

' Uart initialiesieren
Print "Start"
On Urxc Rec_isr
Enable Urxc

' Ports setzen und configurieren
Config Pind.6 = Output                                      'StatusLED
Config Portb = Output                                       'Schaltausgõnge
Set Portd.6

' Anfangsvariablen Festlegen
Dmx_count = 0                                               'kein Paket empfangen
Dmx_clock = 16                                              '
Dmx_adr = 2                                                 'DMX_Adresse 2

Enable Interrupts

' ******************************************************************************
' Hauptschleife
' ******************************************************************************
 Do
    Waitms 10
    Decr Dmx_off
    If Dmx_off = 0 Then
       Set Portd.6
    End If
 Loop

' ******************************************************************************
' Funktion: DMX-Signal emfangen und auswerten
'           Dieser Interupt wird beim eintreffen von seriellen Daten ausgef³hrt
Rec_isr:
   $asm                                                     'Programmteil f³r das Auswerten der
      .def Uart_status = R16                                'emfangenen Daten
      .def Uart_byte = R17
      .def Uart_temp1 = R18

            IN Uart_status,USR
            IN Uart_byte,UDR

            SBRC Uart_status,FE                             'Auswertung ob Datenbyte OK
            RJMP  Asm_reset                                 'bei ³berlõnge des Datenbyte = DMX Reset
            RJMP  Asm_Loop1                                 'Daten OK--->

      Asm_reset:
            LDI Uart_temp1,$00                              'Adesszõhler zur³cksetzen
            STS {Dmx_count_temp} , Uart_temp1               'Daten dem Basicvariablen ³bergeben
            STS {Dmx_byte} , Uart_byte
            RJMP Asm_exit
      Asm_loop1:
            STS {Dmx_byte} , Uart_byte
      Asm_exit:
   $end Asm

   If Dmx_count_temp <> 0 Then                              'emfangene Daten im "Dmx_buf" ablegen
      Incr Dmx_count                                        'und den jeweiligen Kanal zuordnen
      If Dmx_adr_c = Dmx_count Then
         If Dmx_adr_temp < 9 Then
            Select Case Dmx_adr_temp
               Case 1:
                  If 127 <= Dmx_byte Then : Reset Portb.0 : Else : Set Portb.0 : End If
               Case 2:
                  If 127 <= Dmx_byte Then : Reset Portb.1 : Else : Set Portb.1 : End If
               Case 3:
                  If 127 <= Dmx_byte Then : Reset Portb.2 : Else : Set Portb.2 : End If
               Case 4:
                  If 127 <= Dmx_byte Then : Reset Portb.3 : Else : Set Portb.3 : End If
               Case 5:
                  If 127 <= Dmx_byte Then : Reset Portb.4 : Else : Set Portb.4 : End If
               Case 6:
                  If 127 <= Dmx_byte Then : Reset Portb.5 : Else : Set Portb.5 : End If
               Case 7:
                  If 127 <= Dmx_byte Then : Reset Portb.6 : Else : Set Portb.6 : End If
               Case 8:
                  If 127 <= Dmx_byte Then : Reset Portb.7 : Else : Set Portb.7 : End If
            End Select
            Incr Dmx_adr_temp
            Incr Dmx_adr_c
         End If
      End If
   Else                                                     'bei DMX Reset Variablen setzen
      Dmx_count = 0 : Dmx_count_temp = 1
      Dmx_adr_c = Dmx_adr : Dmx_adr_temp = 1
      Decr Dmx_clock
      'nur eine Spielerei Toggelt eine LED am PortD.6 beim eintreffen von korrekten DMX Daten
      If Dmx_clock = 0 Then : Toggle Portd.6 : Dmx_clock = 16 : End If
   End If
   Dmx_off 
Image

schobi
Posts: 272
Joined: Mon 26 Sep, 2005 9:28 am
Location: Regensburg
Contact:

Post by schobi » Mon 10 Apr, 2006 10:33 am

Ich bin mir jetzt nicht mehr ganz sicher, aber ich dachte gemäß DMX-Spezifikation müssen ein gültiger Datenframe mit einem Startbyte=0 beginnen? Sollte man evtl. noch am Code ergänzen.

Gruß Tobias
Ich danke allen, die zur Sache nichts zu sagen hatten und trotzdem geschwiegen haben.

User avatar
fst-laser
Posts: 764
Joined: Sat 02 Jun, 2001 12:00 pm
Location: Gersthofen bei Augsburg

Post by fst-laser » Mon 10 Apr, 2006 12:27 pm

Auf Startbyte=0 müssen eigentlich nur Dimmer- und Switchpacks (so wie oben) reagieren, laut Spezifikation. Allen anderen "Gerätetypen" haben freie wahl...

Gruß Flo
F S T Discohits, Laserrausch -
Laser Abheben in die Welt der Strahlen!

Suche einen Laser Physics - Reliant300WC Weißlichtlaser...

Post Reply

Return to “Microcontroller & Steuerungen”

Who is online

Users browsing this forum: No registered users and 1 guest