Hallo!
Ich krieg meinen iic bus nicht zuverlässig zu laufen.
verwende im moment 10k pull-ups, was bei meinen spannungen einen
stromfluss über den open-drain von 0,3 mA ergibt. Mir ist bewusst dass
in der spezifikation des iic bus 3 mA gefordert sind. Doch auch mit
niedrigeren pullups hatte ich ein problem.
nun meine grundsätzliche frage: was ist das problem wenn der master bzw
slave nur 0,3 mA kriegt statt der 3mA??
im Datenblatt meines avr heißt es, dass in manchen fällen auch die
internen pullups genommen werden können. die haben einen widerstand von
50k und der drain strom wäre in dem fall nochmal viel kleiner.
viele grüße
bob
ich habe 2 displays am bus hängen, die leitungen haben etwa einen meter.
Außerdem verwende ich einen iic-translator, da auf der einen seite 5v
und auf der anderen 3,3v. die signale sehen bei frequenzen aber 50kHz
nicht mehr besonders gut aus muss ich sagen.
Bob schrieb:> ... ich habe 2 displays am bus hängen,> ... die leitungen haben etwa einen meter.
->
> ... die signale sehen ... nicht mehr besonders gut aus
Da hast du doch genug Ansatzpunkte, warum dein Bus Probleme machen kann.
Wer schickt kein Acknowledge? Wenn's einer der Slaves ist, versteht der
der Master nicht, wenn's der Master ist, könntest du auch ein SW-Problem
haben. Who knows?
Bei 1m Signalweg würde ich immer die Pullups so klein wie möglich
machen. Dir ist schon klar, dass man bei einer Pegelwandlung auf beiden
Seiten einen Pullup braucht? Außerdem die Geschwindigkeit soweit runter
nehmen, bis es zuverlässig läuft.
Die parasitäre Induktivität und Kapazität des Kabels bilden einen
Tiefpass. Dem kann man durch eine niederohmige Quelle entgegenwirken.
Der Pullup ist Teil dieser Quelle.
Bob schrieb:> nun meine grundsätzliche frage: was ist das problem wenn der master bzw> slave nur 0,3 mA kriegt statt der 3mA??
Ja
Bob schrieb:> verwende im moment 10k pull-ups,
Versuch es mit 1k wenn es stabil läuft hast du den Fehler, wenn nicht
dann nicht.
Wenn der Strom ein Problem darstellt dann halte die I2C Telegramme so
kurz wie möglich. Im Idle state fließt keiner.
Bob schrieb:> verwende im moment 10k pull-ups, was bei meinen spannungen einen> stromfluss über den open-drain von 0,3 mA ergibt. Mir ist bewusst dass> in der spezifikation des iic bus 3 mA gefordert sind. Doch auch mit> niedrigeren pullups hatte ich ein problem.
Was für Probleme waren es denn bei niedrigen Pull-Ups?
Wenn du ein Oszi zur Hand hast, schau dir einfach an wie steil die
steigenden Flanken auf SDA/SCL nach oben gehen.
Wenn es zu langsam geht, kann das das Problem bei den Pull-Ups liegen,
sonst nicht.
> nun meine grundsätzliche frage: was ist das problem wenn der master bzw> slave nur 0,3 mA kriegt statt der 3mA??
Bekommen tun die davon nichts, wie gesagt kommt es nur darauf an wie
steilflankig das Signal ist.
Jörg S. schrieb:> ... kommt es nur darauf an wie steilflankig das Signal ist.
Woher hast du denn, dass I2C auf steilflankige Signale angewiesen ist?
Bedingung ist, dass ab dem Moment wo der Slave den L->H Übergang von SCL
erkennt, die Daten bist zum SCL H->L Wechsel stabil sein müssen.
... schrieb:> Bedingung ist, dass ab dem Moment wo der Slave den L->H Übergang von SCL> erkennt, die Daten bist zum SCL H->L Wechsel stabil sein müssen.
Richtig, und wenn die Flanke zu flach ist klappt das nicht mehr.
Spätestens wenn's nach Sägezahnsignal aussieht sollte man sich sorgen
machen :)
die flanken sehen eigentlich okay aus. bis auf merkwürdige stellen.
die sache ist, dass ich einen I²c translator benutze der verschieden
Spannungspegel mit einander vereinbart. nun ist es so, dass wenn ich das
oszi auf nicht-vom avr angesteuerte seite hänge manchmal komische peaks
sehe. beispielsweise zieht das datensignal bei wechsel von low auf high
das clocksignal ein stück mithoch (fällt anschließend wieder,sieht aus
wie ein emv problem) ehe die clock dann aktiv auf high geht. das hat
sich bemerkbar gemacht als ich die niedrigen pull ups am iic translator
hatte. nun benutze ich lediglich seine internen, sehe aber immer noch
manchmal andere peaks, die mich stutzig machen. hmm verdammt