wie ich was messen kann um herauszufinden wo das Problem ist?
Du kennst doch die Adressen der Bausteine. Sprich sie einfach mal ganz direkt mit dieser Aderesse an und eben nicht nur über einen generischen Scanner, der tumb eine Adresse nach der anderen abscannt.
Ein Tipp: teile und herrsche.
Mach erst mal 1 Gerät an den Bus und schau ob du das ansteuern kannst.
Dann mach das 1. Gerät wieder weg und mach das 2. dran und steuere es an.
Dann mach beide dran und steuere sie an.
Und dann mach beide wieder weg und nimm das dritte Gerät in Betrieb.
Dann mach alle 3 dran...
Usw. usf. du erkennst das Muster?
Es funktioniert normalerweise nicht, etwas "fertig" zu entwicklen, das dann komplett aufzubauen und dann "alles auf einmal" in Betrieb zu nehmen.
Leider lässt du uns im Dunkeln bzgl. des Layouts/Verkabelung und der I2C Geräte, sowie den verwendeten I2C Parametern und des Programmcodes.
2K ist ein ungewöhnlicher Widerstandswert. Es gibt 2k Wiederstände, aber er ist nicht Teil der gebräuchlichen E12 und E24 Reihe (nur von E96 und E192). Ist der Wert korrekt? Der Pullup könnte für deine Anwendung den falschen Wert haben (abhängig von der kapazitiven Buslast und der Geschwindigkeit).
Alle deine I2C Geräte sind 3,3V fähig und werden auch mit 3,3V versorgt (nicht mit 5V)?
Die I2C Bus-Leitungen sind als Bus ausgeführt und nicht als Stern (keine Stichleitung vom Bus zu den einzelnen Geräten)?
Versuch es mal mit einer geringeren Geschwindigkeit und einzelnen Geräten am Bus.
Wenn Du ein Oszi hast, einen Mitschnitt hier einstellen
Wenn Du die Clockrate reduzieren kannst, ausprobieren.
Wenn Du einen Typ der Chips hast, hier DB verlinken
Habe einmal einen INA219 drauf und zwei TCA9548 (Diese haben unterschiedliche I2C Adressen, bzw sollten Sie haben :) )
habe erst mal alles durchgepresst, dass passt. Sowohl 3.3V als auch GND und SDA und SCL. Habe auch keine Brücken drinnen.
Habe die PullUps mal gegen 1K ausgetauscht, leider wir Dimmer noch nur der MPU6050 gefunden (bzw nur den kann ich ansprechen)
Habe die PullUps mal gegen 1K ausgetauscht, leider wir Dimmer noch nur
der MPU6050 gefunden (bzw nur den kann ich ansprechen)
4k? (3k3 oder 4k7)
Baudrate auf 100kBaud begrenzt im Scanner?
Anschluss geprüft? (Also Vcc/Gnd an den Pins ICs, pullup an SCL und SDA kommt an und geht auch auf z.B. 1.6V wenn Du einen gleich großen Widerstand gegen GND dranhälst?) Dazu reicht ein DMM.
Dann erzähl halt mal welche Adressen du an jedem IC eingestellt hast.
Es kann doch nicht so schwer sein wichtige Infos schon in der Eröffnungspost darzulegen.
Wie bastelt man dann an Elektronik, wenn man nicht sehen kann was passiert?
Messgeräte sind die Augen und Ohren des Elektronikers und das Oszi ist eines der grundlegensten und wichtigsten Werkzeuge.
Eher verzichte ich auf ein Multimeter.
Habe (...) zwei TCA9548 (Diese haben
unterschiedliche I2C Adressen, bzw sollten Sie haben :)
Tja, so einen Chip wie diesen wird ein 08/15-Scanner kaum korrekt ansprechen können. Wie, bitteschön, legt er denn die Signale A0, A1 und A2 an den Chip? Die kennt er doch gar nicht. Hast du die etwa fest verdrahtet?
Tja, so einen Chip wie diesen wird ein 08/15-Scanner kaum korrekt
ansprechen können. Wie, bitteschön, legt er denn die Signale A0, A1 und
A2 an den Chip? Die kennt er doch gar nicht. Hast du die etwa fest
verdrahtet?
Ups, sehe ja jetzt erst, was der Chip macht.
Ich hoffe ja mal, dass er die 3 Adressbits fest auf Masse/VCC gelegt hat, mit mindestens einer unterschiedlich.
@TO: Wofür brauchst Du 2 von diesen Chips? Bzw. was ist dahinter angeschlossen?
Sollte er eigentlich, macht ja keinen Sinn, die Adresse dynamisch zu ändern..
Adressen ergeben sich dann laut Tabelle aus dem Datenblatt.
Einen Hinweis, ob sich zur Laufzeit, also ohne PowerCycle/Reset, geänderte Addresspins direkt auswirken, gibt das Datenblatt nicht. Würde ich also statisch lassen.
Devices hinter dem TCA wird der Scanner nicht finden, zumindest nicht ohne diese vorher passend zu konfigurieren. Aber die TCA9548 selber sollten schon ein ACK senden, also vom Scanner erkannt werden können.
ein 08/15-Scanner kann die Slaves hinter dem Chip tatsächlich nicht
einzeln ansprechen. Er weiß ja nichts von dem Multiplexen
Was stellst Du Dir denn unter dem I2C Scanner vor?
Das wird nur ein SW Dreizeiler sein, der eine von Null ansteigende Adresse auf den Bus gibt und jedes Gerät das innerhalb von Zeitspanne X ein ACK sendet in die Liste der vorhandenen Geräte aufnimmt.
Hinter dem Multiplexer sind weitere INA219.
Ich möchte nicht von diesen INA219 die Adressen finden sondern vom Multiplexer selbst. Das ich die dahinter mit dem Scanner nicht finde ist mir klar.
Aber an jedem Ausgang vom Miultiplexer sind nochmal eigene 4k7 Pull-ups.
Es hängen alle I2C Devices am gleichen GND und am gleichen VCC (3.3V)
Die Adressen sollen wie folgt sein.
Multiplexer einmal 70 und einmal 71
MPU6050 die 68 und der eine einzelnen INA219, der nicht hinter den Multiplexern hängt, soll die 40 haben.
Was komisch ist, dass der MPU6050 bei mir die 69 hat obwohl der AD0 PIN auf GND liegt. Laut Datenblatt soll aber bei low an AD0 die 68 sein. Ist aber bei mir die 69. und der MPU funktioniert auch komplett.
Als Scanner nutzt ich den ganz normalen simplen der in einer Schleife von 1-127 hochzählt. Hier findet er nur die 69
Ich werde nachher mal Bilder von allem einstellen.
Bin gerade unterwegs.
Wie bastelt man dann an Elektronik, wenn man nicht sehen kann was passiert?
Denn so ein IC antwortet nur dann, wenn es das an seinen Pins das sieht, was in seinem Datenblatt spezifiziert ist. Dabei sind Spannungspegel, Flankensteilheiten und der zeitliche Ablauf wichtig. Eine Inbetriebnahme (samt Fehlersuche) eines seriellen Busses ohne Oszilloskop ist wie "Autofahren nach Gehör": man sieht immer erst hinterher, wenn es wieder nicht geklappt hat.
Bruno V. schrieb im Beitrag #7657845:
Michael schrieb im Beitrag #7657734:
Vielleicht zeigt der Scanner das erste Gerät an, das er anzusprechen
versucht. Er weiß ja nichts über die Reihenfolge am Bus.
Ein I2C Scan zeigt an von welcher Adr eine Antwort kommt.
Die Reihenfolge der Geräte ist dabei vollkommen Wurst.
Wolltest du mich jetzt bestätigen oder mir widersprechen?
Ein Scanner durchläuft den ganzen Adressraum und versucht bei jeder Adresse, dahinter ein Gerät zu sehen. Sinnvollerweise benutzt er aber keinen Zufallsgenerator für die Reihenfolge – also ist ein bestimmtes Gerät immer das erste angesprochene. Und es ist vielleicht das einzige erkannte, falls am Ende von oder nach dessen Erkennung etwas nicht klappt.
Was komisch ist, dass der MPU6050 bei mir die 69 hat obwohl der AD0 PIN
auf GND liegt. Laut Datenblatt soll aber bei low an AD0 die 68 sein. Ist
aber bei mir die 69.
Dass es zwei unterschiedliche Schreibweisen für I2C-Adressen (nackte 7-Bit-Adresse oder mitsamt R/W-Bit als LSB) gibt, ist Dir bewusst?
Bei der letztgenannten gibt es halt zwei Adressen, eine zum Lesen und eine zum Schreiben.
Dass es zwei unterschiedliche Schreibweisen für I2C-Adressen (nackte
7-Bit-Adresse oder mitsamt R/W-Bit als LSB) gibt, ist Dir bewusst?
Bei der letztgenannten gibt es halt zwei Adressen, eine zum Lesen und
eine zum Schreiben.
und je nach Library muß beim scannen eben +1 durchgezählt werden <127 oder +2 <256 durchgezählt werden, im letzteren Fall muß sich um R/W also bit0 high oder low gekümmert werden.
Dann gibt es noch die Adresserweiterung oberhalb 0x70 und ack/nack
also ein bissle mehr Arbeit für die Softwareerstellung tut not.
Das heißt wenn es im Datenblatt 0x68 sein muss ich in meinem INO Coder die 0x69 als Adresse angeben? Mit der 0x69 kann ich zumindest den MPU6050 auslesen. Mit der 68 nicht.
Das heißt wenn es im Datenblatt 0x68 sein muss ich in meinem INO Coder
die 0x69 als Adresse angeben? Mit der 0x69 kann ich zumindest den
MPU6050 auslesen. Mit der 68 nicht.
Nun Das ist doch offensichtlich oder? wenn das Ding auf 69 antwortet hast du eine kalte Lötstelle an A0. -> A0 hängt in der Luft....
Wo eine kalte Lötstelle ist sind sicher auch noch mehr...
C26 ist für Gleichspannung hochohmig -> dein INA219 hat keine Stromversorgung.
Der CLKIN Anschluss vom MPU6050 gehört an GND (nicht an einen Kondensator), steht so im Datenblatt "Optional external reference clock input. Connect to GND if unused"
Die TCA9548 bekommen keinen Reset und setzen deswegen niemals ihre Register zurück und lesen auch nicht ihre Adresse ein.
Es fehlt der Kondensator nach GND oder wie in der Appnote der Anschluss an die MCU (empfehlenswert zum Auflösen von Konfliktsituationen am Bus)
Was macht da den Reset zum zurücksetzen der Statemachine?
Laut Datenblatt der "Power-on reset":
Zitat:
8.5.6 Power-On Reset
When power (from 0 V) is applied to VCC, an internal power-on reset holds the TCA9548A in a reset condition
until VCC has reached VPOR. At that point, the reset condition is released and the TCA9548A registers and I2C
state machine initialize to their default states. After that, VCC must be lowered to below VPOR and then back up to
the operating voltage for a power-reset cycle.
So habe ich es auch verstanden gehabt, dass der manuelle redet über den Master optional ist. Aber es kann natürlich sein, dass ich da einen Fehler habe.
Aber beim INA219 müsste dann ja auch was falsch sein…
Du kennst doch die Adressen der Bausteine. Sprich sie einfach mal ganz
direkt mit dieser Aderesse an und eben nicht nur über einen generischen
Scanner,
Genau das tut ein Scanner gewöhnlich. Er versucht den Baustein auf seiner Adresse anzusprechen und wertet das Acknowledge aus.
Dass der Scanner das nacheinander für alle möglichen Adressen versucht, geht den Baustein überhaupt nichts an.
Wenn man die
10.1 Power-On Reset Requirements
einhält, sonst triggert der u.U. nicht.
Ok, wie müsste ich hier was verbinden, dann kann ich das ggf. Mal mittels Litzen testen.
Wobei mich das wundert, denn die fertigen INA219 Devboards sind auch so aufgebaut und ich verbinde die Devboards ganz normal mit dem ESP und nutze hier nicht den Reset Pinout und das funktioniert ja auch.
https://wolles-elektronikkiste.de/ina219
Dass muss mir jemand erklären, welches Bauteil muss ich hier bei C26
nutzen?
Wenn Du nicht erkennst das ein Kondensator eine DC Unterbrechung darstellt, ist jede weitere Hilfe vergebens.
Dann müssen wir mit dem kleinen 1x1 der Elektronik anfangen und erstmal die Grundlagen vermitteln und darauf hat hier wohl einer Bock.
Wobei mich das wundert, denn die fertigen INA219 Devboards sind auch so
aufgebaut
Nein, sh. Anhang, Breakout-Board von Adafruit.
Kannst auf deiner Platine leicht fixen, Lötzinn-Klecks über C26 platzieren.
Der INA hat dann keinen Abblock-Kondensator mehr, und läuft evtl. instabil/ungenau.
Aber hat zumindest eine Chance, zu funktionieren.
Wobei mich das wundert, denn die fertigen INA219 Devboards sind auch so
aufgebaut
Nein, sh. Anhang, Breakout-Board von Adafruit.
Kannst auf deiner Platine leicht fixen, Lötzinn-Klecks über C26
platzieren.
Der INA hat dann keinen Abblock-Kondensator mehr, und läuft evtl.
instabil/ungenau.
Aber hat zumindest eine Chance, zu funktionieren.
Habe den C26 aufgelötet und einen Punkt drüber gemacht - das funktioniert nun schon mal! Vielen Dank dafür.
Dass es zwei unterschiedliche Schreibweisen für I2C-Adressen (nackte
7-Bit-Adresse oder mitsamt R/W-Bit als LSB) gibt, ist Dir bewusst?
Bei der letztgenannten gibt es halt zwei Adressen, eine zum Lesen und
eine zum Schreiben.
Nun wirf doch keine Nebelkerzen, sondern lies erstmal das Datenblatt vom MPU6050.
Im Datenblatt ist explizit die 7-Bit Adresse angegeben ("The slave address of the MPU-60X0 is b110100X which is 7 bits long."), wobei X das LSB darstellt und durch den Pegel am Pin AD0 festgelegt wird.
Wenn dahinter nach Datenblattangabe noch das RW-Bit folgt, sind das ganz klar I2C-Adressen nach I2C-Spezifikation und dort gibt es keine separaten Adressen für Lesen und Schreiben.
ok, ich habe den MPU6050 einmal ausgetauscht. Nun habe ich auch die 68 als Adresse. Habe dann gleichmal einen TCA9548 ausgetauscht, aber den erkenne ich noch immer nicht :(
Mein INA219 und auch der MPU6050 funktionieren nun wie sie sollen. Danke allen dafür!
Mein Problem besteht "nur" noch am TCA9548. Dieser will einfach nicht erkannt werden und bei dem Reset Pin ist bei mir eigentlich alles wie auch bei den Breakout Boards von Adafruit. Und diese werden auch einfach an einen ESP32 angeschlossen ohne Verbindung des Reset Pins...
Wegen einer schlechten Lötstelle muss man nicht den Chip tauschen. Was war das Problem mit dem alten?
Hast du wenigstens vorher am AD0 nachgemessen oder einfach profilaktisch blind getauscht?
Wenn das Teil nicht funktioniert, wird der PwrOn Reset vielleicht nicht ausgeführt. Dann einfach den Reset mal kurz auf GND legen.
Wie sieht denn die Stromversorgung aus? (Anstiegs/Abfallzeiten)
Ich habe es 100 mal gemessen
statt 100 mal messen hätte einmal nachlöten vermutlich gereicht.
Ich habe es 100 mal gemessen und der Kontakt war immer da.
Wo hast du gemessen und wie groß hast du den Pull-up dabei gewählt?
Beim Messen an der kritischen Stelle besteht immer die Gefahr, dass die fehlende Verbindung durch das Aufsetzen der Messspitze hergestellt wird, sei es durch Überbrücken oder durch mechanische Verformung.
Ja, das kann gut sein. Jetzt funktioniert es, dass ist für mich als Hobby Mensch das wichtigste!
Aber mit dem TCA9548 komme ich nicht weiter... Hat hier jemand noch eine Idee wie ich etwas verkabeln könnte um zu probieren ob es geht.
Tue Dir selbst einen Gefallen und investiere 10€ in einen Logic Analyzer. Du wirst dich nach 3h fragen, wie Du vorher ohne leben konntest. Kenne einige dieser Fälle aus missionarischer Tätigkeit.
aber hier ist doch ein Schaltplan, oder was meint Ihr?
Naja, sowas Ähnliches. Aber eines wird klar: dieser Schaltplan passt von der Struktur genau zur Vorgehensweise bei der Inbetriebnahme.
In einem gut lesbaren Schaltplan sind keine ICs mit Gehäusen und durchlaufendem Pinout eingezeichnet, sondern funktionale Symbole mit Eingangssignalen links und Ausgangssignalen rechts sowie Versorgung oben und unten. Oder wenigstens so, dass zusammengehörige Signale gruppiert sind. Erst im Layout ist die Geometrie und die Pinreihenfolge wichtig.
Sieh dir einfach mal an, wie das Symbol der Bausteine im jeweiligen Datenblatt aussieht.
Zudem wird in einem leserlichen Schaltplan das Potential von oben nach unten negativer. Bei einem Pullup ist plus also oben.
Und wie gesagt: bringe in die Inbetriebnahme mehr Struktur als in den Schaltplan. Wie es geht, habe ich ganz weit oben schon erwähnt.
Der Punkt 0 der Inbetriebnahme lautet: "stelle sicher, dass Versorgungsspannung/en korrekt und störungsfrei ist/sind und deine Signale physikalisch den erforderlichen Signalen im Datenblatt entsprechen." Zur Physik eines Signals gehören Spannungspegel, Flankenverlauf und das Timing. Um das messen zu können, brauchst du ein Oszlloskop.
Ändere das. Anders wirst du ganz offenbar nicht zum Ziel kommen. Kauf dir das kleinste Picoscope und du hast den Protokollanalyzer für I2C schon mit dabei.
Tue Dir selbst einen Gefallen und investiere 10€ in einen Logic Analyzer.
Das ist leider nur die zweite Hälfte der Wahrheit. Denn der zeigt nur das Timing an, nicht die tatsächlichen Spannungspegel und nicht die Flankensteilheit und -stetigkeit.
BTW: mich würde für ein neuentwickeltes Produkt das angekündigte EOL des MPU 6050 nachdenklich stimmen: