Hast Du den Code selbst geschrieben?
Manfred
hi leute habe ein problem. habe ein interface (USB HighSpeed Interface Modul V2.5 mit 8KB I²C EEPROM)
ich will eine ultraschallmessung auslösen, aber irgendwie geht es nicht.
naja ihr könnt euch den code mal angucken und mir dann mal bescheid sagen.
gruß daveCode:Const Initialized As Boolean = True Dim OK As Boolean Dim Zentimeter As Byte Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Type Daten Speicher(1) As Byte End Type Function fehlerCheck() Fehler = UsbGetError Select Case Fehler Case 0 MsgBox ("no Error") Case 1 MsgBox ("File Not found") Case 2 MsgBox ("Device not present: The device is not connected or the driver is not installed correctly") Case 3 MsgBox ("Unable to open device") Case 4 MsgBox ("Usb transfer failed: The USB transfer timed out or the device has been removed during a USB transfer") Case 5 MsgBox ("Out of memory: The DLL failed to allocate memory") Case 6 MsgBox ("Invalid parameter: One of the parameters passed to a function is wrong or out of range") Case 7 MsgBox ("Interface is not initialized: The interface has not been initialized using UsbInt") Case 8 MsgBox ("I2c transfer timed out: The I2C transfer timed out. Perhaps the I2C timeout value has to be modified using UsbSeti2cTimeout") Case 9 MsgBox ("I2c bus error (lost arbitration)") Case 10 MsgBox ("The I2C slave did not acknowledge") Case 11 MsgBox ("Eeprom write timed out: The EEprom did not ackknowledge during the selected EEprom timeout. Perhaps the timeout has to be increased using the function UsbEEpSetTimeout.") Case 12 MsgBox ("SPI bus has to be initialized before calling this function: You called an SPI-transfer function, but did not initialize the SPI bus using UsbSpiInit before") Case 13 MsgBox ("Parallel bus has to be initialized before calling this function: You called an Parallel bus function without initializing it using UsbParInit or UsbParInitUsingArray") Case 14 MsgBox ("UsbParIn transfer timed out") Case 15 MsgBox ("UsbParOut transfer timed out") Case 16 MsgBox ("Internal error-Transaction number mismatch") End Select End Function Private Sub Command1_Click() OK = UsbClose(0) End End Sub Private Sub Command2_Click() OK = True OK = UsbI2CWriteByte(0, 112, 0) OK = UsbI2CWriteByte(0, 112, 81) If OK Then MsgBox ("OK is Ok") Else MsgBox ("OK is nicht OK") OK = UsbI2CWriteByte(0, 112, 2) OK = UsbI2CReadByte(0, 112, Zentimeter) If OK Then MsgBox ("OK is Ok") Else MsgBox ("OK is nicht OK") Text1.Text = Zentimeter End Sub Private Sub Command3_Click() Dim Daten As Daten OK = True Daten.Speicher(0) = 0 Daten.Speicher(1) = 81 OK = UsbI2CWriteBytes(0, 112, 2, Daten.Speicher(0)) 'OK = UsbI2CWriteBytes(0, 112, 2, Daten.Speicher(1)) ' 'OK = UsbI2CWriteByte(0, 112, 81) Sleep 100 OK = UsbI2CWriteByte(0, 112, 0) OK = UsbI2CReadByte(0, 112, Zentimeter) Text1.Text = Zentimeter End Sub Private Sub Form_Load() Text1.Text = "" OK = UsbSetLicense("license.dat") If OK Then Form1.Visible = True Else MsgBox ("Licens nicht erkannt") OK = UsbInit(0) If OK = 0 Then MsgBox ("Unable to initialize USB interface. Device not present?") If OK = 0 Then End OK = UsbI2CSetTimeout(0, 200) If OK = 0 Then MsgBox ("TimeOut nicht gesetzt!") OK = UsbI2CSetSpeed(0, 0) If OK = 0 Then MsgBox ("Spped nicht gesetzt!") End Sub
Hast Du den Code selbst geschrieben?
Manfred
Hallo Dave,
ich hatte vor ein paar Tagen zu dem gleichen Interface eine Supportanfrage per Mail. Du warst nicht zufällig der Frager?
Falls nicht, ich habe mangels Detailkenntnissen des Interfaces folgendes geraten:
Also, ich würde das mit der WriteBytes Funktion lösen. Da ich von VB keine Ahnung habe und jetzt nicht weiß, wie man da mit Pointern arbeitet, das ganze in einer Art Pseudocode:
// Messung ausloesen (LED muss aufblinken
data = {0, 81};
OK = UsbI2CWriteBytes (0, 112, 2, addr(data));
Äquivalent beim Einlesen nach der Messung (70ms warten):
// Messwert holen
OK = UsbI2CWriteByte(0, 112, 2) // Startaddr. schreiben
OK = UsbI2CReadByte (0, 112, Range_HiByte); // Range Value lesen
OK = UsbI2CReadByte (0, 112, Range_LoByte);
evtl. auch UsbI2CReadBytes statt UsbI2CReadByte verwenden:
// Messwert holen
OK = UsbI2CWriteByte(0, 112, 2) // Startaddr. schreiben
OK = UsbI2CReadBytes (0, 112, 2, addr (data)); // Range Value in data lesen (2 Byte)
Vielleicht hilft das ja schon weiter.
Viele Grüße
Jörg
ich habe den code mit einen kolegen geschrieben. kann sein das er schon eine e-mail geschrieben hat... ich versuche jetzt auch mein glück bei der fehlersuche, aber ich komme nicht weiter. habt ihr ne idee???
also nach langen rumprobieren habe ich es geschaft... das ding funktioniert. aber noch ne frage, wie rechne ich die daten in cm um?????
ich bekome nur komische werte. 240 255 255 255 255 255... usw
und so langsam bin ich am ende mit meinen latein.
Hallo Dave,
wenn die Messung mit dem Command 81 ausgelöst wird, dann wird das Ergebnis in cm zurückgegeben.also nach langen rumprobieren habe ich es geschaft... das ding funktioniert. aber noch ne frage, wie rechne ich die daten in cm um?????
Na dann ist auf der I2C-Schiene noch was faul. Wie sieht dein Programm jetzt aus? Hast du die WriteBytes und ReadBytes Funktionen verwendet?ich bekome nur komische werte. 240 255 255 255 255 255... usw
Gibt es andere Beispiele für dieses USB-Interface die funktionieren?
Viele Grüße
Jörg
Allso hab meine Prüfungen hinter mir
also.... der neue Code der immer noch keine Mess ergebniss.
Nur Versions Register und Lichtsensor geben gescheite Werte zurück!
Wenn ich an die Stelle des Ziel Registers fürs Lesen eine 0 schreibe bekomme ich Perfekt die Version (6) und die Lichtverheltnisse zurück gegben nachdem das LED am SRF08 geplinkt hatCode:Dim Daten As Daten Dim ErgDaten As ErgDaten Dim Zentimeter As String OK = True '~~~~~ Reichweite ~~~~~ Daten.Speicher(0) = 1 'Verstärkungs-Register Daten.Speicher(1) = 31 'Machimale Verstärkung OK = UsbI2CWriteBytes(0, 112, 2, Daten.Speicher(0)) '~~~~~ Messung ~~~~~ Daten.Speicher(0) = 0 'Befehls-Register Daten.Speicher(1) = 81 'Messung in CM OK = UsbI2CWriteBytes(0, 112, 2, Daten.Speicher(0)) Sleep 100 '~~~~~ Lesen ~~~~~ Daten.Speicher(0) = 2 'Ziel Register OK = UsbI2CWriteBytes(0, 112, 1, Daten.Speicher(0)) OK = UsbI2CReadBytes(0, 112, 2, ErgDaten.Speicher(0)) Zentimeter = Str(ErgDaten.Speicher(0)) + Str(ErgDaten.Speicher(1)) Text1.Text = Zentimeter
gruss
Sascha
Hi Sascha,
was steht in ErgDaten.Speicher(0) und ErgDaten.Speicher(1) denn drin?
Hier muss man erst den High-Wert mit 256 multiplizieren und dann den Low-Wert addieren. Und erst anschließend in einen String wandeln.Zentimeter = Str(ErgDaten.Speicher(0)) + Str(ErgDaten.Speicher(1))
HTH und Viele Grüße
Jörg
Ich würde es gerne mit irgendwas multiplizieren! Nur leider liefern mir die Rigster 2 und 3 jeweils 0 zurück!
Jedenfalls im Code den ich oben angegeben habe!
Aber mit der Versions Nummer (Stimmt die 6?) und dem Lichtsensor geht es Sobalt ich von register 2 lese!
Wird keine messung ausgeführt?
Vielen Vielen Dank schon jetzt!
Gruss Sascha
Lesezeichen