Ja aber sicher! Ist doch absolut identisch mit I2C. Das geht über die TWI-Register.
Druckbare Version
Ja aber sicher! Ist doch absolut identisch mit I2C. Das geht über die TWI-Register.
Cool!
Warum versuche ich eigentlich schon seit Monaten ein I2C-Protokoll zu programmieren? ;o)
Danke für diesen Hinweis! :o)
Moment, was ist jetzt hier was?
SPI, TWI, I2c?
Wie spricht man die Busse denn an?
Print?
MFG Moritz
SPI verwendet die selbe Schnittstelle wie ISP. Braucht 4 Leitungen (MOSI, MISO, SCK, SS). Ist auch hardwaremäßig in den AVRs vorhanden - kann also ohne gropße Performanceverluste verwendet werden.
I2C und TWI ist DAS SELBE Bussystem. Phillips hat I2C entwickelt - Atmel darf aus Lizenzrechtlichen Gründen I2C (Inter IC Connection) nicht verwenden. Also nennen sie es einfach TWI (Two Wire Interface). TWI/I2C benötigt nur zwei Leitungen.
Im Prinzip ist es egal, welche man verwendet. SPI sollte etwas höhere Datenraten erlauben und außerdem dürfen hier die Längen der Verbindungen etwas größer sein. I2C ist eigentlich nur für die Verbindung von Chips auf der selben Platine gedacht - die Leitungslängen sollten recht kurz sein (einige 10 cm) - je nach Busgeschwindigkeit.
Für beide Bussysteme gibt es Chips, die sich darüber ansteuern lassen. SPI hat den Nachteil, dass jedes Gerät über eine extra Leitung angeschlossen werden muss, d.h., 4 Leitungen bruachst du für einen Slave - für jeden weiteren Slave brauchst du eine weitere Leitung (Enableleitung). Dahingegen wird über I2C ein Slave nur über seine Adresse angesprochen. Dh. der Bus kommt mit nur 2 Leitungen aus, egal wieviele Slaves.
Viele Grüße
Flite
Ich denke das ist ein weit verbreitetes Gerücht. Ich habe nun schon mehrfach gelesen das offiziell 3m zugelassen sind.Zitat:
I2C ist eigentlich nur für die Verbindung von Chips auf der selben Platine gedacht - die Leitungslängen sollten recht kurz sein (einige 10 cm) - je nach Busgeschwindigkeit.
Offiziell ist die Länge des I2C Bus bestimmt nicht in einer Meterangabe bestimmt. Laut Spezifikationen darf das SCL und das SDA System maximal eine Kapazität von 400pF haben. Zu dieser Kapazität zählen die Kapazitäten der Anschlusspins, sowie die Leitungskapazität. D.h. die zulässige Länge ist abhängig von der Anzahl der Busteilnehmer, von deren Pinkapazität (also auch vom Package) und vom verwendeten Kabel/Leitungsführung auf der Platine. Das das ganze mit 3 Meter Länge noch funktioniert ist durchaus möglich. Darunter leidet dann aber evtl die 'Datensicherheit'. Es kommt auch immer darauf an, in was für einer Umgebung man das Gerät betrieben möchte. In Industriehallen mit großen Maschinen fängt man sich über ein langes Kabel viel mehr Störungen ein, als über ein kurzes. Tatsache ist, dass es dafür gedacht war, um mehrere Chips in einem System zu verbinden (z.B. Videorecorder, ...). Es sollte nicht dazu dienen, Daten über größere Entferungen zu übertragen. Dafür gibt es andere Bussysteme vie RS485, CAN, LIN, ...
Ach ja: noch ein Vorteil von I2C: Im Gegensatz zu SPI kann man mit I2C einen Multimaster Bus realisieren.
Viele Grüße
Flite
Hi Flite,
du hast sicher Recht das der I2C-Bus eigentlich zur Kommunikation innerhalb eines Gerätes entworfen wurde und die Kabellänge nicht so sehr lang werden sollte.
Aber ich denke man sollte die User nicht mit der Angabe "20 cm" verschrecken. Diese Angabe wird nirgends offiziell so genannt, zumindest hab ich das nirgends in den Datenblättern gefunden.
Ich habe auch schon mehrfach von 3m gelesen, sogar schon von 20 Metern (was mir dann doch etwas viel erscheint).
Nach meinen Erfahrungen sind kurze Kabellängen von unter 1m selbst bei höheren Datenraten völlig problemlos, sogar ein Handy in der Nähe sollte da kaum ein problem darstellen. Ich habe auch schon ein ganzes Zimmer per I2C-verkabelt, waren sicher zwei mal 7m Kabel. Auch da gab es nicht die geringsten Probleme.
Aber wie du schon sagst, es kommt auch auf die Geschwindigkeit der Datenübertragung und die Störquellen an. Natürlich auch auf das Kabel, bei meiner Zimmerverdrahtung war es normales Telefonkabel.
Mit SPI hab ich nicht so viel Erfahrung. Etwas unverständlich ist mir, warum SPI bei der Programmübertragung (per ISP) oft so störanfällig ist. Kannst du dir das erklären?
Hallo Frank,
du hast schon recht. Wie gesagt. Philips spezifiziert weder 20cm noch 3m. Es kommt eben auf die oben genannten Parameter an. Ich selbst habe auch einige Schaltungen bei mir laufen, die über normale Flachbandkabel auch mit I2C über mehrere Meter funktionieren.
Ich wollte nur 'Gast' erklären, dass es sich bei den wenigen 10cm. nicht um ein Gerücht handelt, sondern dass es von einigen Faktoren abhängig ist. Funktionieren tut es meistens schon und wenn dann doch mal wegen einer Störung das Teil ausfällt, dürfte es bei einem Roboter ja keine so schlimmen Folgen haben. Bei kommerziellen Geräten oder sogar medizinischen Geräten muss man hierauf schon etwas mehr achten, aber das hat hier ja wohl keiner vor ;-)
Die Fehleranfälligkeit von ISP kann ich mir auch nicht wirklich erklären. Ich hatte das selbe Problem mit dem STK500. Alle 10 Programmierversuche ist einer fehlgeschlagen. Anscheinend kann man die Geschwindigkeit der Programmierung über das neue AVR Studio einstellen. Wenn man hier eine langsamere wählt funktioniert es anscheindend einwandfrei.
Ich selbst programmiere meine AVRs mit einem Parallel ISP mit HCT. Das ging bei mir bisher einwandfrei. Da hatte ich noch keine Probleme.
Viele Grüße
Flite
Also um mehrere Avr´s zu verbinden, mit einem Master, ist denke ich SPI das beste/einfachste. Braucht zwar mehr Pins wie I2C, es ist aber um einiges einfacher einen Avr als SPI slave zu programmieren als mit I2C. Sprech da aus erfahrung denn ich hab bis jetzt nichts Vernünftiges im Netz über Microcontroller als I2C Slave gefunden, geschweige denn Codebeispiele für Basic oder C.
Erklärung zu SPI und bisschen Code für avr-gcc gibts bei
www.mc-project.de .
Gruß Muraad
Zum Hardware-I2C: Gibts da fertige(und dokumentierte) Routinen für AVR-GCC, die man irgendwo 'runterladen kann?