I2C Anschluss an Arduino Due funktioniert nicht

ecxabyte:
Die Frage ist warum der Beispielsketch des Lidars nicht funktioniert und warum der I2C Scanner immer "No device found" zurück gibt. Zu dem letzten Problem habe ich einen Thread gefunden aber leider nicht viel verstanden, es geht wohl um einen Bug beim Arduino Due: Link zum Thread

Das kann ich nicht bestätigen!
Der Scanner tuts perfekt.

noiasca:
du schreibst
wo ist im Datenblatt ein Diagramm für den Arduino DUE Anschluss?

Finde ich nicht.
Also mach du ein Schaltbild und ein ECHTFOTO von deinem Aufbau.
Jede Komponente - jedes Kabel muss klar für uns ersichtlich sein.

Im Datenblatt ist ein Schaltbild für den I2C Anschluss am Arduino gegeben, es wird nicht weiter auf das Modell eingegangen.

Ich vermute mal du meintest "(k)ein ECHTFOTO"? Okay dann mache ich einen Schaltbild, Moment

combie:
Das kann ich nicht bestätigen!
Der Scanner tuts perfekt.

Okay schon mal gut zu wissen, danke.

So, hier ist das Schaltbild, ich hoffe man erkennt alles. Die Kabel die nach unten rechts führen gehen zum Lidar. Farblich sind sie genauso wie im Datenblatt. Ich bin gespannt auf eure Vorschläge :slight_smile:

Bemerkung zum Schaltbild: Ich weiß nicht ob der Levelshifter der richtige ist, ich habe bei mir die grünen Kabel an “LV 1” und “HV 1” und die blauen Kabel an “LV 2” und “HV 2”.

ja schon, auch ein ECHTFOTO von deinem tatsächlichen Aufbau.

die gelbe Leitung macht was? wir sehen jetzt wieder nicht was da wie an an deinen Sensor angeschlossen ist ... da ist nichts drann oder?

sind deine Levelshifter bidirektional? Über die Datenleitung solls ja in beide Richtung gehen, bei dir steht aber RX TX was evtl. nur auf eine Datenrichtung deuten könnte...

noiasca:
Über die Datenleitung solls ja in beide Richtung gehen, bei dir steht aber RX TX was evtl. nur auf eine Datenrichtung deuten könnte...

Wenn der in echt auch so aussieht, sind die beiden äußeren Kanäle bidirektional.

Gruß Tommy

Im Anhang ist der Ausschnitt aus dem Datenblatt wo die Lidar Verbindungskabel farblich markiert sind. Im Schaltbild oben sind diese Kabel genau gleich farblich markiert.

Das andere Bild zeigt einen Ausschnitt aus dem tatsächlichen Aufbau mit dem Levelshifter (nicht verwirren lassen: die gelben Kabel im tatsächlichen Aufbau entsprechen den schwarzen Ground Kabeln im Schaltbild, ich hatte nur keine schwarzen mehr übrig).

Wie gesagt, der Levelshifter im Schaltbild entspricht nicht genau dem echten (auf dem Foto sichtbar):

ecxabyte:
Bemerkung zum Schaltbild: Ich weiß nicht ob der Levelshifter der richtige ist, ich habe bei mir die grünen Kabel an “LV 1” und “HV 1” und die blauen Kabel an “LV 2” und “HV 2”.

ecxabyte:
Ich habe diesen Levelshifter zufällig hier, ...

Hat Dein Levelshifter denn auch die PullUp-Widerstände drauf? Das kann man ja auf dem Foto (schön scharf!) nicht sehen.

Mann Mann Mann ihr seid aber streng hier :smiley:

Im Anhang seht ihr nochmal eine Nahaufnahme, ich hab den Chip andersrum verlötet damit ich nicht an die anderen Kontakte komme, deswegen konnte man es auf dem anderen Bild nicht erkennen.

ecxabyte:
Mann Mann Mann ihr seid aber streng hier :smiley:

Nee, mit streng hat das nichts zu tun. Aber wenn etwas nicht funktioniert, dann muß das einen Grund haben. In der Mehrzahl der Fragen drehte es sich um fehlende PullUp-Widerstände.

Da Du zumindest aus meiner Sicht keinen offensichtlichen und sichtbaren Fehler in der Schaltung hast, wird die Fehlersuche nun aber schwieriger. Mich irritieren die unterschiedlichen Ergebnisse der I2C-Scanner. Das hatte ich so noch nicht. Mögliche Ursachen, die mir noch einfallen:

  • Eine spezielle Eigenart des Due (siehe #18)
  • Kabelbruch, was bei den Steckbrettkabeln durchaus mal vorkommt, weshalb inzwischen alle neuen von mir durchgemessen werden.

Da ich keinen Due habe, kann ich es leider nicht ausprobieren.

Was mir auch noch aufgefallen ist: Als ich den I2C MultiSpeed Scan erneut laufen gelassen habe dauerte dieser nicht ein paar Sekunden sondern brauchte pro Adresse ca. eine Sekunde also viel länger, ohne dass ich etwas umgestellt habe. Auch nach erneutem Hochladen keine Änderung. Erst als ich das USB Kabel neu eingesteckt habe hat es wieder normal funktioniert. Irgendwie eigenartig...

Ich werde dann morgen die Kabel auf Leitfähigkeit prüfen oder Mal austauschen, trotzdem vielen Dank für eure Geduld. Ich melde mich dann morgen falls ich irgendwas neues habe :slight_smile:

Die folgenden Spannungswerte kann ich mir nicht erklären, sie dürften nur maximal +/- 0,6 V von der Versorgungsspannung abweichen:

ecxabyte:
Mit einem Multimeter habe ich versucht zu messen wie viel Spannung an dem Kondensator (s. Schlatung im Datenblatt) anliegt, beim Arduno Uno waren es ca. 3,5 V und beim Due ca. 4,5 V, obwohl sie beide Male mit 5V und GND verbunden waren.

Also "-" vom Meßgerät an den GND-Pin vom Due, dann alle 5 V und 3,3 V messen. Wenn der 5V-Pin des Due beispielsweise 4,9 V hat, darf sich das über die Schaltung nicht ändern.

Dann "+" vom Meßgerät an 5V-Pin vom Due und alle GND nachmessen.

Weitere mögliche Fehlerquellen könnten kalte Lötstellen sein.

Ich bin der Lösung immerhin ein Stück näher gekommen:

Ich habe die Schaltung nochmal komplett neu mit anderem Breadboard und komplett neuen Jumper Kabeln aufgebaut. Nun wird beim I2C Scanner wird das I2C Device nun erkannt, jedoch nur einigermaßen zuverlässig:

12:24:59.448 -> Scanning...
12:24:59.448 -> I2C device found at address 0x62  !
12:24:59.448 -> done
12:24:59.448 -> 
12:25:04.445 -> Scanning...
12:25:04.479 -> I2C device found at address 0x62  !
12:25:04.479 -> I2C device found at address 0x6A  !
12:25:04.479 -> done
12:25:04.479 -> 
12:25:09.482 -> Scanning...
12:25:09.482 -> I2C device found at address 0x62  !
12:25:09.482 -> done
12:25:09.482 -> 
12:25:14.483 -> Scanning...
12:25:14.518 -> I2C device found at address 0x62  !
12:25:14.518 -> I2C device found at address 0x72  !
12:25:14.518 -> done
12:25:14.518 -> 
12:25:19.499 -> Scanning...
12:25:19.499 -> I2C device found at address 0x6A  !
12:25:19.533 -> I2C device found at address 0x72  !
12:25:19.533 -> done
12:25:19.533 -> 
12:25:24.533 -> Scanning...
12:25:24.533 -> I2C device found at address 0x62  !
12:25:24.533 -> done
12:25:24.533 -> 
12:25:29.543 -> Scanning...
12:25:29.543 -> No I2C devices found
12:25:29.543 -> 
12:25:34.551 -> Scanning...
12:25:34.551 -> I2C device found at address 0x62  !
12:25:34.551 -> done
12:25:34.551 -> 
12:25:39.568 -> Scanning...
12:25:39.568 -> I2C device found at address 0x63  !
12:25:39.568 -> I2C device found at address 0x72  !
12:25:39.568 -> done
12:25:39.568 -> 
12:25:44.562 -> Scanning...
12:25:44.596 -> I2C device found at address 0x62  !
12:25:44.596 -> done
12:25:44.596 ->

Wenn ich statt Pins 20 und 21 die Pins SCL1 und SDA1 verwende, erkennt dieser das Device zuverlässig. Wenn ich allerdings gar nichts mit den Pins verbinde findet er trotzdem eine Menge Devices:

12:27:58.739 -> Scanning...
12:28:00.012 -> I2C device found at address 0x19  !
12:28:00.665 -> I2C device found at address 0x26  !
12:28:01.112 -> I2C device found at address 0x2F  !
12:28:01.560 -> I2C device found at address 0x38  !
12:28:02.003 -> I2C device found at address 0x41  !
12:28:02.281 -> I2C device found at address 0x47  !
12:28:02.555 -> I2C device found at address 0x4C  !
12:28:02.793 -> I2C device found at address 0x51  !
12:28:03.067 -> I2C device found at address 0x56  !
12:28:03.344 -> I2C device found at address 0x5B  !
12:28:03.583 -> I2C device found at address 0x60  !
12:28:03.856 -> I2C device found at address 0x66  !
12:28:04.129 -> I2C device found at address 0x6C  !
12:28:04.369 -> I2C device found at address 0x71  !
12:28:04.643 -> I2C device found at address 0x76  !
12:28:04.882 -> I2C device found at address 0x7B  !
12:28:05.054 -> done
12:28:05.054 -> 
12:28:10.069 -> Scanning...
12:28:11.297 -> I2C device found at address 0x19  !
12:28:11.947 -> I2C device found at address 0x26  !
12:28:12.391 -> I2C device found at address 0x2F  !
12:28:12.836 -> I2C device found at address 0x38  !
12:28:13.283 -> I2C device found at address 0x41  !
12:28:13.556 -> I2C device found at address 0x47  !
12:28:13.832 -> I2C device found at address 0x4D  !
12:28:14.073 -> I2C device found at address 0x52  !
12:28:14.348 -> I2C device found at address 0x58  !
12:28:14.618 -> I2C device found at address 0x5D  !
12:28:14.857 -> I2C device found at address 0x62  !
12:28:15.127 -> I2C device found at address 0x67  !
12:28:15.402 -> I2C device found at address 0x6D  !
12:28:15.643 -> I2C device found at address 0x72  !
12:28:15.916 -> I2C device found at address 0x77  !
12:28:16.156 -> I2C device found at address 0x7C  !
12:28:16.259 -> done
12:28:16.259 -> 
12:28:21.272 -> Scanning...
12:28:22.161 -> I2C device found at address 0x62  !
12:28:22.161 -> I2C device found at address 0x63  !
12:28:22.161 -> done
12:28:22.161 -> 
12:28:27.177 -> Scanning...
12:28:27.177 -> No I2C devices found
12:28:27.177 -> 
12:28:32.170 -> Scanning...
12:28:32.170 -> I2C device found at address 0x62  !
12:28:32.205 -> done
12:28:32.205 -> 
12:28:37.184 -> Scanning...
12:28:37.184 -> I2C device found at address 0x62  !
12:28:37.218 -> done
12:28:37.218 -> 
12:28:42.189 -> Scanning...
12:28:42.222 -> I2C device found at address 0x62  !
12:28:42.222 -> done
12:28:42.222 -> 
12:28:47.232 -> Scanning...
12:28:47.232 -> I2C device found at address 0x62  !
12:28:47.232 -> done
12:28:47.232 -> 
12:28:52.236 -> Scanning...
12:28:52.236 -> I2C device found at address 0x62  !
12:28:52.236 -> done
12:28:52.236 -> 
12:28:57.252 -> Scanning...
12:28:57.252 -> I2C device found at address 0x62  !
12:28:57.252 -> done
12:28:57.252 -> 
12:29:02.270 -> Scanning...
12:29:02.270 -> I2C device found at address 0x62  !
12:29:02.270 -> done

Unabhängig davon funktioniert das Beispielskript des Lidars noch immer nicht. Leider hilft auch der Anschluss an SCL1 und SDA1 nicht.

Ich weiß leider nicht mehr wo ich jetzt ansetzen soll... Hat jemand noch Ideen? An den Kabeln sollte es ja jetzt nicht mehr liegen oder?

Edit: Ich kann nachher mal den Vorschlag von oben ausprobieren und alles im Bezug auf GND und 5V messen, ich poste irgendwann im Nachmittagsverlauf die Ergebnisse

Wenn ich allerdings gar nichts mit den Pins verbinde findet er trotzdem eine Menge Devices:

Hier findest du eine menge Links zu gutem Lesestoff zu genau dem Problem.
[Bericht] I2C Pullup

Merksatz:
"Wissen" ist das einzige Mittel gegen "wirres stochern im Nebel"

ecxabyte:
Wenn ich allerdings gar nichts mit den Pins verbinde findet er trotzdem eine Menge Devices:

Das sind die elektromagnetischen Wellen, die so durch dem Raum sausen.

ecxabyte:
Wenn ich statt Pins 20 und 21 die Pins SCL1 und SDA1 verwende, erkennt dieser das Device zuverlässig.

Dann solltest Du damit weitermachen.

ecxabyte:
Unabhängig davon funktioniert das Beispielskript des Lidars noch immer nicht. Leider hilft auch der Anschluss an SCL1 und SDA1 nicht.

Hast Du denn auch Wire1 im Programm verwendet?

ecxabyte:
Edit: Ich kann nachher mal den Vorschlag von oben ausprobieren und alles im Bezug auf GND und 5V messen, ich poste irgendwann im Nachmittagsverlauf die Ergebnisse

Für mich ist das immer der erste Punkt bei der Fehlersuche, denn ohne richtige Spannungsversorgung funktioniert nur der Zufall :slight_smile:

agmue:
Hast Du denn auch Wire1 im Programm verwendet?

Habe ich gemacht, funktioniert leider nicht. Obwohl der Scanner das I2C Device auf 0x62 erkennt. Kann es trotzdem sein dass meine Pull-up Widerstände noch nicht richtig eingestellt sind?
Auf dem Levelshifter Board steht auf den Widerständen eine kleine 103 drauf, steht das für 103 Ohm? Und gibt es einen Richtwert für Pull-up Widerstände in einem solchen Fall? Ich habe schon im Internet nach Berechnungen des Widerstands gesucht aber bei den Formeln verstehe ich maximal die Hälfte...

Ich sehe gerade im Beispielskript der Library Des Lidars, dass I2C mit 400 kHz läuft, kann es sein, dass der Pegelwandler zu lahm dafür ist? Oder sollte ich lieber 100 kHz nehmen?

steht das für 103 Ohm?

Das steht für 10 * 10³ Ohm

Suche nach "SMD Resistor Code"

ecxabyte:
Habe ich gemacht,

Glaube ich nicht.
Alle Vorkommen von Wire müssen in der Library gegen Wire1 ausgetauscht werden.
Hast du das gemacht?

Ich habe schon im Internet nach Berechnungen des Widerstands gesucht aber bei den Formeln verstehe ich maximal die Hälfte...

Wer nicht rechnen kann, muss messen.

combie:
Alle Vorkommen von Wire müssen in der Library gegen Wire1 ausgetauscht werden.
Hast du das gemacht?
Wer nicht rechnen kann, muss messen.

Nee, ich dachte es reicht ins Skript oben #define Wire Wire1 zu ergänzen… Oh mann das hört sich schwierig an, ich werde mal alles in der Library durchgucken.

Im Anhang findet ihr den aktuellen Aufbau und die Messwerte gegenüber den Ground Pins.

Nee, ich dachte es reicht ins Skript oben #define Wire Wire1 zu ergänzen...

Dein Programm und die Library befinden sich in 2 unterschiedlichen Übersetzungseinheiten.
Die Library sieht also dein define gar nicht.

Merksatz:
Der Weg in die Hölle ist mit falschen Annahmen gepflastert!

Und, wie ich eben schon sagte:

Merksatz:
"Wissen" ist das einzige Mittel gegen "wirres stochern im Nebel"

Gute Nachrichten :slight_smile:

Ich habe in LIDARLite.cpp nun auch #define Wire Wire1 hinzugefügt und nun zeigt das Programm vereinzelt richtige Werte an:

14:16:35.065 -> 185
14:16:35.065 -> 0
14:16:35.065 -> 185
14:16:35.065 -> > nack
14:16:35.065 -> 185
14:16:35.065 -> > nack
14:16:35.065 -> 185
14:16:35.065 -> 182
14:16:35.065 -> > nack
14:16:35.065 -> 183
14:16:35.065 -> 185
14:16:35.099 -> 183
14:16:35.099 -> 185
14:16:35.099 -> 185
14:16:35.099 -> 186
14:16:35.099 -> 0
14:16:35.099 -> 184
14:16:35.099 -> > nack
14:16:35.099 -> 182
14:16:35.099 -> > nack
14:16:35.099 -> > nack
14:16:35.099 -> > nack
14:16:35.099 -> > nack
14:16:35.099 -> 182
14:16:35.099 -> > nack
14:16:35.099 -> > nack
14:16:35.099 -> 180
14:16:35.099 -> > nack
14:16:35.099 -> > nack
14:16:35.099 -> 174
14:16:35.099 -> > nack
14:16:35.133 -> > nack
14:16:35.133 -> 51
14:16:35.133 -> > nack
14:16:35.133 -> > nack
14:16:35.133 -> 28
14:16:35.133 -> 24
14:16:35.133 -> 22
14:16:35.133 -> > nack
14:16:35.133 -> 25
14:16:35.133 -> > nack
14:16:35.133 -> 18
14:16:35.133 -> > nack
14:16:35.133 -> 18
14:16:35.133 -> 23
14:16:35.133 -> 22
14:16:35.133 -> 24
14:16:35.133 -> 23
14:16:35.133 -> > nack
14:16:35.168 -> > nack
14:16:35.168 -> 3862
14:16:35.168 -> 24
14:16:35.168 -> 20
14:16:35.168 -> 22
14:16:35.168 -> 20
14:16:35.168 -> > nack
14:16:35.168 -> > nack
14:16:35.168 -> 22
14:16:35.168 -> > nack
14:16:35.168 -> 19
14:16:35.168 -> > nack
14:16:35.168 -> 3862
14:16:35.168 -> 19
14:16:35.168 -> > nack
14:16:35.168 -> > nack
14:16:35.168 -> > nack
14:16:35.168 -> 19
14:16:35.168 -> > nack
14:16:35.201 -> 22
14:16:35.201 -> > nack
14:16:35.201 -> > nack
14:16:35.201 -> > nack
14:16:35.201 -> 23
14:16:35.201 -> 19
14:16:35.201 -> 22
14:16:35.201 -> 19
14:16:35.201 -> 20
14:16:35.201 -> > nack
14:16:35.201 -> > nack
14:16:35.201 -> 20
14:16:35.201 -> 22
14:16:35.201 -> > nack
14:16:35.201 -> 27
14:16:35.201 -> 151
14:16:35.201 -> > nack
14:16:35.235 -> 182
14:16:35.235 -> 183
14:16:35.235 -> 182
14:16:35.235 -> 181
14:16:35.235 -> 181
14:16:35.235 -> > nack
14:16:35.235 -> 181
14:16:35.235 -> > nack
14:16:35.235 -> 181
14:16:35.235 -> > nack
14:16:35.235 -> 181
14:16:35.235 -> > nack
14:16:35.235 -> 181
14:16:35.235 -> > nack
14:16:35.235 -> 42148
14:16:35.235 -> > nack
14:16:35.235 -> 3862
14:16:35.235 -> > nack
14:16:35.235 -> 182
14:16:35.268 -> 182
14:16:35.268 -> > nack
14:16:35.268 -> 182
14:16:35.268 -> 182
14:16:35.268 -> > nack
14:16:35.268 -> 182
14:16:35.268 -> 183
14:16:35.268 -> 182
14:16:35.268 -> > nack
14:16:35.268 -> 183
14:16:35.268 -> 182
14:16:35.268 -> > nack
14:16:35.268 -> 182
14:16:35.268 -> 182

Die richtigen Werte (in cm) sind ca. 180 (Zimmerhöhe) und 10-30 (meine Hand). Zwischendurch gibt es jedoch immer wieder viel zu hohe Werte und "nack". Jemand eine Idee dazu?

Offensichtlich ist dein Bus weiterhin krank.

Alle Mittel und Wege wurden dir schon genannt. (glaube ich)
Setze sie ein!