Probleme mit usbdmx.dll

Anfängerfragen zum Programmieren mit PureBasic.
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Probleme mit usbdmx.dll

Beitrag 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.
Signatur und so
Benutzeravatar
Then
Beiträge: 284
Registriert: 06.09.2004 13:26
Wohnort: Siegen

Re: Probleme mit usbdmx.dll

Beitrag 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)
PB 6.10LTs / Windows 11 64Bit (i9/32GB/ 1TB-SSD+4TB-HDD/3060GTX12GB) / 2x27" Multitouch

... ich mache dazu keine Aussage, weil ich mich damit selbst belasten könnte !
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Probleme mit usbdmx.dll

Beitrag 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))
Zuletzt geändert von Danilo am 02.12.2013 20:43, insgesamt 1-mal geändert.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Probleme mit usbdmx.dll

Beitrag von NicTheQuick »

Man könnte statt Byte auch Ascii nehmen, dann entsteht eventuell weniger Verwirrung durch vorzeichenbehaftete Werte.
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Probleme mit usbdmx.dll

Beitrag 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...
Signatur und so
Antworten