Forum: Mikrocontroller und Digitale Elektronik I2C / TWI PullUp


von Fer T. (fer_t)


Lesenswert?

Hallo,
Evtl wurde meine Frage schon mal gestellt und beantwortet, aber ich 
konnte sowohl im Forum als auch bei google nichts genaues dazu finden:

Ich will einen I2C Bus betreiben, an dem hängt nur der Master (AVR) und 
ein Slave (IC von NXP).
Die Versorgungsspannung ist zwischen 2V und 3V (Batteriebetrieb).

Jetzt bin ich gerade am Platinen designen, aber ich weiß nicht wie hoch 
der Pullup sein muss, das ist auch meine Frage.

Immer wieder ließt man zwischen 10k und 100k, passt das immer?
Weil im Datenblatt des NXP IC steht nur die Formel Tr / Cp.
Wobei mir schon klar ist das Tr die rise-time und Cp die Kapazität der 
Leitung ist.
Es muss doch einen einfacheren Weg geben als die Kapazität erst zu 
messen, meine Leitung ist nur auf der Platine und gerade mal max. 5cm 
lang.
Geschwindigkeit ist auch kein Problem, der IC kann max. 400 Kb/s aber 
mir reichen schon 100 Kb/s vollkommen aus (selbst weniger sind ok).

Kann mir mal jemand exemplarisch zeigen wie ich jetzt also auf Rp komme?
Das wäre sehr nett :D

MfG

von Oliver J. (skriptkiddy)


Lesenswert?

Fer T. schrieb:
> 10k und 100k
eher kleiner 10k.

> Kann mir mal jemand exemplarisch zeigen wie ich jetzt also auf Rp komme?
Schau mal hier:
I2C als Hausbus: Kleinerer Pull-Up

Gruß Oliver

von spess53 (Gast)


Lesenswert?


von Simon S. (-schumi-)


Lesenswert?

Am einfachsten währe wohl immer noch die internen Pullups des AVRs zu 
benutzen.. (Bei einer so kleinen Schaltung wie der deinen)

von ... (Gast)


Lesenswert?

Und dann läßt du den Bus mal etwas übertragen und guckst mit dem Oszi, 
ob die Daten rechtzeitig vor der steigenden Flanke vom SCL stabil sind 
...

Im Layout würde ich auf jeden Fall Pull-Ups vorsehen, weil die internen 
des ATmega abhängig von deinem Slave evtl. schon arg groß sein können.

von Fer T. (fer_t)


Lesenswert?

Simon S. schrieb:
> Am einfachsten währe wohl immer noch die internen Pullups des AVRs zu
> benutzen.. (Bei einer so kleinen Schaltung wie der deinen)

Haut das hin? Weil die haben (wenn ich es richtig im Kopf habe) zwischen 
20k und 100k. Ist dann nicht etwas groß?


spess53 schrieb:
> Offizielle Quellen sind kompetenter:
>
> http://www.google.de/url?sa=t&rct=j&q=i2c%20specif...
>
> MfG Spess

Also in den Spezifikationen steht ja das max. 3mA gesenkt werden können, 
also ist das mit etwas Spielraum doch in meinem Fall:
R = U/I
R = 2V/0,001mA = 2k Ohm

Reicht aus oder? Bez. Weil ich die noch hier rum liegen habe, 3,3K 
sollten auch gehen oder?

MfG

PS: Kann man allgemein sagen:
Je kleiner die Strecke ist, also je kleiner Cp desto kleiner kann man 
auch Rp wählen.
Oder nicht?

von Klaus (Gast)


Lesenswert?

Fer T. schrieb:
> PS: Kann man allgemein sagen:
> Je kleiner die Strecke ist, also je kleiner Cp desto kleiner kann man
> auch Rp wählen.
> Oder nicht?

Nein, je kleiner Cp desto größer kann man Rp machen, oder besser 
umgekehrt: je größer Cp desto kleiner muß man Rp machen.

MfG Klaus

von Fer T. (fer_t)


Lesenswert?

Klaus schrieb:
> Nein, je kleiner Cp desto größer kann man Rp machen, oder besser
> umgekehrt: je größer Cp desto kleiner muß man Rp machen.

Ah ok, merk ich mir :D
Aber es spricht nichts dagegen jetzt dir 3,3k zu nehmen?
Das spart mir erst mal eine Bestellung ;)

MfG

von spess53 (Gast)


Lesenswert?

Hi

>Also in den Spezifikationen steht ja das max. 3mA gesenkt werden können,..

An welcher Stelle?

Bei 2-3V liegt der minimale Pull-Up zwischen 500 und 750 Ohm. Macht 4mA. 
muss man aber nicht ausnutzen. Mit den 3k3 solltest du auskommen.

MfG Spess

von Fer T. (fer_t)


Lesenswert?

spess53 schrieb:
> An welcher Stelle?

Seite 20: The I2C-bus specification

spess53 schrieb:
> Mit den 3k3 solltest du auskommen.

Ok, das hört sich gut an.
DANKE :D

von Klaus (Gast)


Lesenswert?

spess53 schrieb:
> An welcher Stelle?

Seite 39:
> The supply voltage limits the minimum value of resistor Rp
> due to the specified minimum sink current of 3 mA at
> VOLmax = 0.4 V for the output stages

MfG Klaus

von Fer T. (fer_t)


Lesenswert?

Sorry, ich grabe den Thread noch mal aus, geht noch mal um die Push Ups:
Und zwar wird der TWI nur selten gebraucht (nur mehrmals täglich, 
vielleicht 10-30 mal pro Tag) aber Stromverbrauch ist für die Anwendung 
extrem wichtig, daher die Frage, ob es sinnvoll ist die Pullups hinter 
Transistoren zu schalten.
Also der uC schaltet die Pullups ein (habe nur noch einen Pin am uC) der 
uC liegt während der Off-Phasen im Sleep mode als Device dient ein 
RTC-IC.

Weil wenn ich rechne: R = 3,3K und Umax = 4,5V dann: I = ~1mA was doch 
recht viel ist.
Oder vertue ich mich und der Strom fließt nur wenn der auf dem Bus was 
übertragen wird?

DANKE :D

von Vn N. (wefwef_s)


Lesenswert?

Fer T. schrieb:
> Oder vertue ich mich und der Strom fließt nur wenn der auf dem Bus was
> übertragen wird?

Ja. Außerdem wäre da noch die Möglichkeit, das TWI einfach zu 
deaktivieren, wenn es nicht gebraucht wird.

von tt2t (Gast)


Lesenswert?

Meistens sind die Pullups zu gross, 10k führt zu grässlich flachen 
Flanken, die bei schneller Peripherie oft zu Fehlern führt.

Der Mindeststrom durch die Pullups soll 3mA sein, das ist nun mal die 
Spezifikation (I2C-Spezifikation Kap. 16.1) und tut den Stromsparern nur 
dann weh, wenn die Leitung LO ist.

Je mehr Geräte dran sind, um so kleiner müssen die Pullups sein.

Faustregel: bei 5 Volt sind Pullups von 1k5 (bis 1k8) recht gut, bei 3.3 
Volt 1k (bis 1k2). Damit kann man auch schnelle Bauteile und längere 
Leitungen bedienen. Natürlich funktioniert es auch oft, wenn man mit 4k7 
operiert, aber man ist halt nicht auf der sicheren Seite.

von Fer T. (fer_t)


Lesenswert?

vn nn schrieb:
> Ja. Außerdem wäre da noch die Möglichkeit, das TWI einfach zu
> deaktivieren, wenn es nicht gebraucht wird.

Guter Einwand, danke :D
Wieder Platz auf dem Layout gespart ;)

tt2t schrieb:
> Der Mindeststrom durch die Pullups soll 3mA sein

Sicher das mindestens 3mA wenn ich in den Datenblättern nach sehe steht 
dort der maximale zu senkende Strom.

MfG und DANKE :D

von tt2t (Gast)


Lesenswert?

> Sicher das mindestens 3mA wenn ich in den Datenblättern nach sehe steht
> dort der maximale zu senkende Strom.

Im Kap. 16.1 der I2C-Spezifikation ist Fig.37 mit den Min- und 
Max-Werten für die Pullups. Da braucht man nur nachzusehen. Dort ist für 
3.3 Volt sogar ein Wert unter 1k0 zu abzulesen.

von Fer T. (fer_t)


Lesenswert?

tt2t schrieb:
> Im Kap. 16.1 der I2C-Spezifikation ist Fig.37 mit den Min- und
> Max-Werten für die Pullups. Da braucht man nur nachzusehen. Dort ist für
> 3.3 Volt sogar ein Wert unter 1k0 zu abzulesen.

Ja aber das sind die Minimum Werte und ich denke nicht das ich auf 2 cm 
Leiterbahn eine so hohe Kapazität habe, also sollte ich eigentlich mit 
meinen 3,3K ganz gut fahren.

MfG

von Timm T. (Gast)


Lesenswert?

Hab letztens einen DS1307 über I2C angeschlossen und glatt die Pull-Ups 
vergessen. Also die I2C-Routinen auf interne Pull-Ups umgestrickt: 
Funktioniert einwandfrei. Sind ja auch nur 2cm vom AVR zum DS1307 und 
nichts weiter am Bus.

Man muss halt nur beachten, dass man DDRx und PORTx umschalten muss. 
Geht also nur mit Software-I2C und eigenen Routinen.

Die 3k3 reichen auf jeden Fall, 10k gehen da auch noch. Bei den kurzen 
Leitungen und nur einem Slave ist das ziemlich unkritisch.

von Uwe (Gast)


Lesenswert?

Wenns auf den Stromverbrauch ankommt kannst du ja 100KOhm reinmachen und 
dann soweit mit der Geschwindigkeit rutergehen bis es wieder geht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.