Forum: Mikrocontroller und Digitale Elektronik Aufgaben I²C Schnittstelle


von Francisca93 (Gast)


Lesenswert?

Hallo,

ich lerne gerade für eine Klausur zum Thema 
Mikrocontroller/Schnittstellen. Bei einer Aufgabe komme ich grad gar 
nicht weiter:

"An einem I²C-Bus messen Sie die parasitäre Kapazität von 100 pF. Die 
Datenübertragung soll im fast mode (400 kHz) sicher möglich sein. 
Berechnen Sie einen geeigneten Wert für die PU-Widerstände an 5 V 
Betriebsspannung. Die Treiberstufen der Buskomponenten werden bei 
PU-Widerständen kleiner als 1,1 kOhm zerstört."

Hat da jemand eine Idee?

Schonmal vielen Dank für jede Hilfe :-)

von RP6conrad (Gast)


Lesenswert?

Berechnen sie die Rise Time mit ein Widerstand von x kohm die ein C von 
100 pF laden soll. Die I2C 400 kHz braucht eine bestimmte Zeit um jeden 
SDA / SCL level richtig zu lesen. Vb : minimal 66% von 5V ist notwendig 
für eine "1" level zu lesen.  Wielange dauert es um mit eine bestimmt R 
diese Spannung zu erreichen ? Wielange hast I2C notig ?

von Εrnst B. (ernst)


Lesenswert?

Francisca93 schrieb:
> Hat da jemand eine Idee?

Blick in's Datenblatt eines willkürlich gewählten I²C-ICs(PCF8574 von 
TI): "I²C Input rise time: max. 1µs". und "High-Level input voltage: 
min. 0.7 * VCC"

Also: Pullup ausrechnen, dass er in max. 1µs die 100pF aus der Angabe 
auf 70% von 5V auflädt.


Andere I²C-Teilnehmer am Bus oder anderer Hersteller: Pech, hat evtl. 
andere Werte. Also Pullup großzügig unterdimensionieren.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Der Kondensator lädt sich in der Zeit T auf 63% auf, bzw. entlädt auf 
37% (100-63). Diese Schwellwerte liegen ziemlich nahe an den High/Low 
Schwellen typischer CMOS IC*s. T = R*C. Wenn man das umstellt kommt man 
auf:

R = 1/400.000/100pF = 25k Ohm

Mit größeren Werten funktioniert es sicher NICHT. Damit es sicher 
funktioniert, würde ich mindestens auf 1/4 davon runter gehen, also auf 
6,5k Ohm.

von Stefan F. (Gast)


Lesenswert?

> Pullup ausrechnen, dass er in max. 1µs die 100pF
> aus der Angabe auf 70% von 5V auflädt.

Damit erreicht man aber zwangsläufig weniger als 100kHz Taktfrequenz. 
Wir wollen 400kHz erreichen, deswegen sind die 1µs in diesem Fall 
irrelevant.

von Εrnst B. (ernst)


Lesenswert?

Stefan U. schrieb:
> Damit erreicht man aber zwangsläufig weniger als 100kHz Taktfrequenz.

Magst du mich erleuchten, wo ich falsch lag?

1/1µs gibt bei mir 1MHz. Nur das Aufladen ist kritisch, das Entladen 
passiert ja "aktiv" und schnell.

Insofern kommt mit die 1µs max. rise time aus dem Datenblatt bei 400kHz 
garnicht so verkehrt vor, man will ja auch nicht unbedingt einen 
Sägezahn auf der Leitung haben.

von Peter S. (Gast)


Lesenswert?

Wahrscheinlich geht es eher um die Rise-Time, die der I2C-Standard für 
Fast-Mode vorgibt. Die kann mit den Infos aus dem Datenblatt eines 
Bausteins übereinstimmen, das muss aber nicht sein.
Ein Chip könnte den Standard z. B. übererfüllen. Wenn man seine 
Rise-Time dann dahingehend auslegt, funktionieren vielleicht andere 
Chips, die den Standard gerade so erfüllen, nicht mehr.

von HansG (Gast)


Lesenswert?

Kapitel 7.1 "Pull-up resistor sizing"
von NXP "I2C-bus specification and user manual
" durchlesen.

von Horst S. (Gast)


Lesenswert?

Irgendwie liegt mir an, nach 5* Tau(Zeitkonstante R*C) ist ein 
Kondensator praktisch umgeladen.

https://de.wikipedia.org/wiki/Zeitkonstante

Der Rest ist Rechenknecht (kommt bei mir R < 5k raus).

In der Aufgabe leider nicht spezifiziert: Bei fallender Taktflanke wird 
gelesen (müssen die Daten valide sein), aber wie groß ist die Latenz 
nach der steigenden Flanke, bis der Sender die Daten schreibt?

von Bernd K. (prof7bit)


Lesenswert?

Horst S. schrieb:
> Bei fallender Taktflanke wird
> gelesen

Nein, bei I²C markiert die steigende Flanke den Abtastzeitpunkt. Und SDA 
muss stabil bleiben solange SCL oben ist, erst wenn SCL wieder low ist 
darf das nächste Bit angelegt werden. Und erst wenn es anliegt darf SCL 
wieder hoch gehen, nicht vorher.

Wenn der Slave beim Lesen es nicht schafft das zu lesende Bit schnell 
genug anzulegen wenn SCL runter geht muss er sofort mit dem Fuß auf das 
noch am Boden liegende SCL drauftreten (damit es nicht mehr hoch geht, 
clock stretching) so daß er Zeit hat sich in Ruhe das nächste Bit 
auszudenken und erst wieder loslassen wenn er das Bit endlich 
ausgetüftelt und sauber auf SDA angelegt hat.

: Bearbeitet durch User
von Bär Luskoni (Gast)


Lesenswert?

Bernd K. schrieb:
>.... muss er sofort mit dem Fuß auf das
> noch am Boden liegende SCL drauftreten (damit es nicht mehr hoch geht,
> clock stretching) so daß er Zeit hat sich in Ruhe das nächste Bit
> auszudenken und erst wieder loslassen wenn er das Bit endlich
> ausgetüftelt und sauber auf SDA angelegt hat.


Das hast Du wirklich gut und plastisch beschrieben. Sowas freut mich, 
weil ich auch so mechanistisch denke.

von Stefan F. (Gast)


Lesenswert?

> 1/1µs gibt bei mir 1MHz

Facepalm. Natürlich, wie dumm von mir.

von Michel M. (elec-deniel)


Lesenswert?

Eine gute Zusammenstellung findet sich unter den Stichworten
I2C Bus Pullup Resistor Calculation Application Report

von Route_66 H. (route_66)


Lesenswert?

Εrnst B. schrieb:
> Stefan U. schrieb:
>> Damit erreicht man aber zwangsläufig weniger als 100kHz Taktfrequenz.
>
> Magst du mich erleuchten, wo ich falsch lag?

Du sollst halt sein Super-Buch lesen!

von Stefan F. (Gast)


Lesenswert?

> Du sollst halt sein Super-Buch lesen!

Quatsch.

ich meinte, das man mit 1µS Verzögerung maximal 100kHz erreichen kann. 
Das war aber Unsinn, es hätte 1MHz heißen sollen und dann macht mein 
Einwand natürlich keinen Sinn mehr.

Der Beitrag von Εrnst B✶ war also absolut richtig und wichtig. Das 
Signal muss mindestens so schnell ansteigen, wie im DB gefordert. 
Außerdem muss damit natürlich auch noch die gewünschte Taktfrequenz 
erreichbar sein, was in diesem Fall logischerweise zutrifft (weil 1µS 
weniger als 1/400kHz ist).

von Francisca93 (Gast)


Lesenswert?

Danke für die Beiträge, da muss ich mich jetzt erstmal durcharbeiten :-)

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.