Forum: Mikrocontroller und Digitale Elektronik I2C Bus - wesentlich ob Open Drain oder nicht?


von Benjamin A. (beni0664)


Lesenswert?

Hallo!

Ich hab mir hier einen uC rausgesucht, der 3 I2C Schnittstellen hat 
(brauch soviele, wenn nicht sogar 4 Stück) und habe folgende Frage:

Laut diesem Datenblatt ist nur ein I2C Anschluss in Open Drain 
ausgeführt, der Rest als normale Port Pins...

Ist das jetzt ausschlaggebend ob ich die 2 anderen I2C´s als Master 
verwenden kann???

http://www.nxp.com/acrobat_download/datasheets/LPC2361_62_1.pdf



mfg beni

PS:

Falls ihr mir noch einen anderen uC mit mehreren I2C Anbindungen 
empfehlen könnt, immer her mit den Vorschlägen, ich hab mich noch nicht 
festgelegt!

von Markus (Gast)


Lesenswert?

Bei I2C ist der DAT-Pin und der CLK-Pin immer Open-Drain. Geht nicht 
anders. Und es braucht immer Pull-Ups.

Die anderen I2C Anschlüsse am Port-Pin werden bei Konfiguration als I2C 
automatisch Open-Drain (bzw. müssen so parametriert werden, hab das 
Datenblatt nicht im Kopf).

Wenn der Slave langsamer ist als der Master, dann macht der Slave ein 
"Clock-Stretching", also zieht den Clk auf Low und der Master wartet bis 
der Slave den Clk wieder frei gibt und sendet dann das nächste Byte.

Daher müssen beide Open Collector sein.

Wer Master oder Slave ist hängt von der Programmierung ab.

von Falk B. (falk)


Lesenswert?

@ Benjamin A. (beni0664)

>Ich hab mir hier einen uC rausgesucht, der 3 I2C Schnittstellen hat
>(brauch soviele, wenn nicht sogar 4 Stück) und habe folgende Frage:

Dir ist schon klar, dass I2C ein Bus ist, und man eigentlich nur 
eine I2C-Schnittstelle braucht?
Auch bei Devices mit gleicher Adresse, die kann man problemlos hinter 
einer I2C MUX platzieren. PCA9545 ist dein Freund.

>Ist das jetzt ausschlaggebend ob ich die 2 anderen I2C´s als Master
>verwenden kann???

I2C braucht Open Drain. Punkt.

>Falls ihr mir noch einen anderen uC mit mehreren I2C Anbindungen
>empfehlen könnt, immer her mit den Vorschlägen, ich hab mich noch nicht
>festgelegt!

Siehe oben. Wenn man WIRKLICH mehrere I2C Schnittstellen braucht, kann 
man das einfach in Software nachbilden. Ist einefach und schnell und 
geht mit so ziemlich JEDEM uC.

MFG
Falk

von Stefan S. (energizer)


Lesenswert?

Eventuell kann ein I2C Hub helfen, z.B. der PCA9545. Leider schreibst Du 
nichts über den Grund, warum du mehrere I2C Schnittstellen brauchst.

Gruß
Stefan

von Benjamin A. (beni0664)


Lesenswert?

Also der Grund warum ich mehrer I2C Schnittstellen brauche ist, weil ich 
eine gewisse Modularität bei meinem Projekt brauche!

Konkret, es geht um eine LED Matrix Anzeigetafel und der 
Mastercontroller überträgt die Daten an die einzelnen Treiberstufen 
mittels I2C...

Und da könnte es passieren, wenn die Anzeigetafel zu groß wird, dass die 
Geschwindigkeit des Busses zu gering ist!

Deswegen bringt sich auch ein Mulitplexer nichts, da ich keinen größeren 
Adressraum brauche, sondern eine größere Geschwindigkeit!

mfg beni

von I2C (Gast)


Lesenswert?

> sondern eine größere Geschwindigkeit
Dann bist bei I2C sowieso falsch.

von asdf (Gast)


Lesenswert?

Nimm lieber SPI für schnelle Sachen auch wenns mehr ports braucht

von Benjamin A. (beni0664)


Lesenswert?

Was gibts sonst noch für Alternativen für I2C???

Wie schnell geht das mit SPI?


Das Problem ist nur, der erste Prototyp ist schon mit einem ATMega8 
fertig...



mfg beni

von Igor M. (bastel-wastel)


Lesenswert?

SPI kannst du auch mit 2 MHz laufen lassen - ordentliches Layout 
vorrausgesetzt. Kommt natürlich auch auf die Gegenstelle an - ob die die 
Datenrate abkann.

von Benjamin A. (beni0664)


Lesenswert?

Die Gegenstelle wär ein ATMega8 mit 8MHz (könnt ich auch bis 16MHz 
betreiben)...

Falls die Taktrate noch immer ausreichen sollte, gibts auch uC´s mit 
mehreren SPI-Schnittstellen? Wie leicht lässt sich SPI per Software 
nachbilden?

mfg beni

von Ja mann (Gast)


Lesenswert?

>Das Problem ist nur, der erste Prototyp ist schon mit einem ATMega8
>fertig...
So profan es klingen mag, aber da sollte man sich vorher informieren...

>Und da könnte es passieren, wenn die Anzeigetafel zu groß wird, dass die
>Geschwindigkeit des Busses zu gering ist!
Das klingt so als ob die Abstände "etwas" größer sind. I2C ist 
eigentlich für Kommunikation innerhalb einer Baugruppe (z.B. 
Leiterplatte) gedacht.
Wie wäre es mit RS485 ? Braucht nur 2 Pins für den Bus und jeweils 3 
Pins an den Controllern, Bitrate je nach Quarz an deinen µCs > 1 MBit.

von Jean P. (fubu1000)


Lesenswert?

Warum mehrere SPI Schnittstellen, warum Soft-Spi ?
Dafür gibt es SlaveSelect.
Bei 16Mhz , wäre 8Mhz SPI drin. Wenn das nicht reicht.

GRuß

von Matthias L. (Gast)


Lesenswert?

>Das Problem ist nur, der erste Prototyp ist schon mit einem ATMega8
>fertig...

Es ist immer wieder lustig zu erleben, wie ganze Prototypen fertig 
zusammengebaut da liegen ohne sich vorher über zu realisierenden 
Funktionen und deren Technik Gedanken zu machen..

Ts ts ts ts

von Benjamin A. (beni0664)


Lesenswert?

Ganz ohne Ausbaumöglichkeiten ist das ganze eh nicht...

Die SPI Pins, die I2C Schnittstelle und ein paar weiter Port Pins sind 
eh herausgeführt!

Das mit SPI ist eine gute Idee, 8 MHz SPI wären da drin?

Das wären ja eh 8Mbit/s?

Mit Slave Select wäre die Übertragungsgeschwindigkeit ja wieder 
geringer, also fällt das auch wieder weg...

mfg beni

von Matthias L. (Gast)


Lesenswert?

>Das wären ja eh 8Mbit/s?

Ja. bedenke aber, dass ein Byte bei dieser Geschwindigkeit und 16MHz 
Taktfrequenz 1µsek Übertragungszeit bedeutet! Somit hast du ACHT 
Assemblerbefehle Zeit! dieses Byte aus dem SPI-Datenregister zu holen 
und irgendwohinzuschaffen, einschließlich der Berechnung des 
"irgendwohin"...

von Falk B. (falk)


Lesenswert?

@ Benjamin A. (beni0664)

>Das mit SPI ist eine gute Idee, 8 MHz SPI wären da drin?

Bei 16 MHz Takt am Master. Die AVRs können aber nur max. 1/4 des 
Quarztaktes als Slave.

>Das wären ja eh 8Mbit/s?

Ja.

>Mit Slave Select wäre die Übertragungsgeschwindigkeit ja wieder
>geringer, also fällt das auch wieder weg...

Jaja, gerade noch mit I2C rumgurken und jetzt über zu langsames SPI 
meckern. Mann O Mann!

Meine Mutter sagte immer "Vor Öffnen des Mundwerks: Gehirn einschalten."

MFG
Falk

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Das wären ja eh 8Mbit/s?
Netto-Datenrate, wenn dauernd was übertragen werden würde/könnte.
Die Brutto-Datenrate liegt natürlich niedriger, ist aber immer noch 
höher als die läppischen 400kBps (Netto) vom I²C.

> Mit Slave Select wäre die Übertragungsgeschwindigkeit ja wieder
> geringer, also fällt das auch wieder weg...
Es lebe das Halbwissen. Aber wenigstens zeigt die Aussage deutliche 
Entschlussfreude.

Ein Slaveselect ist bei SPI die übliche Methode, einem Slave 
mitzuteilen, dass die Übertragung beginnt oder zu Ende ist. Natürlich 
gibt es SPI-Slaves, die auch ohne SS kommunizieren könnten, aber 
üblicherweise wird doch einer verwendet. Denn dann lassen sich am 
gleichen SPI-Bus recht viele Slaves anschliessen und mit SS der gerade 
aktive auswählen. Beim I²C-Bus geht die Auswahl des Slaves (Adresse) 
über den Bus und zwackt somit noch Übertragungsbandbreite ab.

Kurz, die Signale für den SPI sind SCLK, MOSI, MISO und ein oder mehrere 
SS. Für 1 Slave am SPI-Bus sind also 4 Leitungen nötig, für 2 Slaves 
dann 5 usw. Allgemein: Anzahl der benötigten Pins = 3 + Anzahl Slaves.

von Falk B. (falk)


Lesenswert?

@Lothar Miller (lkmiller)

>> Das wären ja eh 8Mbit/s?
>Netto-Datenrate, wenn dauernd was übertragen werden würde/könnte.

Das ist dann doch eher Brutto.
Oder hast du auch Dyskalkulie wie unsere Angie? ;-)

MFg
Falk

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Falk Brunner wrote:

> I2C braucht Open Drain. Punkt.

Jein.  Kann man in Software emulieren.  Schließlich gab es schon
I²C-Implementierungen, bevor es die entsprechenden Hardare in den
Controllern gab.

Der Algorithmus dort ist, dass man zugleich mit der Umschaltung des
Ausgangspegels den Ausgang selbst an- und abschaltet.  Also auf den
AVR bezogen: low ausgeben => PORTx.y auf low, DDRx.y auf high; high
ausgeben (OC) => DDRx.y auf low, PORTx.y auf high (damit ist gleich
noch für alle Fälle der interne Pullup aktiv).  Wenn man das mit dem
internen Pullup nicht braucht, genügt es, die Ausgabe des Pegels
einfach nur über DDRx.y zu steuern und PORTx.y ständig auf 0 zu
lassen.

von Gast (Gast)


Lesenswert?

>Meine Mutter sagte immer "Vor Öffnen des Mundwerks: Gehirn einschalten."

Dann befolge auch ihren Rat.

von R. M. (rmax)


Lesenswert?

Lothar Miller wrote:
> Allgemein: Anzahl der benötigten Pins = 3 + Anzahl Slaves.

Bei >2 Slaves und Pin-Knappheit am Master kann man auch einen externen 
1-aus-n-Dekoder verwenden (z.B. 74138), dann reichen 3+n Pins für n²-1 
Slaves.

Nebenbei verhindert das auch, daß versehentlich mehrere Slaves 
gleichzeitig angesprochen werden und es dadurch zu einem Kurzschluß auf 
der MISO-Leitung kommt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Falk Brunner wrote:
> @Lothar Miller (lkmiller)
>>> Das wären ja eh 8Mbit/s?
>> Netto-Datenrate, wenn dauernd was übertragen werden würde/könnte.
>
> Das ist dann doch eher Brutto.
> Oder hast du auch Dyskalkulie wie unsere Angie? ;-)

Schon gut zu wissen, dass es da überhaupt einen Unterschied gibt.
Sei's drum. Ich verwechsle auch noch ab und zu Rinks und Lechts ;-)

Das mit Nutto und Bretto ist übrigens auch mit ein Grund, warum ich 
niemals BWL studieren hätte können. Nicht mal die von meinen 
Mitstreitern so angesehene BWL-Vorlesung hab ich besucht, da habe ich 
mir doch lieber den Fuzzy-Regler angetan.  ;-)


> Als Nebeneffekt verhindert das auch, daß versehentlich mehrere
> Slaves gleichzeitig angesprochen werden.
Dann kann man aber genau das nicht als positiven Nebeneffekt nutzen, und 
z.B. gleiche Konfigurationsdaten gleichzeitig an alle betroffenen Slaves 
schicken. Der MISO darf dann natürlich nicht angeschlossen sein. Mann, 
was haben wir schon für Dinger gedreht... :-)

> dann reichen 3+n Pins für n²-1 Slaves
sind das dann nicht eher 2^n-1 Slaves?

von R. M. (rmax)


Lesenswert?

Lothar Miller wrote:

>> Als Nebeneffekt verhindert das auch, daß versehentlich mehrere
>> Slaves gleichzeitig angesprochen werden.
> Dann kann man aber genau das nicht als positiven Nebeneffekt nutzen, und
> z.B. gleiche Konfigurationsdaten gleichzeitig an alle betroffenen Slaves
> schicken.

Klar, man kann halt nicht alles auf einmal haben.

Eine weitere Variante wäre ein Schieberegister, das die Select-Leitungen 
der Slaves bedient und seinerseits als Slave am SPI hängt. Damit lassen 
sich mit 5-6 Pins im Prinzip beliebig viele Slaves in beliebigen 
Kombinationen ansprechen, halt auf Kosten der Geschwindigkeit, weil wie 
bei i2c immer zuerst die Slave-Adresse übertragen werden muß.

> Der MISO darf dann natürlich nicht angeschlossen sein.

Mit Entkopplungsdioden müßte sogar das zu schaffen sein.

>> dann reichen 3+n Pins für n²-1 Slaves
> sind das dann nicht eher 2^n-1 Slaves?

Ja, natürlich!
vordenkopfhau

Ich sollte nach einer kurzen Nacht und vor dem zweiten Kaffee besser 
noch nicht so komplizierten Formeln von mir geben. ;)

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.