PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF08 prob mit usbinterface



Perfect-Silence
08.02.2005, 15:33
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.


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
gruß dave

Manf
08.02.2005, 16:41
Hast Du den Code selbst geschrieben?
Manfred

Joerg
08.02.2005, 22:59
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

Perfect-Silence
10.02.2005, 13:21
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???

Perfect-Silence
10.02.2005, 14:19
also nach langen rumprobieren habe ich es geschaft... das ding funktioniert. aber noch ne frage, wie rechne ich die daten in cm um?????

Perfect-Silence
10.02.2005, 15:11
ich bekome nur komische werte. 240 255 255 255 255 255... usw
und so langsam bin ich am ende mit meinen latein.

Joerg
10.02.2005, 15:37
Hallo Dave,


also nach langen rumprobieren habe ich es geschaft... das ding funktioniert. aber noch ne frage, wie rechne ich die daten in cm um?????

wenn die Messung mit dem Command 81 ausgelöst wird, dann wird das Ergebnis in cm zurückgegeben.


ich bekome nur komische werte. 240 255 255 255 255 255... usw

Na dann ist auf der I2C-Schiene noch was faul. Wie sieht dein Programm jetzt aus? Hast du die WriteBytes und ReadBytes Funktionen verwendet?
Gibt es andere Beispiele für dieses USB-Interface die funktionieren?

Viele Grüße
Jörg

Offliner
08.03.2005, 12:49
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!

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

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 hat

gruss
Sascha

Joerg
08.03.2005, 13:24
Hi Sascha,

was steht in ErgDaten.Speicher(0) und ErgDaten.Speicher(1) denn drin?


Zentimeter = Str(ErgDaten.Speicher(0)) + Str(ErgDaten.Speicher(1))

Hier muss man erst den High-Wert mit 256 multiplizieren und dann den Low-Wert addieren. Und erst anschließend in einen String wandeln.

HTH und Viele Grüße
Jörg

Offliner
08.03.2005, 13:57
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

Joerg
08.03.2005, 14:09
Hi Sascha,


Ich würde es gerne mit irgendwas multiplizieren! Nur leider liefern mir die Rigster 2 und 3 jeweils 0 zurück!

hmm das ist schlecht. Schau mal bitte, ob zwischen US-Kapsel und Leiterplatte eine Lötkugel eine Brücke zum Gehäuse bildet. Es gab im letzten Jahr mal eine Serie, da waren ein paar SRF fehlerhaft. Kann sein, dass das evtl. einer davon ist. Eine weitere Fehlermöglichkeit wäre eine durch Stoß zerstörte Ultraschallkapsel.
In beiden Fällen, Modul bitte an mich zurück. Ich repariere (falls Brücke) oder tausche es um. Alternativ darf natürlich im ersten Fall auch selbst repariert werden.

Sorry für den Trouble.

Viele Grüße
Jörg