Hallo zusammen,
ich betreibe 2 ATTINY84A (8MHz). Beide sind über eine I2C Verbidnung
untereinander verbunden.
Da am Anfang die Kommunikation nicht funktionierte, habe ich die
Kommunikation mit einem Oszi gemessen. Dabei ist mir aufgefallen, dass
jedes mal wenn ich mit einer Prüfspitze an der Clock messe, die
Verbindung ohne Probleme funktioniert.
Darauf hin, habe ich einen Kondensator zwischen Clock und GND (das was
auch die Prüfspitze macht) angeschlossen. Nun funktiert es.
Meine Frage: Warum? Laut I2C Standard sollte die Leitunskapazität nicht
größer als 400pF sei. D.h. (bzw. das verstehe ich so), dass eine
Leitunskapazität von 0 F (also theoretisch) ideal wäre.
Danke und einen schönen Samstag.
ciao
MO
Ja, GND ist verbunden.
Der Master hat auf seinem PCB einen Spannungswandler drauf. Von diesem
PCB gehen 4 Leitungen ab (Vcc, GND, SDA, SCL). Der Slave wird dadurch
auch vom selben Spannungswandler versorgt.
Gruß
Aus dem Datenblatt: "The USI two-wire mode is compliant to the Inter IC
(TWI) bus protocol, but without slew rate limiting on outputs and
without input noise filtering."
Das übernimmt jetzt wohl diese zusätzliche Kapazität. Trotzdem würde ich
mir den Aufbau noch mal genau anschauen.
Also 150cm ist schon ne Hausnummer... da passt das eigentlich, es wird
immer mit so 1.5 - 10pF/inch gerechnet. Dir ist schon bewusst, das es
zwar kein Maximum an Leitungslänge gibt, aber i2c eigentlich einen
Platinen-Bus für kurze Distanzen ist?!
Rene K. schrieb:> da passt das eigentlich, es wird> immer mit so 1.5 - 10pF/inch gerechnet.
d.h. in diesem Fall ca. 590'' --> ca. 1nF - 6nF
Der Cap an der Clock zur Rauschunterdrückung benötigt werden?
Oder liegt es daran, dass der Cap die Clock Geschwindigkeit reduziert.
Durch den Cap dauert es ja länger bis zum erreichen der Threshold. Und
damit wird die Datenrate reduiziert(?)
Ja mir ist es bewusst, dass I2C eigentlich nur auf einem PCB verwendet
werden sollte.
Pull-Up liegen bei 1k
I2C software kommt aus TinyWire.
MO schrieb:> Rene K. schrieb:>> da passt das eigentlich, es wird>> immer mit so 1.5 - 10pF/inch gerechnet.>> d.h. in diesem Fall ca. 590'' --> ca. 1nF - 6nF
1 inch = 2,54cm
150cm = ? inch
Ich würde mal dringend auf Leitungsreflexionen tippen
die einem das Signal versauen.
Ohne Serienabschluss wird es bei dieser Konstellation
wohl nichts werden.
MO schrieb:> Beide sind über eine I2C Verbidnung untereinander verbunden.
Dann kann es noch Ausgleichsströme geben wenn beide Controller
über (separate) Netzteile versorgt werden. Das hebt dann den
einen oder anderen Controller im GND-Bezugspegel an.
Mitlesa schrieb:> Ich würde mal dringend auf Leitungsreflexionen tippen> die einem das Signal versauen.>> Ohne Serienabschluss wird es bei dieser Konstellation> wohl nichts werden.
Ja, mal 100Ω in die beiden Signalleitungen einfügen gegen das
"Klingeln".
> Ja, mal 100Ω in die beiden Signalleitungen einfügen> gegen das "Klingeln".
I2C kann dazu nicht genug Strom treiben. Der Widerstand würde den bus
fast kurzschließen.
Eventuell klappt es mit einer Reihenschaltung aus 120 Ohm und einigen
pF. Könnte man ausprobieren und mit einem Oszilloskop überprüfen.
Stefan U. schrieb:> Eventuell klappt es mit einer Reihenschaltung aus 120 Ohm und einigen> pF. Könnte man ausprobieren und mit einem Oszilloskop überprüfen.
Was keinen wirklichen Sinn macht, da die Leitung von beiden Seiten
getrieben wird. Über 1-2 Meter sind aber keine Tricks nötig, das
funktioniert in Millionen DVI bzw HDMI Kabeln einwandfrei. Dies halte
ich aber für wichtig:
Peter D. schrieb:> SDA und SCL nicht nebeneinander führen, sondern eine kalte Leitung (GND,> VCC) dazwischen.> Bei paarigem Kabel ein Paar SDA+VCC, das andere SCL+GND.
MfG Klaus
Stefan U. schrieb:>> Ja, mal 100Ω in die beiden Signalleitungen einfügen>> gegen das "Klingeln".>> I2C kann dazu nicht genug Strom treiben. Der Widerstand würde den bus> fast kurzschließen.
Nicht 100Ω Pullup, sondern in Serie zur Verbindungsleitung.
Als Schwingungsdämpfer.
Stichwort "Serienterminierung"