I2C / TWI PullUp

OP #2626740
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
Gast #2626772
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.
OP #2626774
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?
Gast #2626786
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
Gast #2626793
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
OP #2660338
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
Gast #2660472
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.
OP #2660511
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
Gast #2660584
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.
OP #2660619
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
Gast #2661097
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren