VL53L0X Time-of-Flight Distance Sensor Carrier with Voltage Regulator

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Zur allgemeinen Erheiterung:
      Le forum groups.google.com/forum/#!topic/diyrovers/lc7NUZYuJOg a crée beaucoup d'essais et commentaires, pare exemple la justification de ST:
      VL53L0X is a complex device. Registers description is not possible for this device due to complexity. It contains hundred of registers with inter-dependance
      and not straight forward content. Then, the choice has been to not provide a register list, but instead develop an friendly API. (commentaire "unfriendly!).

      Inzwischen gibt es eine (unvollständige) Registerliste auf Github (Reverse-Engineering der API): github.com/GrimbiXcode/VL53L0X-Register-Map
    • Hallo
      Nun suche ich schon Stundenlang im Inernet finde aber nur Info zu Arduino
      Ich möchte dem VL53LOX eine andere Adresse geben können. Mit Arduino geht das. (3-4 Sensoren will ich abfragen)
      Leider kann ich gar kein C und möchte das auch nicht noch lernen. Vielleicht kann Michael das für Bascom übersetzen oder es hat schon jemand gemacht und stellt es hier rein. Ich komme überhaupt nicht weiter.
      Währe sehr nett
      Gruß
      Dieter
    • Gibt es kein Datenblatt das die Register beinhaltet?
      Das ist vermutlich schneller als sich durch gefühlte 100Dateien in zig Verzeichnissen durch zu wühlen.
      PS Gibt das "V0X " auch mal Daten aus oder kann das nur Fehlermeldungen? :D Eine der Dateien enthielt fast 2000 Zeilen nur für Fehlermeldungen, aber keine für Nutzdaten a_166_29aea317

      Marcopolo wrote:

      kann ich gar kein C und möchte das auch nicht noch lernen
      Du Glücklicher, schön wenn man sich das leisten kann, ich muß ständig irgendeinen "Mist" lernen ;)

      PPS Hat jemand die Arduinoumgebung installiert? Und wäre so nett den Code zu zeigen der sich hinter "lox.begin" verbirgt? Das wären vermutlich nur wenige Bascom Zeilen.
    • Schade das keiner eine Lösung hat.
      Ich habe mich nun für Arduino in der Volkshochschule angemeldet, mal sehen was wird. Programm zum Betrieb von 2 VL53.. habe ich bereits auf ein Nano Bord geschrieben. Geht alles, aber ohne Kentnisse keine Erkentnisse. Ferner habe ich mir eine Logik Analyser gekauf, dann schreibe ich mir den Code eben manuell raus.
      Danke an alle
      Gruß
      Dieter
    • Wenn ich den C-Code richtig analysiert habe,
      muss man um eine neue Adresse zu setzen in das Register VL53L0X_REG_I2C_SLAVE_DEVICE_ADDRESS die neue Adresse schreiben.
      VL53L0X_REG_I2C_SLAVE_DEVICE_ADDRESS = 0x008a


      Die C-Routine, die das bewirkt ist in der Core.cpp zu finden. (github.com/adafruit/Adafruit_V…/core/src/vl53l0x_api.cpp)


      Die Routine:

      Source Code

      1. VL53L0X_Error VL53L0X_SetDeviceAddress(VL53L0X_DEV Dev, uint8_t DeviceAddress) {
      2. VL53L0X_Error Status = VL53L0X_ERROR_NONE;
      3. LOG_FUNCTION_START("");
      4. Status = VL53L0X_WrByte(Dev, VL53L0X_REG_I2C_SLAVE_DEVICE_ADDRESS,
      5. DeviceAddress / 2);
      6. LOG_FUNCTION_END(Status);
      7. return Status;
      8. }
      Hierbei ist wohl
      Dev = die aktuelle I2C-Adresse und
      DeviceAddress = die neue Soll-Adresse

      Könnte also so funktionieren:

      BASCOM Source Code: nicht getestet

      1. I2CStart
      2. I2CWByte aktuelleAdresse ' zum Schreiben öffnen
      3. I2CWByte &h8A ' Register-Adresse (Index)
      4. I2CWByte neueAdresse ' neue Adresse schreiben
      5. I2CStop

      Obs klappt, kann nur der Besitzer eines solchen Chips beurteilen.

      Prüfen mit I2C-Scanner!
    • Hallo
      Vielen Dank das Du dich damit beschäftigst hast.
      Geht so leider nicht.
      Das Programm von Michael arbeitet, giebt aber als Adresse Dez. 82 aus? Der VL53L0X soll aber standartmäßig HEX-Adresse 0x29 haben.
      Deinen Code schreibe ich unmittelbar nach dem lesen der Adresse und lese diese erneut, aber es bleibt bei 82.
    • Außerdem muss man wissen, wenn die Register beschrieben werden, dann gelten die Werte nur bis zum nächsten Reset. Es ist ein EEProm, sondern Register.

      Bedeutet, wenn du die Adresse änderst, darfst du dann keinen Reset machen.

      Und beim Schreiben der neue Adresse musst du auch aufpassen, ob du die 7-Bit oder die 8-Bit Adresse angibt.
      Den Unterschied hat Michael im Post 33 bereits gesagt.
    • Hallo
      So habe ich den Code ergänzt die Termianl Ausgabe ist dann wie unten

      For I = 0 To 254 Step 2
      I2cstart
      I2cwbyte I
      If Err = 0 Then
      Print "Start I2C Adresse alt = " ; I
      End If
      Next
      ' Hier erhalte ich die Adresse vom Sensor, Dez 82

      ' Adresse neu schreiben
      I2CStart
      I2CWByte 82 ' zum Schreiben öffnen
      I2CWByte &H8A ' Register-Adresse (Index)
      I2CWByte &H53 ' neue Adresse schreiben
      I2CStop

      Nun noch einmal die Adresse holen, oder löse ich hier ein reset aus?

      For I = 0 To 254 Step 2
      I2cstart
      I2cwbyte I
      If Err = 0 Then
      Print "Start I2C Adresse neu = " ; I
      End If
      Next

      Die Ausgabe am Terminal:
      Start i2c Adresse alt= 82
      Start i2c Adresse neu = 166
      65535mm
      Hurz OF
    • Marcopolo wrote:

      Start i2c Adresse alt= 82
      Start i2c Adresse neu = 166
      Dann hat sich ja die Adresse schon mal geändert.

      Du solltest die ermittelten Adressen von Scanner in Hex angeben.
      Das lässt sich dann einfacher vergleichen.

      Wenn du die Adresse setzt (&h53), dann ist das die 7-Bit-Adresse für den Chip.
      Beim Lesen wird dir der Wert mal 2 ausgegeben (8-Bit Adresse).

      Hex 53 = dezimal 83 und das mal 2 = dezimal 166.
      Hat also funktioniert.
    • Marcopolo wrote:

      Wodurch wird die Adresse x2 ausgebeben
      Weil die Adresse des Bausteins in den Bits7 bis Bit1 übertragen wird. Bit 0 ist das Schreib/Lese-Bit.

      Marcopolo wrote:

      Ein Neustart fängt dann mit Adresse 166 an und gibt keinen Abstand aus.
      Neustart geht nicht. Hatte ich schon mal geschrieben.
      Wenn du die Adresse änderst, dann ist die so lange gültig, solane du den Chip nicht neu startest.
      Das liegt daran, dass diese Register wie RAM sind. Es ist keine EEProm, der den Wert nach dem Neustart noch hat.

      In Anbetracht der Tatsache frage ich mich sowieso, wie du 3 Bausteine an einem Bus betreiben willst.
      Nach dem Einschalten haben dann alle Bausteine die Adresse &h29 (7-Bit). Dann kannst du ja keinen der Bausteine einzeln adressieren, weil die ja die gleiche Adresse haben.

      Im Prinzip bräuchtest du 3 I2C-Busse. Dann musst du auch die Adresse nicht ändern.

      Oder warum willst du die Adresse ändern?
    • So nun kann ich die Adressen neu vergeben. Es ist mir aber vollkommen unklar wo dieser mal zwei Faktor herkommt, das kann mir nicht mit 7 oder 8 bit erklären. Es währe nett, wenn einer Licht in mein dunkel bringt.
      Aber vielen Dank an alle für die bisherige Mühe.
      Gruß
      Dieter
    • Nimm mal an, die Chip-Adresse wäre dezimal 15, dann ist das binär 00001111. Soweit klar?

      Wenn jetzt aber der Chip adressiert wird, wird rechts nor das Schreibbit gesetzt 00001111x.
      Das wäre jetzt das x.

      Und wenn du jetzt deb Bytewert liest mit dem x ganz rechts (bit 0), dann sind die eigentlichen Adressbits um eine Stelle nach links geschoben.
      Das ist mathematisch Faktor 2

      Die Adresse, mit der du jetzt in Bascom adressierst ist also 1111x, d.h. &h1E zum schreiben und &h1F zum lesen.
      Dezimal ist das dann 30 schreiben und 31 lesen.