5V und 3,3V Sensoren funktionieren über I2C nicht zusammen

Hallo,
ich wollte ein Arduino Projekt machen mit mehreren Sensoren, wo einige 5V und andere 3,3V brauchen.
Nun habe ich das Problem, dass die Sensoren mit verschiedenen Spannungen nicht zusammen über SDA und SCL zusammen funktionieren. Das heißt, dass alle 3,3V Sensoren zusammen funktionieren ohne Probleme und geben vernünftige Daten aus, aber nicht mit dem 5V Sensor zusammen. Ich kann den 5V Sensor in einem Sketch alleine zum laufen bringen, aber sobald ich zB den 5V Sensor und einen 3,3V Sensor in einem Sketch laufen lassen möchte, bekomme ich einfach gar keine Ausgabe.
Hier ist ein mit Fritzing erstelltes Bild der Platine:


Die meisten Bezeichnungen der Module sind dort zu sehen. Der Licht Sensor ist der "Ambient Light Sensor(0-200klx)" von DFRobot, das Sound Modul ist das "Gravity: Analog Sound Level Meter" ebenfalls von DFRobot und das Windmodul ist der "Wind Sensor Rev C".

Habt ihr eine Idee wo das Problem liegen könnte? Es wird kein großer Fehler sein, da alle Module funktionieren, jedoch nur nicht zusammen..

Vielen Dank!

Schalte zwischen dem 5V und dem 3,3V Teil des I2C-Busses einen I2C-Pegelwandler.

Gruß Tommy

Da ist ja ein Level-Converter schon zwischen.

Ohne Datenblat deines 3,3V/5V-Levelkonverters ist das schwierig zu sagen woran das liegt.

Eine andere Idee wäre einen I2C-Bus-multiplexer
TCA9548A Low-Voltage 8-Channel I2C Switch with Reset zu nehmen

vgs

Das links auf dem Steckbrett soll vermutlich deŕ Levelshifter sein.

Ich kann dem Aufbau nicht wirklich folgen, und ich weiss auch warum
Weil Du alles diagonal führst und es an vernünftigen Informationen zu den Anschlüssen fehlt.

Als erstes dreh das so, das das LevelShifter HIGHSide nicht nach oben sondern nach unten zeigt.
Passend dazu natürlich dann auch Versorgung und die Sensoren.

Dann besorge Dir vernünftige Darstellungen und versuch da nicht irgendwas reinzumogeln.
Erster Anlaufpunkt:

Alles zu den Anschlusskombinationen von Sparkfun:
https://learn.sparkfun.com/tutorials/bi-directional-logic-level-converter-hookup-guide

Also ein Foto von einem freihandgezeichneten klassischer Schaltplan würde auch eine Menge aussagen.

Danke für die Antworten, nur leider finde ich die verwendeten Module so nicht in Fritzing. Beispielsweite ist der CCS811 nicht der von Adafruit, sondern der hier: hier:https://www.amazon.de/CCS811-Luftqualitätssensor-Innenraummessungen-Arduino-Raspberry/dp/B08M615S73/ref=asc_df_B08M615S73/?tag=googshopde-21&linkCode=df0&hvadid=474032469293&hvpos=&hvnetw=g&hvrand=4271224110926682919&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9068244&hvtargid=pla-1037631316476&psc=1&th=1&psc=1

Und somit sind die Pins auch ganz anders, als dem bei Adafruit. Das ist nur ein Beispiel, leider finde ich meine Module alle nicht in der Datenbank und auch nicht im Internet. DFRobot habe ich z.B. gar nicht gefunden. Ich habe noch nie einen Schaltplan selbst gezeichnet, da ich sehr neu in diesem Bereich bin. Ich werde mich dann mal dransetzen und die verwendeten Module selbst erstellen in Fritzing.
Ich habe doch den richtigen sgp40 gefunden und in Fritzing eingefügt:

Die Kabel sind alle farblich codiert. Die roten Verbindungen ist die Stromversorgung, schwarz der Ground, blau die Serial clock, grün Serial data und weiß andere Datenverbindungen, also die, die vom Wind und Soundsensor direkt in den Arduino in A1-A3 gehen. Also so kann man das eigentlich auch sehr schnell erkennen, welcher Anschluss an den Modulen wo ist.
Sonst versuche ich mich wie gesagt mal daran die Module in Fritzing selbst zu erstellen.
Der Level-Converter ist der von SparkFun.

Mach von Deinem Aufbau ein Foto von oben.
Schreibe die Herkunft der Sensoren.
Kürze Deine Amazonlinks auf das wesentliche.
Aus Deinem obigen Trakinglink:

https://www.amazon.de/CCS811-Luftqualitätssensor-Innenraummessungen-Arduino-Raspberry/dp/B08M615S73

Ich habe doch noch zwei teile für Fritzing gefunden. Die anderen kann ich aber leider nicht finden.

Leider kann ich als neuer Benutzer nur zwei Links hochladen, deshalb hier nur der Link vom Wind-Sensor: Wind Sensor Rev. C | Modern Device und vom Licht-Sensor: Ambient Light Sensor(0-200klx) Arduino Wiki - DFRobot
Den Sound Sensor findet man sofort bei google mit "sound level meter dfrobot" und die anderen sind ja zu sehen.

Ich hoffe, so ist alles verständlich

Da ich nur ein Foto hochladen kann, hier nochmal ein Foto von meinem Aufbau.


Die Steckverbindungen von dem SGP40 und dem BME680 sind in Fritzing und auf den Fotos Spiegelverkehrt, da ich die Sensoren anders herum stecken musste, da sie sonst verdeckt werden und schlechter messen. Wenn ich das jedoch in Fritzing umdrehe, liegen die Module über die Kabel.

Habe auch mehrere Fotos, womit man das besser erkennen kann, aber ich glaube das ist nicht erlaubt 7 Beiträge hintereinander zu machen mit je einem Bild.

Ich habe es nicht mehr genau im Kopf. Um den Status zu erreichen mehrere Postings zu machen muss man ca 10 threads angeschaut und darauf geantwortet haben, man muss 30 Minuten lang threads angeschaut haben.

Also schaue dich einfach mal im Userforum um und poste so nette Kommentare wie "cooles Projekt" etc.

Es geht bei dieser Sperre darum bots auszuschalten. ein Bot will alle 0,1 Sekunden das nächste SPAM-Posting absetzen und nicht so und so lange in einem Thread verweilen usw.

Das entscheidende zum analysieren ist, dass man ohne Probleme erkennen kann das Kabel X ist mit IO-Pin Y verbunden. Dazu muss man Fotos machen bei denen die Kamera wirklich exakt senkrecht über dem Objekt steht.

Wo die Kabel am Arduino eingesteckt sind kann man erkennen
aber wo die Kabel an den Sensoren eingesteckt sind - keine Chance.

Wenn es über Fotos laufen soll dann muss man den kompletten Leitungsverlauf von Anfang bis Ende auf dem Foto und die IO-Pins mit Beschriftung erkennen können. Da muss man Aufwand treiben dafür.

Deswegen wäre ja ein von freier Hand gezeichneter Schaltplan ganz gut geeignet.

Du hast die Wahl:
entweder du probierst alleine rum und investierst Zeit in das rumprobieren
oder du investierst Zeit in gute Fotos
oder du investierst Zeit in einen gezeichneten Schaltplan.

vgs

Was ich bei dem Fritzing Bild nicht verstehe ist die Beschaltung
Die grüne Leitung geht von HV-TX0 auf LV TX1

Und die Blaue Leitung geht von HV-TX0 auf LV-TX1.
Könnte es sein, dass es
Die grüne Leitung geht von HV-TX0 auf LV RX0 gehen muss?

Kannste mal einen Link zum Datenblatt von diesem Level-Converter posten?
vgs

Das Foto passt nicht zum Fritzing

Auch wenn es nur eine Kleinigkeit sein sollte, habe ich damit ein Problem.

Mach ein Foto senkrecht von oben.
Ich denke alles andere wird nicht den Aufbau sichtbar machen. Rauskopieren und vergrößern geht dann schon.

Hallo,
das macht doch mit der Gesamtschaltung so keinen Sinn.
Es muss sichergestellt sein das die Adressen nicht mehrfach vorkommen. Alle Versuche meinetwegen mit dem I2C scanner machen.
Dann würde ich systematisch vorgehen
1.ein 3,3 V Typ mit Levelshifter geht das
2. einen 5V Typ dazu nehmen
schrittweise so weiter machen.
also wenn Du bei 2. angekommen bist und das läuft nicht noch mal melden
Heinz

Habe nun einen Schaltplan mit der Hand gezeichnet.
Ich habe sowas noch nie gemacht, ich hoffe aber, dass das so ok ist.


In dem Foto vom Aufbau habe ich noch die beiden Ground "Leitungen" miteinander verbunden. Jedoch macht es keinen Unterschied, ob diese verbunden sind oder nicht.

@my_xy_projekt
Ich habe oben ja geschrieben, dass die Steckverbindungen beim Sg40 und BME680 spiegelverkehrt sind. Wenn ich die anders herum stecke, messen die schlechter, da die Sensoren direkt an den Kabeln liegen. Wenn ich das jedoch in Fritzing umdrehe, liegen die Module über die Kabel.

@Rentner
Am Anfang habe ich das einzeln gemacht, jedoch hat das nicht funktioniert, weshalb ich schonmal alle 3,3V-Sensoren eingesteckt habe. Diese funktionieren ja auch alle parallel, jedoch eben nicht mit dem einen 5V-Sensor zusammen. Und Der 5V Licht-Sensor funktioniert aber alleine.
Der Windsensor, der nicht über SCL/SDA läuft, funktioniert auch mit den 3,3V-Sensoren zusammen.

Wenn es so schon nicht funktioniert, machst du einen Fehler, den wir hier nicht sehen können.
Das Schaltbild ist ok, leider kann man kaum etwas erkennen.
Das solltest du von oben fotografieren.

Habe mir des Bild grad am PC angeschaut, das ist ok. Man kann alles erkennen.

mal ALLES abschließen.
Nur das 5V I2C modul anschließen: -> Check
Nur das 5V I2C Modul und den PegelWandle anschließen -> Check
Nur ein 3.3V I2C Modul dazu schließen -> Check

Mach ein hochauflösendes Bild von jedem Schritt.
Gib bescheid wie weit die Checks erfolgreich waren.
Stell das erste fehlerhafte Bild wieder ein.

Was mir fehlt sind die Pullup Widerstände für I2C.
Miss mall ALLE Module durch ob welche verbaut sind (Miss den Widerstand zwischen VDD und SDA bzw SCL).

Vielleicht gibt es zuviel pull-up-widerstand.
Sehe meine Wiki auf Github, oder die Wiki via Google Translate.

Ich habe nun alles abgesteckt und nacheinander angeschlossen.
Erstmal habe ich nur den Lichtsensor über den Level-Converter angeschlossen.




Der Sensor hat so auch gut funkioniert.

Dann habe ich dem BME680 angeschlossen und versucht beide Sensoren zusammen zum laufen zu bringen.



An den Kabeln vom Lichtsensor habe ich nichts verändert, deshalb habe ich diese nicht nochmal gesondert abfotografiert.
Der BME680 alleine hat funktioniert, genau so wie der Lichtsensor alleine. Zusammen habe ich jedoch wieder einen Output bekommen.
Was mir auch aufgefallen ist, ist dass ich vom Lichtsensor, als ich nur diesen eingesteckt habe, also die erste Variante, relativ kontinuierliche Werte bekommen habe. Sie waren zwischen 145 und 165 lux.
Bei Variante zwei, haben die Werte sehr stark geschwankt. sie lagen binnen kurzer Zeit (~10 Sekunden) zwischen 145 und über 500 lux. Der Lichteinfall hat sich aber nicht gravierend geändert, nur so minimal wie bei der ersten Variante.
Ich habe aber keine Ahnung woran diese Schwankungen genau liegen sollen.
Die Pullup-Wiederstände habe ich nicht gemessen, weil ich leider nicht genau wusste wie das funktioniert. Anleitungen im Internet bezogen sich immer auf zwei Widerstände (z. B. Arduino Widerstand messen – ein Arduino Ohmmeter - Hikro Technikblog) und ich habe kein Multimeter.
Aber anhand dieses kleinen Versuchs von oben sieht man ja, dass das eigentlich daran liegen müsste. Bei zwei Modulen wird der Widerstand noch nicht zu hoch sein.. Leider finde ich im Internet auch keine Daten dazu welche Widerstände die Module verbaut haben.
Der Level Converter ist der von Sparkfun. Auf der Seite https://www.sparkfun.com/products/12009 kann man die Dokumente dazu downloaden. (Weil @StefanL38 oben gefragt hat, das Datenblatt zu posten.)

Also für das weitere basteln mit Mikrocontrollern ist ein Digitalmultimeter geradezu ein muss.
Die fangen bei 10 Euro an

Ich würde das hier empfehlen weil es automatische Bereichsumschaltung hat, auch noch Frequenz und Dutycycle, und Kapazitäten messen kann,
und weil es per Bluetooth und Handy-App als Messwertaufnehmer
für sich langsam ändernde Messwerte dienen kann.
30 Euro für diesen Funktionsumfang ist echt einmalig günstig.

Wenn 10 bis 30 Euro kein finanzielles Problem sind dann bestelle ein Digitalmultimeter. Wie viele Tage willste noch im Elektro-Nebel stochern?

Pullup-Widerstand heißt zwischen der Datenleitung und dem Pluspol ist ein Widerstand.
image

Zum Messen des Pullup-Widerstands den Sensor komplett abklemmen und dann den Widerstand zwischen SCL
und Vcc messen

Dann den Widerstand zwischen SDA und Vcc messen.

vgs

1 Like