-
ich weiss leider nicht mehr wo ich den code gefunden habe...
der intressante teil ist in rec_isr...
Code:
' "Deklaration" m³sste klar sein
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 250000 'Baudrate 250Kbaud
$framesize = 128
$swstack = 32
$hwstack = 64
Open "Comc.4:9600,8,n,1" For Output As #1
' ben÷tigete Variablen
Dim Dmx_count As Integer '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?
' Ports setzen und configurieren
Config Portb.0 = Output 'Schaltausgõnge
' Anfangsvariablen Festlegen
Dmx_count = 0 'kein Paket empfangen
Dmx_clock = 16 '
Dmx_adr = 55
'DMX_Adresse 2
Config Portb.4 = Output
Config Portb.3 = Output
Config Portb.2 = Output
Dim Ledr As Byte
Dim Ledg As Byte
Dim Ledb As Byte
Dim Servo1 As Byte
Dim Servo2 As Byte
Dim Speed As Byte
Dim Strobe As Bit
Dim Strobo As Byte
Dim Strobo_to As Byte
Dim X As Byte
Config Timer1 = Pwm , Prescale = 64 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
Config Timer2 = Pwm , Pwm = On , Compare = Set , Prescale = 1
Wait 1
On Urxc Rec_isr
Enable Urxc
Enable Interrupts
' ******************************************************************************
' Hauptschleife
' ******************************************************************************
Do
Decr Dmx_off
If Dmx_off = 0 Then
Set Portb.0
End If
X = 23
Disable Interrupts
Printbin #1 , 1 ; Servo1 ; Servo2 ; Speed;
Enable Interrupts
Waitms 50
'Incr Strobo_to
'If Strobo_to >= Strobo Then
' Strobo_to = 0
' ' Toggle Strobe
'End If
'Toggle Strobe
'If Strobe = 0 Then
Pwm1a = Ledr
Pwm1b = Ledg
Ocr2 = Ledb
'Else
' Pwm1a = 0
' Pwm1b = 0
' Ocr2 = 0
'End If
'Incr Strobo_to
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 < 8 Then
Select Case Dmx_adr_temp
Case 1:
'Ocr0a = Dmx_byte
Case 2:
Ledr = Dmx_byte
Case 3:
Ledg = Dmx_byte
Case 4:
Ledb = Dmx_byte
Case 5:
Servo1 = Dmx_byte
Case 6:
Servo2 = Dmx_byte
Case 7:
Speed = Dmx_byte
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 Portb.0 : Dmx_clock = 16 : End If
End If
Dmx_off = 64
Return
-
Danke, sehr komplex!
Ich muss jetzt mal gucken ob man sich DMX Schnittstellen für den PC zusammenlöten kann ;)
-
für den pc?
für was denn? um vom pc aus zu senden?
-
Jo genau.
Kleines C Proggy zur Ansteuerung (oder bereits ein Fertiges).
Die Frage wäre nur ob sich das lohnt dafür extra DMX zu verwenden.
Wenn ich später nochmal was damit mache vielleicht schon, aber wenn nicht wäre es mit RS232 wohl viel einfacher.
-
wenn du keine naderen geräte hast die du über dmx steuern kannst denke ich nicht dass es sich lohnen wird... wenn du eh nur den einen moving head steuern wilst würde ich einen eigenen bus auf rs232 basis machen... ist einfacher...
-
Ja ist nur fürs Zimmer, ich denke DMX wird dann wegfallen.
Mir ist nur noch nicht ganz kla wie ich die programmierung am besten aufbauen könnte.
Einfach nur:
Rot an
Tan 90° kippen
Blau an
usw wäre ja oky, aber net richtige kleine Lightshow komfortabel anzusteuerun wird nicht so einfach werden.
Was hast du an deinem Moving Head jetzt eig. noch geplant?
Kannst du mir vielleicht noch Infos über die Motoren, Spot, RGB Ansteuerung (FETs?) geben?
Weil wenn ich sowas baue überleg ich es mir erstmal richtig, bevor ich mir wieder viel zu viel vornehme ;)
-
die oberfläche für die ansteuerung würde ich so machen dass du für alle 3 farben und die beiden moren je einen schieberegler hast... dann kanst du position und farbe einstellen... dann verschiedene speicherplätze um die einstellungen zu speichern und dann einfach die einzelnen daten der speicherplätze an den moving head schicken... so funktioniert auch ein einfaches dmx steuer pult...
schrittmotoren habe ich die von conrad... die günstigsten...
ne prolight led von led1.de http://www.led1.de/shop/index.php?cN...747262958a911c
und davor dann ne fresnell linse
https://www.roboternetz.de/phpBB2/ze...639&highlight=
für die led ansteuerung einfach passende vorwiderstände und transistoren...
geplant ist noch dass er ein gehäuse bekommt und die antriebe von den motoren auf die achsen verbessern...
gruss bluesmash
-
Oky danke soweit, wenn werd ichs dann wohl mit meinen 3€ Motörchen probieren.
Zwei Frage hab ich noch, was für ein Spot Gehäuse verwendest du?
Ein kleiner PAR oder?
Und wie bekomm ich die hohe Geschwindigkeit hin (Clock vom L297), per Waitms 1 Intervall dreht sich der Motor nicht besonders schnell.
Per Timer?
Ich hab kaum Ahnung in Sachen Lichttechnik sorry :wink:
-
ich kenne mich noch weniger damit aus ;) was ist ein par?
led:
http://www.led1.de/shop/product_info...747262958a911c
collimator:
http://www.led1.de/shop/product_info...747262958a911c
collimatorhalterung:
http://www.led1.de/shop/product_info...747262958a911c
leider passt die halterung nicht genau auf die rgb led da sie eigentlich für die prolight leds mit 2 lötpads gemacht ist... man muss halt einfach die stellen für die zusätzlichen 2 lötpads freimachen...
gruss bluesmash
-
par = „Parabolic Aluminium Reflector“ :)
ich würde nen timer nehmen den du in der gewünschten frequenz aufrufst und den clock toggelst... wait befehle sind tabu für solche sachen ;)
gruss bluesmash
--edit--
das gehäuse für den strahler ist ein einfaches aluminium rohr....