mittels VBA möchte ich auf einen I2C-Sensor sowohl schreiben als auch lesen können.
Die Anbindung des Sensors erfolgt dabei über den USB-I2C Dongle mit dem IO-Warrior24.
Über das Programm Simple-I2C funktioniert dies bestens.
Ich bin absoluter Anfänger in Sachen Ansteuerung mittels Visual Basic.
Die Schreibadresse des Sensors ist hex 90 und die Leseadresse hex 91.
Weiterhin besitzt der Sensor noch eine Subadresse/eigenes Register mit hex 9, auf welches sowohl geschrieben als auch gelesen werden kann.
Mit folgenden vollständigen Quellcode habe ich versucht auf den Sensor zu schreiben (bzw. zu lesen, auskommentiert).
Leider war dies bislang nicht erfolgreich.
Ich würde mich freuen wenn mir jemand Tipps geben könnte was ich falsch gemacht habe bzw. ob noch was fehlt.
Vielen Dank schon einmal im Voraus!
Code: Select all
Public Declare Function IowKitOpenDevice Lib "iowkit" () As Long 'Warrior öffnen
Public Declare Sub IowKitCloseDevice Lib "iowkit" (ByVal iowHandle As Long) 'Warrior schließen
Public Declare Function IowKitWrite Lib "iowkit" (ByVal iowHandle As Long, ByVal numPipe As Long, _
ByRef buffer As Byte, ByVal length As Long) As Long 'Schreibfunktion Warrior
Public Declare Function IowKitRead Lib "iowkit" (ByVal iowHandle As Long, _
ByVal numPipe As Long, ByRef buffer As Byte, ByVal length As Long) As Long 'Lesefuntkion Warrior
Dim aus As Byte
Dim counter As Integer
Dim buffer(7)
' IO-Warrior low-level library API functions
Public Sub IowKitEnableIIC()
Dim iicPacket(7) 'entspricht buffer?
Dim nWritten As Long
' Set up IIC enable packet
' 1st report ID is for IIC control
iicPacket(0) = 1
' Enable/disable IIC
iicPacket(1) = enable
' Write Report
nWritten = IowKitWrite(iowHandle, numPipe, iicPacket(0), 8)
' IowKitEnableIIC = nWritten
End Sub
Public Sub Schreiben()
buffer(0) = 2 'ReportID=2, Schreibzugriff special functions
buffer(1) = C3 'Start-/Stoppbit setzen, 3 folgende Bytes
buffer(2) = 90 'Schreibadresse des Sensors
buffer(3) = 9 'Subadresse/Register
buffer(4) = 1 'Schreiben des Wertes HEX 1 in Register
For counter = 0 To 4
nWritten = IowKitWrite(iowHandle, numPipe, buffer(counter), 8) 'Übertragung an IO Warrior
Next counter
End Sub
Public Sub Lesen()
buffer(0) = 3 'ReportID=3, Lesezugriff special functions
buffer(1) = 1 '1 Byte soll gelesen werden
buffer(2) = 91 'Leseadresse des Sensors
buffer(3) = 9 'Subadresse/Register
For counter = 0 To 3
nWritten = IowKitWrite(iowHandle, numPipe, buffer(counter), 8)
Next counter
aus = IowKitRead(iowHandle, numPipe, buffer(3), length) '1 Byte von IO Warrior lesen
Cells(1, 1) = aus 'Übergabe an Zelle1:1 der Tabelle
End Sub
Sub main()
IowKitOpenDevice
IowKitEnableIIC
' Lesen
Schreiben
IowKitCloseDevice (iowHandle)
End Sub