LJ-Products.de
29.01.2010, 16:37
Hallo Leute,
habe ein paar fragen zum HIGHLEVEL Befehl "Config DMXSLAVE" in Bascom.
Hier erst mal mein Code:
'$sim
$regfile = "m8515.dat" 'Atmega 8515-16PU
$crystal = 16000000 'Quarz 8Mhz extern
$hwstack = 100
$swstack = 100
$framesize = 100
Config Dmxslave = Com1 , Channels = 9 , Store = 9
Enable Interrupts
'Programmmvariablen:
Dim Teiladresse1 As Bit
Dim Teiladresse2 As Byte
Dim Teiladresse3 As Byte
Dim Teiladresse4 As Byte
Dim Teiladresse5 As Byte
Dim Teiladresse6 As Byte
Dim Teiladresse7 As Byte
Dim Teiladresse8 As Byte
Dim Teiladresse9 As Word
Dim Adresse As Word
Dim Timer_zaehler As Byte
Dim Dimmer_kanal_1 As Byte
Dim Dimmer_kanal_2 As Byte
Dim Dimmer_kanal_3 As Byte
Dim Dimmer_kanal_4 As Byte
Dim Dimmer_kanal_5 As Byte
Dim Dimmer_kanal_6 As Byte
Dim Dimmer_kanal_7 As Byte
Dim Dimmer_kanal_8 As Byte
Dim Dimmer_kanal_9 As Byte
'Subs / Funktionen deklarieren
Declare Sub Dmx_adresse_auslesen
Declare Sub Led_rot_doppelblinken
'Eingänge zuweisen
Config Pinc.0 = Input 'Eingänge von PortC.0 bis PortC.7 = DIP-Schalter
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Pinc.5 = Input
Config Pinc.6 = Input
Config Pinc.7 = Input
Config Pine.1 = Input 'Eingänge von PortE.1 bis PortE.2 = DIP-Schalter
Config Pine.2 = Input
Config Pind.5 = Input 'Spare 1 (Ausgabe Invertieren)
Config Pind.4 = Input 'Spare 2
Config Pind.3 = Input 'Spare 3
'Ausgänge zuweisen
Config Portd.7 = Output 'LED Rot (Fehler)
Config Portd.6 = Output 'LED Orange (DMX Aktiv)
Config Porte.0 = Output 'Kanal 1
Config Porta.7 = Output 'Kanal 2
Config Porta.6 = Output 'Kanal 3
Config Porta.5 = Output 'Kanal 4
Config Porta.4 = Output 'Kanal 5
Config Porta.3 = Output 'Kanal 6
Config Porta.2 = Output 'Kanal 7
Config Porta.1 = Output 'Kanal 8
Config Porta.0 = Output 'Kanal 9
'Eingänge Alias Zuweisen
Dip_1 Alias Pinc.0
Dip_2 Alias Pinc.1
Dip_3 Alias Pinc.2
Dip_4 Alias Pinc.3
Dip_5 Alias Pinc.4
Dip_6 Alias Pinc.5
Dip_7 Alias Pinc.6
Dip_8 Alias Pinc.7
Dip_9 Alias Pine.2
Dip_10 Alias Pine.1
Spare_1 Alias Pind.5
Spare_2 Alias Pind.4
Spare_3 Alias Pind.3
'Ausgänge Alias Zuweisen
Led_rot Alias Portd.7 'Fehler LED
Led_orange Alias Portd.6 'DMX aktiv LED
Kanal_1 Alias Porte.0
Kanal_2 Alias Porta.7
Kanal_3 Alias Porta.6
Kanal_4 Alias Porta.5
Kanal_5 Alias Porta.4
Kanal_6 Alias Porta.3
Kanal_7 Alias Porta.2
Kanal_8 Alias Porta.1
Kanal_9 Alias Porta.0
'interne Pullup aktivieren
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
Portc.6 = 1
Portc.7 = 1
Porte.2 = 1
Porte.1 = 1
Portd.5 = 1
Portd.4 = 1
Portd.3 = 1
Config Timer0 = Timer , Prescale = 1
On Timer0 Timerueberlauf
Enable Timer0
'##################START#################
'Power-On Sequenz
Led_rot = 1
Led_orange = 1
Waitms 500
Led_rot = 0
Led_orange = 0
'Hauptschleife
Do
Main:
'Adresse auslesen:
Call Dmx_adresse_auslesen
'Adresse auswerten:
If Adresse = 0 And Dip_10 = 1 Then
Call Led_rot_doppelblinken
End If
'Test
If _dmx_received(1) = 1 Then
Dimmer_kanal_1 = 255
End If
dimmer_kanal_2 = _dmx_received(2)
Loop
'Sub DMX_Adresse_Auslesen
Sub Dmx_adresse_auslesen:
'Dip-Schalter abfragen
If Dip_1 = 0 Then
Teiladresse1 = 1
Else
Teiladresse1 = 0
End If
If Dip_2 = 0 Then
Teiladresse2 = 2
Else
Teiladresse2 = 0
End If
If Dip_3 = 0 Then
Teiladresse3 = 4
Else
Teiladresse3 = 0
End If
If Dip_4 = 0 Then
Teiladresse4 = 8
Else
Teiladresse4 = 0
End If
If Dip_5 = 0 Then
Teiladresse5 = 16
Else
Teiladresse5 = 0
End If
If Dip_6 = 0 Then
Teiladresse6 = 32
Else
Teiladresse6 = 0
End If
If Dip_7 = 0 Then
Teiladresse7 = 64
Else
Teiladresse7 = 0
End If
If Dip_8 = 0 Then
Teiladresse8 = 128
Else
Teiladresse8 = 0
End If
If Dip_9 = 0 Then
Teiladresse9 = 256
Else
Teiladresse9 = 0
End If
'Adresse zusammenrechnen
Adresse = 0
Adresse = Adresse + Teiladresse1
Adresse = Adresse + Teiladresse2
Adresse = Adresse + Teiladresse3
Adresse = Adresse + Teiladresse4
Adresse = Adresse + Teiladresse5
Adresse = Adresse + Teiladresse6
Adresse = Adresse + Teiladresse7
Adresse = Adresse + Teiladresse8
Adresse = Adresse + Teiladresse9
'Adresse festlegen
_dmx_address = Adresse
End Sub
'Timerüberlauf
Timerueberlauf:
Timer0 = 6
'If Timer_zaehler = 255 Then
'Timer_zaehler = 0
'End If
Incr Timer_zaehler ' Zähler hochzählen lassen
If Timer_zaehler < Dimmer_kanal_1 Then
Kanal_1 = 1
Else
Kanal_1 = 0
End If
If Timer_zaehler < Dimmer_kanal_2 Then
Kanal_2 = 1
Else
Kanal_2 = 0
End If
If Timer_zaehler < Dimmer_kanal_3 Then
Kanal_3 = 1
Else
Kanal_3 = 0
End If
If Timer_zaehler < Dimmer_kanal_4 Then
Kanal_4 = 1
Else
Kanal_4 = 0
End If
If Timer_zaehler < Dimmer_kanal_5 Then
Kanal_5 = 1
Else
Kanal_5 = 0
End If
If Timer_zaehler < Dimmer_kanal_6 Then
Kanal_6 = 1
Else
Kanal_6 = 0
End If
If Timer_zaehler < Dimmer_kanal_7 Then
Kanal_7 = 1
Else
Kanal_7 = 0
End If
If Timer_zaehler < Dimmer_kanal_8 Then
Kanal_8 = 1
Else
Kanal_8 = 0
End If
If Timer_zaehler < Dimmer_kanal_9 Then
Kanal_9 = 1
Else
Kanal_9 = 0
End If
Return
'Sub Led_rot_doppelblinken
Sub Led_rot_doppelblinken:
Led_rot = 1
Waitms 50
Led_rot = 0
Waitms 20
Led_rot = 1
Waitms 50
Led_rot = 0
Waitms 200
End Sub
'Ende des Programms
End
1. Das umwandeln von _dmx_received(x) in die Dimmerwerte funktioniert
leider nicht. Kann mir jemand sagen warum?
2. Wie kann ich mit "DMXSLAVE" auswerten, ob ein DMX-Signal
angeschlossen ist?
3. Wie kann ich feststellen, ob momentan Daten empfangen werden?
4. Wie kann ich feststellen, ob das DMX Signal vertauscht ist?
Ich hoffe ihr könnt mir da ein bisschen mit Helfen.
Danke schonmal
PS: Im Anhang meine Fuses für den 8051
Bye
habe ein paar fragen zum HIGHLEVEL Befehl "Config DMXSLAVE" in Bascom.
Hier erst mal mein Code:
'$sim
$regfile = "m8515.dat" 'Atmega 8515-16PU
$crystal = 16000000 'Quarz 8Mhz extern
$hwstack = 100
$swstack = 100
$framesize = 100
Config Dmxslave = Com1 , Channels = 9 , Store = 9
Enable Interrupts
'Programmmvariablen:
Dim Teiladresse1 As Bit
Dim Teiladresse2 As Byte
Dim Teiladresse3 As Byte
Dim Teiladresse4 As Byte
Dim Teiladresse5 As Byte
Dim Teiladresse6 As Byte
Dim Teiladresse7 As Byte
Dim Teiladresse8 As Byte
Dim Teiladresse9 As Word
Dim Adresse As Word
Dim Timer_zaehler As Byte
Dim Dimmer_kanal_1 As Byte
Dim Dimmer_kanal_2 As Byte
Dim Dimmer_kanal_3 As Byte
Dim Dimmer_kanal_4 As Byte
Dim Dimmer_kanal_5 As Byte
Dim Dimmer_kanal_6 As Byte
Dim Dimmer_kanal_7 As Byte
Dim Dimmer_kanal_8 As Byte
Dim Dimmer_kanal_9 As Byte
'Subs / Funktionen deklarieren
Declare Sub Dmx_adresse_auslesen
Declare Sub Led_rot_doppelblinken
'Eingänge zuweisen
Config Pinc.0 = Input 'Eingänge von PortC.0 bis PortC.7 = DIP-Schalter
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Pinc.5 = Input
Config Pinc.6 = Input
Config Pinc.7 = Input
Config Pine.1 = Input 'Eingänge von PortE.1 bis PortE.2 = DIP-Schalter
Config Pine.2 = Input
Config Pind.5 = Input 'Spare 1 (Ausgabe Invertieren)
Config Pind.4 = Input 'Spare 2
Config Pind.3 = Input 'Spare 3
'Ausgänge zuweisen
Config Portd.7 = Output 'LED Rot (Fehler)
Config Portd.6 = Output 'LED Orange (DMX Aktiv)
Config Porte.0 = Output 'Kanal 1
Config Porta.7 = Output 'Kanal 2
Config Porta.6 = Output 'Kanal 3
Config Porta.5 = Output 'Kanal 4
Config Porta.4 = Output 'Kanal 5
Config Porta.3 = Output 'Kanal 6
Config Porta.2 = Output 'Kanal 7
Config Porta.1 = Output 'Kanal 8
Config Porta.0 = Output 'Kanal 9
'Eingänge Alias Zuweisen
Dip_1 Alias Pinc.0
Dip_2 Alias Pinc.1
Dip_3 Alias Pinc.2
Dip_4 Alias Pinc.3
Dip_5 Alias Pinc.4
Dip_6 Alias Pinc.5
Dip_7 Alias Pinc.6
Dip_8 Alias Pinc.7
Dip_9 Alias Pine.2
Dip_10 Alias Pine.1
Spare_1 Alias Pind.5
Spare_2 Alias Pind.4
Spare_3 Alias Pind.3
'Ausgänge Alias Zuweisen
Led_rot Alias Portd.7 'Fehler LED
Led_orange Alias Portd.6 'DMX aktiv LED
Kanal_1 Alias Porte.0
Kanal_2 Alias Porta.7
Kanal_3 Alias Porta.6
Kanal_4 Alias Porta.5
Kanal_5 Alias Porta.4
Kanal_6 Alias Porta.3
Kanal_7 Alias Porta.2
Kanal_8 Alias Porta.1
Kanal_9 Alias Porta.0
'interne Pullup aktivieren
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
Portc.6 = 1
Portc.7 = 1
Porte.2 = 1
Porte.1 = 1
Portd.5 = 1
Portd.4 = 1
Portd.3 = 1
Config Timer0 = Timer , Prescale = 1
On Timer0 Timerueberlauf
Enable Timer0
'##################START#################
'Power-On Sequenz
Led_rot = 1
Led_orange = 1
Waitms 500
Led_rot = 0
Led_orange = 0
'Hauptschleife
Do
Main:
'Adresse auslesen:
Call Dmx_adresse_auslesen
'Adresse auswerten:
If Adresse = 0 And Dip_10 = 1 Then
Call Led_rot_doppelblinken
End If
'Test
If _dmx_received(1) = 1 Then
Dimmer_kanal_1 = 255
End If
dimmer_kanal_2 = _dmx_received(2)
Loop
'Sub DMX_Adresse_Auslesen
Sub Dmx_adresse_auslesen:
'Dip-Schalter abfragen
If Dip_1 = 0 Then
Teiladresse1 = 1
Else
Teiladresse1 = 0
End If
If Dip_2 = 0 Then
Teiladresse2 = 2
Else
Teiladresse2 = 0
End If
If Dip_3 = 0 Then
Teiladresse3 = 4
Else
Teiladresse3 = 0
End If
If Dip_4 = 0 Then
Teiladresse4 = 8
Else
Teiladresse4 = 0
End If
If Dip_5 = 0 Then
Teiladresse5 = 16
Else
Teiladresse5 = 0
End If
If Dip_6 = 0 Then
Teiladresse6 = 32
Else
Teiladresse6 = 0
End If
If Dip_7 = 0 Then
Teiladresse7 = 64
Else
Teiladresse7 = 0
End If
If Dip_8 = 0 Then
Teiladresse8 = 128
Else
Teiladresse8 = 0
End If
If Dip_9 = 0 Then
Teiladresse9 = 256
Else
Teiladresse9 = 0
End If
'Adresse zusammenrechnen
Adresse = 0
Adresse = Adresse + Teiladresse1
Adresse = Adresse + Teiladresse2
Adresse = Adresse + Teiladresse3
Adresse = Adresse + Teiladresse4
Adresse = Adresse + Teiladresse5
Adresse = Adresse + Teiladresse6
Adresse = Adresse + Teiladresse7
Adresse = Adresse + Teiladresse8
Adresse = Adresse + Teiladresse9
'Adresse festlegen
_dmx_address = Adresse
End Sub
'Timerüberlauf
Timerueberlauf:
Timer0 = 6
'If Timer_zaehler = 255 Then
'Timer_zaehler = 0
'End If
Incr Timer_zaehler ' Zähler hochzählen lassen
If Timer_zaehler < Dimmer_kanal_1 Then
Kanal_1 = 1
Else
Kanal_1 = 0
End If
If Timer_zaehler < Dimmer_kanal_2 Then
Kanal_2 = 1
Else
Kanal_2 = 0
End If
If Timer_zaehler < Dimmer_kanal_3 Then
Kanal_3 = 1
Else
Kanal_3 = 0
End If
If Timer_zaehler < Dimmer_kanal_4 Then
Kanal_4 = 1
Else
Kanal_4 = 0
End If
If Timer_zaehler < Dimmer_kanal_5 Then
Kanal_5 = 1
Else
Kanal_5 = 0
End If
If Timer_zaehler < Dimmer_kanal_6 Then
Kanal_6 = 1
Else
Kanal_6 = 0
End If
If Timer_zaehler < Dimmer_kanal_7 Then
Kanal_7 = 1
Else
Kanal_7 = 0
End If
If Timer_zaehler < Dimmer_kanal_8 Then
Kanal_8 = 1
Else
Kanal_8 = 0
End If
If Timer_zaehler < Dimmer_kanal_9 Then
Kanal_9 = 1
Else
Kanal_9 = 0
End If
Return
'Sub Led_rot_doppelblinken
Sub Led_rot_doppelblinken:
Led_rot = 1
Waitms 50
Led_rot = 0
Waitms 20
Led_rot = 1
Waitms 50
Led_rot = 0
Waitms 200
End Sub
'Ende des Programms
End
1. Das umwandeln von _dmx_received(x) in die Dimmerwerte funktioniert
leider nicht. Kann mir jemand sagen warum?
2. Wie kann ich mit "DMXSLAVE" auswerten, ob ein DMX-Signal
angeschlossen ist?
3. Wie kann ich feststellen, ob momentan Daten empfangen werden?
4. Wie kann ich feststellen, ob das DMX Signal vertauscht ist?
Ich hoffe ihr könnt mir da ein bisschen mit Helfen.
Danke schonmal
PS: Im Anhang meine Fuses für den 8051
Bye