ursprünglich habe ich mit der C#-Library von org.wayoda.csiow gearbeitet. Weil diese Library jetzt aber nicht mehr mein IOW-Board erkennt (keine Ahnung wieso), wollte ich das Simple-IO Beispiel (funktioniert) aus der SDK an meine Bedürfnisse umstricken. Ich möchte damit einen Sensirion SHT-71 auslesen.
Um Sensibus zu aktivieren und die Messung zu initialisieren benutze ich folgenden Code:
Code: Select all
byte[] report = new byte[9];
handle = IOWarrior.Functions.IowKitOpenDevice();
IOWarrior.Functions.IowKitSetTimeout(handle, 1000);
report[0] = 0x01;
report[1] = 0x01;
report[2] = 0x40;
ret = IOWarrior.Functions.IowKitWrite(handle, 0, report, IOWarrior.Defines.IOWKIT24_IO_REPORT_SIZE);
Console.WriteLine("sensibus initialisiert");
Thread.Sleep(200);
report[0] = 0x02;//i²C Report ID Write
report[1] = 0xC1;//i²C Start-Stop Signal und Control-Byte
report[2] = 0x1E;//i²C Adresse des Max und Write-Bit
ret = IOWarrior.Functions.IowKitWrite(handle, 0, report, IOWarrior.Defines.IOWKIT24_IO_REPORT_SIZE);
Console.WriteLine("messung gestartet");
Thread.Sleep(200);
report[0] = 0x03;//i²C Report ID Read
report[1] = 0x03;//i²C 2-Byte lesen
report[2] = 0x03;//i²C Control-Byte und Read-Bit//05
ret = IOWarrior.Functions.IowKitWrite(handle, 0, report, IOWarrior.Defines.IOWKIT24_IO_REPORT_SIZE);
Console.WriteLine("temperaturmessung");
Thread.Sleep(200);
Code: Select all
ret = IOWarrior.Functions.IowKitRead(handle, 0, report, IOWarrior.Defines.IOWKIT24_IO_REPORT_SIZE);
double dTemperatur = -40.1 + (0.01 * (report[1] * 256 + report[2]));