habe hier aktuell eine Tastatur (Folie) die über I2C abgefragt werden soll.
Der Bus läuft auf 3.3V und aktuell mit 100kHz. Sobald die Folie über ein 8cm Flachbandkabel angeschlossen wird, fängt der Bus an mit spinnen.
Habe mal den I2C Teil vom Schaltplan rauskopiert, den ich bekommen habe.
An SDA uns SCL hängt dann direkt das IC. Parallel am Bus hängt dann jeweils ein 5pF Kondensator gegen Masse. Weiterhin hängt noch ein 33 Ohm Widerstand parallel an SCL und SDA, der dann auf die ESD Schutzdiode geht.
Ist das in dem Fall nicht die falsche Beschaltung über den I2C Bus?
Für was ist da parallel jeweils ein 5pF Kondensator? Der addiert sich ja noch zusätzlich zu der Leitungskapazität vom Flachbandkabel, der ESD Schutzdiode und dem TCA IC.
Sollte die ESD Schutzdiode nicht direkt am Bus hängen anstatt über einen 33 Ohm Widerstand?
Kenne das normal so, dass der 33Ohm Widerstand in Reihe hängt bei SDA und SCL, also zwischen Flachband und TCA IC und nicht parallel über eine Schutzdiode nach Masse oder?
Wer Mikrokontroller-Schaltungen ohne Abblock-Kondensatoren aufbaut,
nachmacht oder verfälscht, insbesondere bei existierenden
Schaltungen die Abblock-Kondensatoren weglässt oder falsch
verschaltet oder selbst solche Schaltungen entwirft, in Verkehr
bringt und/oder aufbaut ohne Abblock-Kondensatoren nach Hersteller-
Empfehlungen zu verwenden, wird mit Zugangs-Ausschluss vom
Mikrokontroller-Forum nicht unter zwei Jahren bestraft.
Wie gesagt das ich ja nur ein Ausschnitt von dem Plan. Am IC ist schon ein 100nF Kondensator dran.
Das hat denke ich aber mit der eigentlichen Frage nichts zu tun.
8 cm, oder hast du ne Null vergessen? :-)
Ich habe schon I2C über 2 m CAT5 Kabel geschickt und das funktionierte stabil. War aber nur ein Teilnehmer. Bei 3,3V kannst du sogar auf 1,5K runtergehen. Da fließt laut Herrn Ohm weniger Strom. Wie ist das Flachbandkabel belegt? Um Übersprechen zu verhindern, würde ich Masse zwischen die Datenleitungen legen. Aber bei 8 cm sollte das eigentlich egal sein.
Ja es sind ca. 8cm. An die Schaltung der Folie komme ich nicht dran, da alles vergossen ist. SCL und SDA liegen direkt nebeneinander auf dem Flachband.
Erzähle mal was zum Aufbau, oder mache Fotos.
Irgendwas, was Störungen in nächster Nachbarschaft raushaut? Ein FU, ein Schaltnetzteil, oder was in der Preislage? Ich hab mal auf 1 Meter Länge das Versorgungskabel einer 100W Power-LED neben einem Datenkabel für einen DS18B20 durch ein gemeinsames Rohr (Stehlampe geführt). Wenn ich die LED per PWM dimmte, strich der Sensor die Segel. Die Störungen waren so derb, das der Sensor verreckte.
Also irgendwas, was du uns verschweigst? ;-)
Der Bus läuft auf 3.3V und aktuell mit 100kHz. Sobald die Folie über ein
8cm Flachbandkabel angeschlossen wird, fängt der Bus an mit spinnen.
Was heißt das GENAU?
Habe mal den I2C Teil vom Schaltplan rauskopiert, den ich bekommen habe.
An SDA uns SCL hängt dann direkt das IC. Parallel am Bus hängt dann
jeweils ein 5pF Kondensator gegen Masse. Weiterhin hängt noch ein 33 Ohm
Widerstand parallel an SCL und SDA, der dann auf die ESD Schutzdiode
geht.
Komische Schaltung.
Ist das in dem Fall nicht die falsche Beschaltung über den I2C Bus?
Für was ist da parallel jeweils ein 5pF Kondensator? Der addiert sich ja
noch zusätzlich zu der Leitungskapazität vom Flachbandkabel, der ESD
Schutzdiode und dem TCA IC.
Sollte die ESD Schutzdiode nicht direkt am Bus hängen anstatt über einen
33 Ohm Widerstand?
Eben.
Kenne das normal so, dass der 33Ohm Widerstand in Reihe hängt bei SDA
und SCL,
Den braucht im meisten eigentlich nicht.
also zwischen Flachband und TCA IC und nicht parallel über eine
Schutzdiode nach Masse oder?
Nach Masse sowieso nicht.
Dein Problem könnte ein Masseproblem sein. Ist die angeschlossen?
Ja es sind ca. 8cm. An die Schaltung der Folie komme ich nicht dran, da
alles vergossen ist. SCL und SDA liegen direkt nebeneinander auf dem
Flachband.
Es gibt eine Controllerplatine mit einem ESP32. Auf der Platine ist noch ein ADC und ein IO Expander der auch am gleichen Bus hängt. Auf der Platine ist dann ein FPC Connector, an dem das Flachband eingesteckt ist. Pullup Widerstände sind hier jeweils zwei 4k7 auf der Platine. In der Folie sind dann auch nochmal 4k7 verbaut. Also bei gesteckter Folie sind es dann ca. 1k5. Die Widerstände sind am jeweiligen IC, also am ADC, IO Expander und am IC der Folie.
Belegung vom Flachband 1mm Pitch ist: 3V3|SCL|SDA|GND|INT(TCA8418)|RES(TCA8418)|GND|
Versorgt wird das Ganze über USB. Geräte, die stören könnten habe hier auch nichts in der Nähe auf meinem Schreibtisch
Wenn ich auf dem ESP einen I2C Scanner laufen lasse, werden die Teilnehmer auf der Platine einwandfrei erkannt. Sobald ich die Folie einstecke, wird der ADC und der IO Expander nur noch sporadisch erkannt und ich bekomme Adressen, die gar nicht existieren.
Habe jetzt mal noch zum Testen so ein Teil provisorisch direkt nach dem Stecker eingebaut.
https://botland.de/ausgangsexpander/20178-hot-swap-i2c-puffer-modul-mit-i2c-buspuffer-tca4307-adafruit-5159-5903351247344.html
Dann funktioniert alles und alle drei Teilnehmer, also Folie, ADC und Expander werden erkannt und funktionieren auch stabil.
bei gesteckter Folie
sind es dann ca. 1k5. Die Widerstände sind am jeweiligen IC, also am
ADC, IO Expander und am IC der Folie.
Eventuell zuviel des Guten, so das der Bus zu sehr runtergezogen wird. Der IO-Expander kann vielleicht mehr Leistung treiben und richtet es dann wieder. Löte mal eines der Paare runter.
Ich würde da jetzt einfach mal den Tastkopf eines Oszis dranhalten. Dann hat die Raterei blitzschnell ein Ende. Es ist mir unerklärlich, wie man einen seriellen Bus ohne Oszi in Betrieb nehmen kann.
Als I2C erfunden wurde hiess es noch IIC fuer InterIC-Bus. Es ist also nicht fuer solche Anwendungen mit langen Kabeln irgendwo in der Gegend rum gedacht.
Die 5pF sollen vermutlich den naechsten Mittelwellensender oder andere Stoerungen kurzschliessen weil jemand bereits gemerkt hat das es eine schlechte Idee ist diesen Bus fuer diese Anwendung zu verwenden.
Abhilfe koennte in der Tat die Verkleinerung der Pullups auf die kleinsten Werte bringen welche das Datenblatt der ICs erlaubt. Es gibt aber mittlerweile wohl auch extra Treiber fuer I2C auf laengeren Leitungen.
Das ESD Diodenarray laesst vermuten das man kommerziellen Einsatz plant, also ist weiterer Aerger zu erwarten wenn sich der Bus mal weghaengt, was er tun wird wenn da mal ein extra Clock einstreut. .-)
Scope an SCL und SDA dranhalten und signal integrity bewerten.
Beachten, das der Chip nur 100kHz I2C kann (manche stellen da gern 400kHz beim Master ein).
PullUp 10K scheint mir auch etwas hoch, könnte aber bei 100 kHz auch passen,
hoffentlich ist der µC (I2C-master) zu den 3V3 kompatible.
Wir haben i2C als erstaunlich robust erlebt, wenn auch nicht problemlos. Bei Störungen hatten wir mit verschiedenen Pull-Up Werten und kapazitiver Belastung experimentiert. Beides kann in weiten Grenzen variiert werden, ohne das die Kommunikation versagt. Selbst 10nF oder mehr haben den 100kHz-Bus nicht abgewürgt (Master war ein IMX.6 SBC).
Wenn 8cm Leitung ein Problem darstellen, dann ist irgend etwas grob im Argen! Datenblätter genau studieren und Oszi benutzen!
Als I2C erfunden wurde hiess es noch IIC fuer InterIC-Bus. Es ist also
nicht fuer solche Anwendungen mit langen Kabeln irgendwo in der Gegend
rum gedacht.
Es ist zwar ausdrücklich nicht empfohlen, I2C über längere Strippen zu führen, aber insbesondere wurde I2C auch in seiner frühen Zeit genau so verwendet, z.B. auf der Verbindungsleitung zwischen Grundig Fernsehgerät und Video-2000-Rekordern mit einer Länge von ca. 1,5 m bis 2 m.
Als I2C erfunden wurde hiess es noch IIC fuer InterIC-Bus.
Du reimst dir irgendetwas zusammen. Wo dichtest du dir z.B. das "Bus" her.
I2C ist einzig ein Zugeständnis an die Schreibfaulheit mancher Zeitgenossen.
Der Bus hieß schon immer, d.h. seit 1982, I²C-bus und das ist eine Handelsmarke von NXP B.V. (damals noch Philips Semiconductors). Das I²C steht für Inter-Integrated Circuit.
https://www.nxp.com/docs/en/user-guide/UM10204.pdf
Sobald die Folie über ein
8cm Flachbandkabel angeschlossen wird, fängt der Bus an mit spinnen.
Kannst Du den Datenverkehr am Bus mal mit einem Oszi anschauen? Dann sieht man gut, ob saubere High- und Low-Pegel vorliegen und ob die Signalflanken steil genug sind. Ist dies nicht der Fall würde ich im ersten Schritt ebenfalls niedrigere Werte für die Pullupwiderstände oder eine niedrigere Taktrate testen. Die Leitungslänge sollte meiner Erfahrung nach kein Problem darstellen, vielleicht liegt ja ein anderer Fehler vor, der an sich unabhängig vom I2C Bus ist?
Hallo,
I2C ist stärker, als definiert. Wir haben bei Bedienteilen von Philips Funkgeräten, die über I2C angeschlossen waren, über mehr als 50m Telefonleitung einwandfreie Daten übertragen können. Ein Oszi könnte evtl. helfen. VG
Es ist zwar ausdrücklich nicht empfohlen, I2C über längere Strippen zu
führen, aber insbesondere wurde I2C auch in seiner frühen Zeit genau so
verwendet, z.B. auf der Verbindungsleitung zwischen Grundig Fernsehgerät
und Video-2000-Rekordern mit einer Länge von ca. 1,5 m bis 2 m.
Ja und? I2C definiert Datenverkehr auf einem Bus mit zwei Signalleitungen, nicht mehr. Wenn die Treiber viel Strom können und die Geschwindigkeit moderat ist, dürften beliebig viele Meter möglich sein.
I2C ist stärker, als definiert. Wir haben bei Bedienteilen von Philips
Funkgeräten, die über I2C angeschlossen waren, über mehr als 50m
Telefonleitung einwandfreie Daten übertragen können.
Zeige die zugehörigen Treiberstufen, die lange Leitung wird wohl kaum direkt an einem ATMega hängen.
sorry für die späte Rückmeldung und danke für die vielen Antworten. Anbei zwei Bilder von den Signalen. Pullups sind aktuell insgesamt 2350 Ohm.
Es scheint wirklich in erster Linie ein Masseproblem gewesen zu sein. Das Flachbandkabel war an der Lötstelle gebrochen und hatte somit einen "Wackelkontakt". Nachdem alles nachgelötet wurde bekomme ich nun alle Adressen korrekt angezeigt und kann auch alle Teilnehmer am Bus zuverlässig ansprechen.
Die ganzen Dokumente von TI werde ich mir aber dennoch genauer durchlesen. Dann kann ich was Crosstalk und Undershoot noch etwas nachbessern und experimentieren.
Dann kann ich was Crosstalk und Undershoot noch etwas
nachbessern und experimentieren.
Im Bild 20260501_213615.jpg ist der Effekt erkennbar. Immer wenn SCL auf Low geht, zuckt SDA ein bisschen mit nach unten. In der aktuellen Größe halte ich das für völlig in Ordnung.
Signalleitungen, nicht mehr. Wenn die Treiber viel Strom können und die
Geschwindigkeit moderat ist, dürften beliebig viele Meter möglich sein.
Klar, wenn jeder Treiber unendlich viel Strom kann, dann kann die Leitung unendlich lang sein. :-D
In der Praxis haengt die Zuverlaessigkeit von verschiedenen Dingen ab:
Consumerzeug das nur ab und mal eingeschaltet wird, oder
Industriekram der 10Jahre 24/7 laufen soll?
Generell die Art der verwendeten Slaves. Kann keiner von denen SCK auf
Low ziehen ist das sicher hilfreich. Wenn sie sich nach einer gewissen
selber reseten (SMB) noch mehr.
Hat der Programmierer daran gedacht eine auf Masse liegende Datenleitung
zu erkennen und clockt die dann frei?
Es kann also Zuverlaessig sein, ist aber sehr oft nicht.
Belegung vom Flachband 1mm Pitch ist:
3V3|SCL|SDA|GND|INT(TCA8418)|RES(TCA8418)|GND|
Damit schaffst du beste Bedingungen für direktes Überkoppeln zwischen SDA und SCL. Aber so wie deine Signale aussehen, wird das wohl von den Kapazitäten der Leitungen gut geschluckt.
Wenn die Treiber viel Strom können und die
Geschwindigkeit moderat ist, dürften beliebig viele Meter möglich sein.
Unsinn. Durch die Signallaufzeit zwischen Master und Slave kommen Daten vom Slave unweigerlich mit einer Verzögerung beim Master an (bezogen auf SCL). Mit "beliebig viele Meter" wird das also nichts, selbst wenn gar keine Signalverschleifungen auf Grund von Leitungskapazität und begrenztem Treiberstrom auftreten.
Woanders wäre diese Frage eine Frechheit. Denn niemand kauft eine
Anlage, um sie sporadisch neu starten zu müssen.
Noch, aber sie sind eifrig dabei, die "unser-täglich-Update-gib'-uns-heute"-Religion zu verbreiten, und die sieht Uptime als Erzfeind an.
Daß etwas wochen-, monate- oder sogar jahrelang einfach so läuft, das ist in den CI/CD-geschädigten Update!-Köpfen nicht vorstellbar; und wenn man denen erzählt, daß es in der Industrie Geräte gibt, die mit mehrere Jahrzehnte alter Firmware betrieben werden, dann bekommen die mindestens Pickel, wenn nicht sogar Herzklabaster.
Man muss ja nicht alles ins Internet hängen. Oder besser gesagt: Man
soll das nicht tun.
... und das sagt jemand in Zeiten, wo es von manchen schon als exotische Forderung angesehen wird, dass ein Gerät ohne Cloud-Server noch autonom voll funktionieren soll.