hier:
Code:
'--------------------------------------------------------------------
' 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 = "2313def.dat" 'AT90S2313
$crystal = 8000000 '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 = 64
Return
war und ist für ein SwitchPack mit dem 2313
PS: Aus eigenem Interesse: Was willst du denn DMXzifizieren ??
Lesezeichen