Hi, ich habe mich schon seit längerer Zeit damit beschäftigt, statt SPI mit I2C eine EEPROM, die hier bei mir noch rumliegt, anzusteuern. Allerdings möchte ich verstehen, wie über zwei Drähte Daten gesendet und empfangen werden. So, wie ich das verstehe, wird bei I2C bei einer Flanke (z.B. High-Low) gesendet und bei Low-High dann empfangen. Aber müssten dann nicht dauernd Kurzschlüsse entstehen? Wenn der sendende IC High ausgibt, dann kann dieser zwar, bevor der angesteuerte IC einen Takt erhält, auf Low gehen, aber wenn dann der andere IC High ausgibt, dann entsteht ein Kurzschluss. Sind intern Widerstände bzw. spezielle I2C-Empfangsschaltungen enthalten? Mikrocontroller können nur High oder Low oder PWM ausgeben, aber nicht den Pin von High UND Low trennen.. ich bin dankbar für jede gute Erklärung. i2c eeprom: 24LC16B Pascal P.S. das Prinzip an sich verstehe ich gut. Da ich in SPI viel erfahrener bin, gibt es vielleicht SPI-> I2C-Wandler? Die wären sicher sehr hilfreich. Am besten im dip 8 package.
Da entsteht kein Kurzschluss weil der Bus nur nen Pull-Up hat, keiner der angeschlossenen Geräte gibt aktiv HIGH aus. Es fließt immer nur Strom in den SDA/SCL Pin, er liefert nie welchen. Der 10k Pullup wird allerdings tatsächlich kurzgeschlossen wenn man so will.
Pascal schrieb: > P.S. das Prinzip an sich verstehe ich gut. scheinbar nicht. wiki https://de.wikipedia.org/wiki/I%C2%B2C [...] Im Diagramm rechts sind drei Geräte eingezeichnet. I²C benötigt zwei Signalleitungen: Takt- (SCL = Signal Clock) und Datenleitung (SDA = Signal Data). Beide liegen mit den Pull-up-Widerständen RP an der Versorgungsspannung VDD. Sämtliche daran angeschlossenen Geräte haben Open-Collector-Ausgänge, was zusammen mit den Pull-up-Widerständen eine Wired-AND-Schaltung ergibt. [...] Es wird keine High ausgegeben.
Pascal schrieb: > Wenn der sendende IC High ausgibt, Tut er nicht! Der Ausgang wird im Openkollektor (Open Drain) Betrieb genutzt.
> P.S. das Prinzip an sich verstehe ich gut. Nein. Das Prinzip nennt sich 'open collector' bzw. 'open drain' [0]. HTH [0] https://en.wikipedia.org/wiki/Open_collector
Pascal schrieb: > Mikrocontroller können nur High oder Low oder PWM ausgeben, aber nicht > den Pin von High UND Low trennen.. Falsch. > P.S. das Prinzip an sich verstehe ich gut. Nein, Du hast offenbar so wirklich gar keine Ahnung davon. Zunächst solltest Du Dich mit den Grundlagen der Digitalelektronik auseinandersetzen, und dazu gehören eben auch die "analogen" Eigenschaften der Signale.
Andreas S. schrieb: > Nein, Du hast offenbar so wirklich gar keine Ahnung davon. Zunächst > solltest Du Dich mit den Grundlagen der Digitalelektronik > auseinandersetzen, und dazu gehören eben auch die "analogen" > Eigenschaften der Signale. Das wäre doch schon zu hoch für den TO. Mit dem ohmschen Gesetz würde ich mal anfangen.
Beitrag #4931766 wurde von einem Moderator gelöscht.
Beitrag #4931777 wurde von einem Moderator gelöscht.
THOR schrieb: > Da entsteht kein Kurzschluss weil der Bus nur nen Pull-Up hat, keiner > der angeschlossenen Geräte gibt aktiv HIGH aus. Es fließt immer nur > Strom in den SDA/SCL Pin, er liefert nie welchen. > > Der 10k Pullup wird allerdings tatsächlich kurzgeschlossen wenn man so > will. Hallo Pascal, THOR hat so weit recht. Aber der Pullup wird nicht kurzgeschlossen, sondern die Spannung an SDA bzw. SCL. Dann fliesst maximal I = U / R Strom über den Pullup gegen Masse. mfg klaus
Beitrag #4932387 wurde von einem Moderator gelöscht.
Beitrag #4932412 wurde von einem Moderator gelöscht.
Pascal schrieb: > Mikrocontroller können nur High oder Low oder PWM ausgeben, aber nicht > den Pin von High UND Low trennen.. Doch können sie, das Stichwort nennt sich "Tristate" oder "High-Impedance".
Pascal schrieb: > Aber müssten dann nicht dauernd Kurzschlüsse entstehen? Nein, die Ausgänge von I2C Master und Slave sind über wirred OR (in negativer Logik) zusammengeschaltet. Sobald einer die SDA-Leitung mit seinem Open-Kollektor Ausgang nach 0V zieht, liegt (etwas) 0V auf der Leitung. Der Strom, der immer versucht, den Bus auf VDD zieht, kommt von dem bei I2C immer erforderlichen Pull-Up Widerstand, aber nicht von Master oder Slave.
Wolfgang schrieb: > Nein, die Ausgänge von I2C Master und Slave sind über wirred OR (in > negativer Logik) Oder gleich ein "Wired And": nur wenn alle Teilnehmer ein High (= kein Low) ausgeben kommt auf dem Bus ein High zustande.
Wolfgang schrieb: > Nein, die Ausgänge von I2C Master und Slave sind über wirred OR (in > negativer Logik) zusammengeschaltet. Sobald einer die SDA-Leitung mit > seinem Open-Kollektor Ausgang nach 0V zieht, liegt (etwas) 0V auf der > Leitung. Der Strom, der immer versucht, den Bus auf VDD zieht, kommt von > dem bei I2C immer erforderlichen Pull-Up Widerstand, aber nicht von > Master oder Slave. dummerweise sind nicht alle 5V Teile ohne pullups, doof halt wenn die auf 5V ziehen RTC DS3231 aber einer nicht 5V tolerant ist Raspi. Es gibt auch I2C Slave die nicht oc (Open-Kollektor) sind, das muss man dann genau wissen oder untersuchen, sicherer ist man immer wenn I2C devices mit der passenden Spannung laufen und laufen können, also alle 5V oder alle 3,3V das ist optimal, Mischbetrieb kann Probleme machen oder Nebenwirkungen haben.
Klaus R. schrieb: > Dann fliesst maximal I = U / R > Strom über den Pullup gegen Masse. Hoffentlich schafft es der Strom gegen die Masse.
Joachim B. schrieb: > dummerweise sind nicht alle 5V Teile ohne pullups, doof halt wenn die > auf 5V ziehen RTC DS3231 aber einer nicht 5V tolerant ist Raspi. Dann muss man vielleicht mal mit zwei Bussegmenten arbeiten (5V bzw. 3.3V) und einen Pegelkonverter dazwischen setzen. http://www.nxp.com/documents/application_note/AN10441.pdf Lothar M. schrieb: > Oder gleich ein "Wired And": nur wenn alle Teilnehmer ein High (= kein > Low) ausgeben kommt auf dem Bus ein High zustande. Ich finde es logischer, sich auf den aktiven Zustand zu beziehen (i.e. sobald ein Teilnehmer aktiv ist) und das drückt sich besser durch ODER aus.
Joachim B. schrieb: > dummerweise sind nicht alle 5V Teile ohne pullups, doof halt wenn die > auf 5V ziehen RTC DS3231 aber einer nicht 5V tolerant ist Raspi. Der DS3231 ist da aber nicht schuld, weil im Datenblatt steht eindeutig "This open-drain pin requires an external pullup resistor".
Joachim B. schrieb: > Es gibt auch I2C Slave die nicht oc (Open-Kollektor) sind, Beispiele? Für den Standard I2C-Bus ist das nicht zugelassen und funktioniert nicht. In der Spezifikation von Philips/NXP steht ganz klar "The output stages ... must have an open-drain or open-collector ..." (Kap.3.1.1) http://www.nxp.com/documents/user_manual/UM10204.pdf Und der UFm-I2C-Bus ist unidirektional.
D'oh! schrieb: > Der DS3231 ist da aber nicht schuld, weil im Datenblatt steht eindeutig > "This open-drain pin requires an external pullup resistor". Nur die China-Module haben an ALLEN Eingängen Pull-Ups drauf! Gruss Chregu
D'oh! schrieb: > Der DS3231 ist da aber nicht schuld, weil im Datenblatt steht eindeutig > "This open-drain pin requires an external pullup resistor". stimmt, da habe ich zu wenig geschrieben es ist das China Modul, beim DS1307 Modul (einzelne R) ist es halt leichter als beim DS3231 Modul (Array sehr winzig) die R auszulöten. Wolfgang schrieb: > Joachim B. schrieb: >> Es gibt auch I2C Slave die nicht oc (Open-Kollektor) sind, > > Beispiele? > > Für den Standard I2C-Bus ist das nicht zugelassen und funktioniert > nicht. In der Spezifikation von Philips/NXP steht ganz klar und das weisst du für alle I2C devices? Es soll ja auch Module geben die nur I2C ähnlich sind aus Lizensgründen und dann sind da noch I2C ähnliche Implementierungen ohne echte OC. Christian M. schrieb: > Nur die China-Module haben an ALLEN Eingängen Pull-Ups drauf! > Gruss Chregu stimmt und beim DS3231 Modul habe ich die R noch nie abgeklemmt, ist mir zu fummelig.
:
Bearbeitet durch User
Joachim B. schrieb: > Wolfgang schrieb: >> Joachim B. schrieb: >>> Es gibt auch I2C Slave die nicht oc (Open-Kollektor) sind, >> >> Beispiele? >> >> Für den Standard I2C-Bus ist das nicht zugelassen und funktioniert >> nicht. In der Spezifikation von Philips/NXP steht ganz klar > > und das weisst du für alle I2C devices? Ja, alles andere ist nicht I2C und kann auch nicht wie I2C funktionieren. Bei welchen Bausteinen ist dir begegnet, dass die keinen Open-Drain oder Open-Kollektor als Ausgangsstufe haben?
Wolfgang schrieb: > Ja, alles andere ist nicht I2C und kann auch nicht wie I2C > funktionieren. > > Bei welchen Bausteinen ist dir begegnet, dass die keinen Open-Drain oder > Open-Kollektor als Ausgangsstufe haben? was genau hast du an Joachim B. schrieb: > Es soll ja auch Module geben die nur I2C ähnlich sind aus Lizensgründen > und dann sind da noch I2C ähnliche Implementierungen ohne echte OC. nicht verstanden? es gibt z.B. I2C ähnlich versteckt im µC ohne OC Ports. Wolfgang schrieb: > Bei welchen Bausteinen ist dir begegnet, dass die keinen Open-Drain oder > Open-Kollektor als Ausgangsstufe haben? z.B. im AVR etliche ATmega der/die kann oder kennt kein clock stretching und wo sind seine OC Ports?
:
Bearbeitet durch User
Joachim B. schrieb: > z.B. im AVR etliche ATmega der/die kann oder kennt kein clock stretching > und wo sind seine OC Ports? Hinter dem DDR-Register ;-)
Joachim B. schrieb: > z.B. im AVR etliche ATmega der/die kann oder kennt kein clock stretching > und wo sind seine OC Ports? Es reicht aus, wenn man den Pin zwischen Ausgang und Eingang umschalten kann, denn ein Eingang ist hochohmig...
Wolfgang schrieb: > Joachim B. schrieb: >> z.B. im AVR etliche ATmega der/die kann oder kennt kein clock stretching >> und wo sind seine OC Ports? > > Hinter dem DDR-Register ;-) das ist gemogelt und das solltest du wissen! Lothar M. schrieb: > Joachim B. schrieb: >> z.B. im AVR etliche ATmega der/die kann oder kennt kein clock stretching >> und wo sind seine OC Ports? > Es reicht aus, wenn man den Pin zwischen Ausgang und Eingang > umschalten kann, denn ein Eingang ist hochohmig... ach was und hochohmig ist OC, ich weiss das du das selbst nicht glaubst, auch der hochohmige Port ist nicht OC und würde kaum auf 30V gehieft werden können wegen der Bodydioden. Ein Mix aus 3,3V und 5V I2C ist so nicht möglich
:
Bearbeitet durch User
Joachim B. schrieb: > Ein Mix aus 3,3V und 5V I2C ist so nicht möglich Warum soll ein Mix aus 3V3 und 5V nicht möglich sein, wenn man die Leitung nicht auf 30V gehoben bekommt? Was hat das eine mit dem anderen zu tun? Oder sind deine Probleme eher irrelevant?
S. R. schrieb: > Warum soll ein Mix aus 3V3 und 5V nicht möglich sein nehmen wir einen µC mit Bodydioden auf 3,3V ohne OC, dort wird sich auf high auf kaum viel mehr als 3,8V auch mit pullups an 5V einstellen was bei einigen Chips mit 5V + 5%Tol. sagen wir 5,25V nicht für eine sichere high Erkennung reicht. Den Fall gab es so ähnlich schon bei RGBPixel Stripes am PI Data und Clock maximal 3,3V - Toleranz high ab 80% VCC welches bei 5Vsoll 4V wären und bei 70% sogar 3,5V, wie auch immer es reicht manchmal nicht.
Joachim B. schrieb: > Data und Clock maximal 3,3V - Toleranz high ab 80% VCC welches bei > 5Vsoll 4V wären und bei 70% sogar 3,5V, wie auch immer es reicht > manchmal nicht. Doch. Atmel garantiert ein sicheres Erkennen bei 60% der VCC, was normalerweise bedeutet, dass alles über 3V als HIGH erkannt wird. In der Praxis wird in 99% der Fälle alles über 2,8V sicher erkannt. P.S. Der Vorteil ist, dass es nach oben bis 2,8V auf Log.0 bleibt und erst bei etwa 1,6V wieder von Log.1 auf Log.0 umschaltet - es gibt also kein ständiges Umschalten zwischen 0 und 1 oder zufällige Werte, ausser beim Einschalten.
:
Bearbeitet durch User
Pascal schrieb: > Da ich in SPI viel erfahrener bin, gibt es vielleicht SPI-> I2C-Wandler? > Die wären sicher sehr hilfreich. Am besten im dip 8 package. Du willst ein weiteres Bauteil plus Peripherie (kaufen+)einsetzen weil Du keine Lust hast das Protokoll zu lernen? Da ist es günstiger direkt das SPI-EEPROM zu beschaffen.
Andreas S. schrieb: > Nein, Du hast offenbar so wirklich gar keine Ahnung davon. Etwas weniger verbale Konfrontationssprache wäre besser, finde Ich. Wir sind hier ja nicht im Erdoganland. Noch nicht, wenigstens :-) > Zunächst solltest Du Dich mit den Grundlagen der Digitalelektronik > auseinandersetzen, Man merkt, dass Du ein ITler bist :-) Du unterschlägst bei deiner Kritik den Sachverhalt der Stromstärke! Viele Mikrocontroller sind nicht in der Lage, den SPEC-gemäss zu treiben. Egal ob Tri-Ste oder nicht. Zum thread: > I2C müsste doch theoretisch Kurzschlüsse verursachen Tut es ja auch, wenn man z.B. das ACK zu früh kommen lässt oder es keine intelligente Steuerung gibt, die verhindert, dass jeder anfängt zu funken, z.B. bei Multimaster. I2C ist aber auf Kollision ausgelegt! Das muss man eben managen. Ein elektrisches Busproblem durch Überlast etc gibt es dann nicht, wenn man einen I2C-Treiber dazwischen schaltet. Auch bei FPGAs, die ja ein Tristate kennen, ist es vom Pegel her sinnvoller, das mit einem Bustreiber zu machen. Der wird dann nur mit logischen Pegeln getrieben, braucht also auch keine Tristate.
Marc V. schrieb: > In der Praxis wird in 99% der Fälle alles über 2,8V sicher erkannt. och du willst nur wieder spielen, nach deiner eigenen Aussage gibt es also 1% Unsicherheit, das reicht wohl für viele Probleme bei der schieren Menge von Atmels und noch mehr bei anderen Herstellern! Ausserdem stellten wir ja fest das vieles als "I2C" verkauft wird was es nicht ist.
Weltbester FPGA-Pongo schrieb im Beitrag #4933299: >> I2C müsste doch theoretisch Kurzschlüsse verursachen > Tut es ja auch, wenn man z.B. das ACK zu früh kommen lässt oder es keine > intelligente Steuerung gibt, die verhindert, dass jeder anfängt zu > funken, z.B. bei Multimaster. I2C ist aber auf Kollision ausgelegt! Das > muss man eben managen. Tut es nicht. Ein PullUp ist kein Kurzschluss. SDA ist immer open-drain. Und da es auch so etwas wie Clockstretching gibt, sollte auch die SCL-Leitung über PullUp gefahren werden. Dass nicht alle ATMEL Clockstretching unterstützen, heisst noch lange nicht, dass die SCL-Leitung aktiv gesteuert wird.
Joachim B. schrieb: > Ein Mix aus 3,3V und 5V I2C ist so nicht möglich Das Problem ist doch schon seit fast 10h gelöst. Wolfgang schrieb: > Dann muss man vielleicht mal ...
Joachim B. schrieb: > Marc V. schrieb: >> In der Praxis wird in 99% der Fälle alles über 2,8V sicher erkannt. > > och du willst nur wieder spielen, nach deiner eigenen Aussage gibt es > also 1% Unsicherheit, das reicht wohl für viele Probleme bei der > schieren Menge von Atmels und noch mehr bei anderen Herstellern! Nein, ich will nicht spielen. Die meisten Hersteller garantieren 90% der VCC bis zu 5mA an einem I/O Pin. Bei 3V3 sind es 3V und das reicht vollkommen. Ein IC, welches mit 3V (und dann noch -10%) an einem 5V Bus hängt, ist von vornherein falsch eingesetzt.
Weltbester FPGA-Pongo schrieb im Beitrag #4933299: >> I2C müsste doch theoretisch Kurzschlüsse verursachen > Tut es ja auch, wenn man z.B. das ACK zu früh kommen lässt oder ... Einen Widerstand im kΩ-Bereich würde ich jetzt nicht als "Kurzschluss" bezeichnen - zumindest wenn man über Spannungen von wenigen Volt redet.
Weltbester FPGA-Pongo schrieb im Beitrag #4933299: > Man merkt, dass Du ein ITler bist :-) Du unterschlägst bei deiner > Kritik den Sachverhalt der Stromstärke! Viele Mikrocontroller sind nicht > in der Lage, den SPEC-gemäss zu treiben. Egal ob Tri-Ste oder nicht. Welche sind das denn? Die I2C-Spec verlangt 3mA Sink-Current für Standard-Mode, 6mA für Fast-Mode und 20mA für Fast-Mode Plus. Ein µC, der noch nicht einmal die 3mA schafft, dürfte wohl eher für Nischenanwendungen gedacht sein.
Marc V. schrieb: > Ein IC, welches mit 3V (und dann noch -10%) an einem 5V Bus hängt, > ist von vornherein falsch eingesetzt. ich weiss das, was denkst du wieviel Teile gleichzeitig mit Arduino & PI beworben werden trotz der (üblichen) Spannungsunterschiede? OK und nur weil Bauteile falsch eingesetzt werden ist mein Schrieb lange noch nicht falsch. Ach ne hier sind ja nur Profis die nie munter falsch und mit falschen Komponenten mixen würden.....
Joachim B. schrieb: > OK und nur weil Bauteile falsch eingesetzt werden ist mein Schrieb lange > noch nicht falsch. Habe ich auch nicht behauptet. > Ach ne hier sind ja nur Profis die nie munter falsch und mit falschen > Komponenten mixen würden..... Falsch ist und bleibt immer falsch. 3V3 mit 5V ist, solange es um logische Zustände geht, nicht falsch und funktioniert fast immer. 3V ist schon kritisch und meistens falsch. 3V - 10% ist von vornherein falsch.
:
Bearbeitet durch User
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.