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 :-)
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 ?
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
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.
> 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.
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.
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.
Kapitel 7.1 "Pull-up resistor sizing" von NXP "I2C-bus specification and user manual " durchlesen.
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?
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
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.
Eine gute Zusammenstellung findet sich unter den Stichworten I2C Bus Pullup Resistor Calculation Application Report
Ε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!
> 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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.