-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: SRF08 prob mit usbinterface

  1. #1
    Perfect-Silence
    Gast

    SRF08 prob mit usbinterface

    Anzeige

    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.

    Code:
    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

  2. #2
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    64
    Beiträge
    12.370
    Hast Du den Code selbst geschrieben?
    Manfred

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    53
    Beiträge
    409
    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

  4. #4
    Perfect-Silence
    Gast
    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???

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

  6. #6
    Perfect-Silence
    Gast
    ich bekome nur komische werte. 240 255 255 255 255 255... usw
    und so langsam bin ich am ende mit meinen latein.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    53
    Beiträge
    409
    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

  8. #8
    Offliner
    Gast

    Bin der Kollege von Dave

    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!
    Code:
    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

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    53
    Beiträge
    409
    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

  10. #10
    Offliner
    Gast

    null mal irgendwas gibt null

    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

Seite 1 von 2 12 LetzteLetzte

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •