Problem mit VL53L0X über P82B96

#7790772
Lesenswert?

Hallo Foraner! Meine Heizungssteuerung läuft nun seit ca. 2 Jahren zuverlässig. Ueber einen I2C Bus mit über 10m Länge und mehreren P82B96 laufen daran jeweils mehrere LM75B, zum Teil über TCA9548A, und mehrere PCF8574 erfolgreich. Im Zuge einer Erweiterung zum Messen des Füllstandes im Pellet-Bunker habe ich einen VL53L0X ToF-Sensor montiert. Aber dieser will nicht funktionieren, und zwar nur nicht über den P82B96!

Soweit konnte ich das Problem eingrenzen und kann nun gemütlich am Basteltisch probieren. Also Stand momentan:

VL53L0X-Modul ist: https://www.az-delivery.de/products/vl53l0x-time-of-flight-tof-laser-abstandssensor

P82B96-Module selbstgebastelt, siehe Schema Anhang! Im Sender die Jumper J1 und J2 gesetzt, im Empfänger J1, J2 und J6 gesetzt.

Setup siehe Anhang "Setup".

Da die Pullups VL53L0X-Modul nur 10k sind habe ich noch 2k2 dran gemacht.

Flanken sind im Oszi sauber und steil.

Library ist: https://github.com/pololu/vl53l0x-arduino und zu Testen Programm im Anhang.

Im LA sieht man, dass kein ACK gesendet wird, wenn direkt verbunden, funktioniert es einwandfrei. Siehe Screenshots im Anhang.

Im TI-Forum habe ich ein ähnliches Problem gefunden: https://e2e.ti.com/support/interface-group/interface/f/interface-forum/971849/p82b96-p82b96 leider kann ich nicht genug englisch, um das zu verstehen. Irgendwie dass man halt ohne die P82B96 verbinden soll...?

Gruss Chregu

Angehängte Dateien:
#7790821
Lesenswert?

Ich hatte den VL53L0X vor Jahren mal angeschlossen. Ganz normal I2C, keine Probleme. Auch die Nachfolge-Sensoren ..5X ..7X liefen problemlos. An den STM-Sensoren kann es nicht liegen. Ich hatte die Sensoren an einem NXP LPC11U68 als auch an einem STM H743. Alles problemlos.

Zur Messung selber: die neueren 8*8 Sensoren liefern viel weniger Störungen in der Messung als der alte L0X.

#7790843
Lesenswert?

Ups, ich habe was entdeckt: mit dem P82B96 ist der Low-Level bei über 1.2V! Und wenn ich das Datenblatt richtig verstehe, ist bei 1.12V schon High:

  • VIL Low level input voltage -0.5 ... 0.6V
  • VIH High level input voltage 1.12 ... 3.5V

Der LM75B scheint da viel gutmütiger zu sein: 1.2V ist zwar im "verbotenen" Bereich, High fängt aber erst bei 0.7xVCC (3.5V) an.

Gruss Chregu

Angehängte Dateien:
#7790853
Lesenswert?

Zum eigentlichen Problem kann ich nichts zusätzliches beitragen, aber vlt. die folgenden Hinweise:

  • Die Nachfolger vom VL53L0X sind ERHEBLICH besser und das ohne das man groß etwas ändern müsste (wurde ja schon geschrieben)
  • Falls der Sensor hinter einem Schutzglas sitzt unbedingt die Kalibrierfunktion aus dem Minitreiber ausführen, die einmalig ermittelten Werte werden im Sensor selbst gespeichert und verbessern die Performance erheblich.
#7790859
Lesenswert?

Harald A. schrieb:

Nachfolger zum VL53L0X sind ERHEBLICH besser

Danke, werde ich mir merken. Hab mal schnell geschaut: die Level auf dem Bus sind die gleichen.

Harald A. schrieb:

Schutzglas

Ja, habe ich nicht. Wie reagiert der wohl auf Staub?

Zum Problem: Habe jetzt mal eine 1N4148 in den GND reingemacht, so fällt der Low-Level aus Sicht des Sensors um etwa 0.6V (gemessen). Hilft aber nichts, immer noch der gleiche Effekt. Ach ja, der Effekt ist eigentlich: 500ms NAK, so lange ist der Timeout gesetzt...

Gruss Chregu

#7791055
Lesenswert?

Christian M. schrieb:

Habe jetzt mal eine 1N4148 in den GND reingemacht, so fällt der Low-Level aus Sicht des Sensors um etwa 0.6V (gemessen).

Mache ich einen Gedankenfehler? Auch mit 2 Dioden bringt es nichts.

Ich habe also 2 Probleme, also eigentlich 3:

  1. Warum ist der Low-Pegel vom P82B96 so hoch? Laut Datenblatt sollte der bei allerhöchstens 1V sein. Laut I2C-Spezifikationen https://www.nxp.com/docs/en/user-guide/UM10204.pdf Abschnitt 3.1.2: "Input reference levels are set as 30% and 70% of VDD; VIL is 0.3VDD and VIH is 0.7VDD." Also absolut innerhalb!

  2. Der VL53L0X (auch alle VL53LnX-Varianten) sind aber mit

Christian M. schrieb:

  • VIL Low level input voltage -0.5 ... 0.6V
  • VIH High level input voltage 1.12 ... 3.5V

völlig daneben.

  1. Möchte ich dann doch lieber den VL53L3CX verwenden. Ich würde dann gleich einen Print machen lassen mit einem TCA9517, ich hoffe, der würde das Problem lösen! https://www.lcsc.com/datasheet/lcsc_datasheet_1810181614_Texas-Instruments-TCA9517ADGKR_C201698.pdf Sind beide bei JLCPCP-Parts vorhanden.

Gruss Chregu

#7791062
Lesenswert?

Christian M. schrieb:

  1. Möchte ich dann doch lieber den VL53L3CX verwenden. Ich würde dann gleich einen Print machen lassen mit einem TCA9517, ich hoffe, der würde das Problem lösen!

Normalerweise guckt man erst die Datenblätter durch und lässt dann einen "Print" machen. Wenn du erst die Schaltung aufbaust und dann guckst, ob es funktioniert, kannst du nicht abschätzen, ob das Zufall ist, weil du sie zufällig gerade bei der richtige Kombination von Umgebungstemperatur und Versorgungsspannung betreibst, oder ob die Schaltung innerhalb der Spezifikation in jeder Lebenslage funktionieren wird.

#7791073
Lesenswert?

Christian M. schrieb:

Schema.pdf

Pfusch am Bau!

  • 820 Ohm Pullups an 5 Volt? Das könnte grenzwertig sein. Bei so hohen Low-Pegeln würden bei mir die Alarmglocken schrillen.

  • zusätzliche (unbekannte) Kondensatoren am I2C Bus? (braucht es wohl damit der Pfusch funktioniert) Oh weh, oh weh ....

  • 10m Leitung, womöglich noch in einer wilden Stern/Baum Topologie? Oh weh, oh weh ....

Christian M. schrieb:

I2C Bus mit über 10m Länge

Alles in allem eine echte Arduino-Maker show.

#7791083
Lesenswert?

Nun, I2C ist bidirektional. Die Treiber-ICs müssen daher bei einem Richtungswechsel den Pin kurz anliften, um zu erkennen, daß Low nun von der anderen Seite kommt. Auf dem Oszi kann man diese Spikes gut sehen. I2C konforme ICs haben daher immer einen Filter implementiert, damit diese kurzen Spikes nicht stören. Vermutlich wurde das beim VL53L3CX aber nicht eingehalten, so daß er hinter einem Treiber-IC nicht mehr funktioniert.

#7791351
Lesenswert?

Rainer W. schrieb:

Normalerweise guckt man erst die Datenblätter durch und lässt dann einen "Print" machen.

OT: Jaja, früher machten wir Printe, die Jungster heute machen nur noch "PCBs"...

Ja mit dem Studium der Pegel in den DaBlas bin ich mir sicher, das ich mit dem richtigen Pegelumsetzer Erfolg habe - denn die Low-Pegel sind ja das Problem!

Habe mal den Schaltplan gezeichnet...

Gruss Chregu

Angehängte Dateien:
#7802373
Lesenswert?

Also die Prototypen sind da! Hab mal 5 Machen lassen. Der Low-Pegel nach dem TCA9517 ist bei 95mV. Elektronisch ist also jetzt mal gut. Aber:

  • der VL53L3CX ist anscheinend mit einem 8-Bitter nicht mehr machbar (kann doch nicht sein, das ein simples I2C-Device 50kB Flash und 10kB RAM braucht!), und
  • in der Doku fehlt jegliche Low-Level Ansteuerung, also auf I2C-Ebene. Es wird gleich auf die Funktionen der API verwiesen. Das habe ich ja so noch nie gesehen!

Harald A. schrieb:

Die Nachfolger vom VL53L0X sind ERHEBLICH besser und das ohne das man groß etwas ändern müsste (wurde ja schon geschrieben)

Die sind vielleicht schon besser, aber Softwaremässig völlig anders!

Gruss Chregu

#7803307
Lesenswert?

Christian M. schrieb:

  • der VL53L3CX ist anscheinend mit einem 8-Bitter nicht mehr machbar (kann doch nicht sein, das ein simples I2C-Device 50kB Flash und 10kB RAM braucht!)

Was man so sehen kann, ist das auch typischer Spaghetticode, d.h. riesige Ketten an writeReg(). Ich hätte dafür erstmal eine Funktion geschrieben, die den ganzen Schrunz aus einer Tabelle als Schleife ausgibt. Dann entfallen schonmal die ganzen Ladeaktionen und Calls.

Um die eigentliche Lib anzusehen, muß man sich ja erstmal registrieren. Was daran wohl bloß so super geheim ist, oder ist es einfach nur schlecht gemacht.

#7803404
Lesenswert?

Peter D. schrieb:

Um die eigentliche Lib anzusehen, muß man sich ja erstmal registrieren.

Ja habe ich zuerst auch gedacht. Aber es erscheint auch ganz klein "Guest". Man muss zwar auch die E-Mail-Adresse angeben, um den DL-Link zu bekommen. Habe ich dann halt gemacht. Keine Ahnung, ob ich das hier hochladen darf...?

Gruss Chregu

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren