Seite 3 von 3
Re: Probleme mit usbdmx.dll
Verfasst: 01.12.2013 22:46
von Derren
Ja, wie sieht denn ein ByteArray in VB aus? Mal einlesen. Wenn's einfach nur ein Buffer gefüllt mit 512 Bytes wäre, wär's ja einfach. Aber ein Array hat wohl einen gewissen Overhead/Jumptable, oder liege ich da falsch?
Ansonsten probier doch mal:
Code: Alles auswählen
*dmx_array = AllocateMemory(512)
PokeB(*dmx_array + 1, 255)
PokeB(*dmx_array + 2, 100)
PokeB(*dmx_array + 3, 255)
OksidCommand(4, 512, *dmx_array)
Im schlimmsten Fall gibt's nen Fehler.
Re: Probleme mit usbdmx.dll
Verfasst: 02.12.2013 09:19
von Then
Nach langem fummeln ists nun endlich geschafft. Mein Erster Code zusammen mit dem etwas veränderten von Derren funktioniert ! Zusammen also so :
Code: Alles auswählen
Prototype OksidCommand(a, b, c)
Global OksidCommand.OksidCommand
Procedure.i LoadDLL()
Protected hDLL.i
hDLL = OpenLibrary(#PB_Any, "d:\dmx\usb2dmx.dll")
If hDLL <> 0
OksidCommand = GetFunction(hDLL, "OksidCommand")
ProcedureReturn hDLL
EndIf
ProcedureReturn #False
EndProcedure
;- Einstellung für RGB LED mit DMX512 LED Decoder
*dmx_array = AllocateMemory(512)
PokeB(*dmx_array + 0, 255) ; <= Rot
PokeB(*dmx_array + 1, 100) ; <= Grün
PokeB(*dmx_array + 2, 255) ; <= Blau
OksidCommand(4, 512, *dmx_array)
Re: Probleme mit usbdmx.dll
Verfasst: 02.12.2013 09:30
von Danilo
Then hat geschrieben:Habe nun eine Antwort bekommen! Wer kann's in PB übersetzen??
Code: Alles auswählen
[...]
Public Buffer(512) As Byte
OksidCommand(4, 512, Buffer(0))
Code: Alles auswählen
;Public Buffer(512) As Byte
;OksidCommand(4, 512, Buffer(0))
Dim Buffer.b(512)
OksidCommand(4, 512, @Buffer(0))
Re: Probleme mit usbdmx.dll
Verfasst: 02.12.2013 11:23
von NicTheQuick
Man könnte statt Byte auch Ascii nehmen, dann entsteht eventuell weniger Verwirrung durch vorzeichenbehaftete Werte.
Re: Probleme mit usbdmx.dll
Verfasst: 02.12.2013 17:37
von Derren
NicTheQuick hat geschrieben:Man könnte statt Byte auch Ascii nehmen, dann entsteht eventuell weniger Verwirrung durch vorzeichenbehaftete Werte.
Oha, darauf hab ich gar nicht geachet. Das hätte wohl nen Fehler produziert mit dem Byte-Array. Aber nachdem ja jetzt anscheinend gar kein Array gebraucht wird und man direkt in den Speicher Poket, ist es wohl wurscht.
Allerdings sollte man halt drauf achten, dass der übergebene Wert tatsächlich zwischen 0 und 255 liegt. Ansonsten könnte es wohl am Rand des Speichers einen IMA geben oder so...
PS: Der zweite Parameter von OksidCommand sollte nur so hoch sein, wie die Anzahl der tatsächlich benutzten Kanäle. Es handelt sich ja immernoch um eine serielle Schnittstelle und wenn du jedesmal 512 Kanäle änderst schaffst du nur ein paar Updates pro Sekunde (je nachdem wie schnell dein Interface ist. Meins schafft glaube ich gerade mal 2 Updates pro Sekunde mit 512 Kanälen).
Wenn du allerdings nur 3 Kanäle hast, dann solltest du da auch nur 3 reinschreiben (halt dynamisch), dann kannst du viel schnellere Sequenzen erstellen, z.B. Strobo, ohne die Strobofunktion des Fixtures zu aktivieren. Das kann bei Shows, die synchron zur Musik laufen sollen schon mal von Vorteil sein. Bei Hochauflösenden Scannern oder Movigheads kriegst du so weichere Fahrten hin etc...