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!
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.
@ 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
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
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
> sondern eine größere Geschwindigkeit
Dann bist bei I2C sowieso falsch.
Nimm lieber SPI für schnelle Sachen auch wenns mehr ports braucht
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
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.
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
>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.
Warum mehrere SPI Schnittstellen, warum Soft-Spi ? Dafür gibt es SlaveSelect. Bei 16Mhz , wäre 8Mhz SPI drin. Wenn das nicht reicht. GRuß
>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
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
>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"...
@ 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
> 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.
@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
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.
>Meine Mutter sagte immer "Vor Öffnen des Mundwerks: Gehirn einschalten."
Dann befolge auch ihren Rat.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.