Ich überlege mir ein Projekt, bei dem mehrere AVRs über einen Bus miteinander sprechen müssten. Sie würden durch so viel wie 6 Fuß getrennt sein.
Es scheint, dass sowohl I2C als auch SPI eine Reihe von Mikros über einen Bus kommunizieren lassen können, aber ich habe nichts darüber gesehen, wie lange das dauern würde. Hat jemand versucht, diese Protokolle über Entfernungen von mehreren Fuß zu verbinden?
avr
spi
i2c
digital-communications
edebill
quelle
quelle
Antworten:
Wie bereits erwähnt, können SPI und I2C über große Entfernungen verwendet werden, solange Pull-up-Widerstände, Taktfrequenzen usw. vorhanden sind.
Die Hauptalternativen (die eine bessere Störfestigkeit ergeben) sind RS485 und CAN . Beide verwenden differentielle Leitungen, um Rauschprobleme zu minimieren, und sind für diese Datenübertragungslänge besser geeignet als I2C oder SPI. Ich glaube jedoch nicht, dass viele (irgendwelche?) AVRs mit eingebauten CAN-Peripheriegeräten ausgestattet sind, die die Verwendung von CAN erheblich vereinfachen.
Ich würde sagen, das Wichtigste, was Sie bei der Auswahl eines Busses berücksichtigen müssen, ist, sicherzustellen, dass das Protokoll, das Sie für die Kommunikation zwischen Geräten verwenden, eine CRC oder ein Äquivalent enthält, damit Sie feststellen können, ob eine Nachricht korrekt empfangen wurde (CAN hat dies als Teil von das Paket). In Anbetracht dessen ist es auch nützlich, eine Antwort vom Typ ACK / NACK als Teil des Protokolls zu haben, damit eine beschädigte Nachricht erneut übertragen werden kann.
quelle
Mehrere Füße sollten nicht problematisch sein, verwenden Sie nur verdrillte Drähte, wenn Sie können. SPI ist viel einfacher zu puffern (wenn nötig) als I2C, da alle SPI-Signale unidirektional sind, während sich die I2C-Signale auf gemeinsam genutzten Leitungen befinden.
Können die AVR-Mikrocontroller sowohl I2C- und SPI-Slave-Modi als auch Master-Modi verarbeiten? (du würdest beides brauchen)
quelle
Für I2C über große Entfernungen möchten Sie möglicherweise einige "I2C-Bus-Repeater" -Lösungen suchen. Beachten Sie, dass sich die maximale Entfernung, die Sie möglicherweise für die I2C- oder SPI-Kommunikation finden, hauptsächlich auf die Gesamtbusentfernung und nicht auf die Entfernung zwischen zwei Knoten in einem Bus bezieht.
Vielleicht möchten Sie nach RS485 suchen, um diese Probleme zu beheben. Es handelt sich um ein serielles Busprotokoll, das über differentielle Leitungen kommuniziert, sodass bei Verwendung von verdrillten Kabeln das Risiko von Rauschen minimiert wird. Auf diese Weise können sehr große Entfernungen erreicht werden. Der Nachteil wäre, dass Sie einen zusätzlichen RS485-Encoder-IC (wie einen MAX485, nicht sehr teuer) in Ihrer Schaltung benötigen würden.
quelle
Ein noch nicht erwähnter Vorteil von SPI gegenüber I2C ist, dass alle SPI-Drähte unidirektional sind und immer hoch oder niedrig angesteuert werden. Dies ermöglicht eine viel schnellere Kommunikation als mit I2C, verringert die Störanfälligkeit und ermöglicht die Verwendung einfacher Gates als Repeater. Eine weitere nützliche Option ist die einfache asynchrone Kommunikation (ein Draht pro Richtung). Der einzige Nachteil, den ich bei der asynchronen Kommunikation feststellen kann, ist, dass im Allgemeinen beide Seiten mit einer stabilen Uhr "wach" sein müssen, um Daten austauschen zu können.
Für ein eigenes Projekt habe ich ein leicht modifiziertes 3-Draht-SPI-Protokoll verwendet und die Ergebnisse als zufriedenstellend befunden. Ich sende Anzeigebitmapdaten (bei denen gelegentliche Datenverfälschungen keine große Rolle spielen würden) problemlos mit 10 MBit / s und andere Daten mit 2,5 MBit / s.
quelle
Während sowohl I2C als auch SPI für kurze Strecken (einige Zoll) ausgelegt sind, können beide auf längeren Strecken mit geeignetem Kabel und unter Berücksichtigung der Gesamtbuskapazität verwendet werden.
Obwohl ich wenig Erfahrung mit SPI habe, ist I2C nicht besonders schwierig, da Sie immer die richtige Größe für Ihren Pull-up-Widerstand berechnen müssen. Darüber hinaus gibt es dedizierte und kostengünstige I2C-Puffer, die recht einfach zu verwenden sind. Sie müssen jedoch immer noch einen Pull-up-Widerstand mit der richtigen Größe für Ihr Netzwerk verwenden.
Ich habe I2C verwendet, um zwei AVRs in einem Abstand von 8 Fuß miteinander zu vernetzen, wobei ich nur Pull-up-Widerstände und ein hochwertiges, gut abgeschirmtes, verdrilltes Kabel verwendet habe.
quelle
Wie viele vorgeschlagen haben, eignen sich I2C und SPI am besten für kurze Entfernungen. Es ist zwar möglich, eine Lösung mit diesen Schnittstellen zu implementieren, ich würde jedoch dringend empfehlen, dass Sie nach einer anderen, "standardisierteren" Lösung suchen (z. B. Ethernet, RS485, CAN usw.). - Vor allem, wenn Sie Kabel verwenden möchten, um den 6-Fuß-Abstand zwischen den Mikrocontrollern zu erreichen.
quelle
Die Schnittstelle zwischen der kabellosen Nintendo Wii-Fernbedienung und ihrem Nunchuck-Begleiter verwendet I2C über ein Kabel, das etwa einen Meter lang ist. Es gibt auch 3-Fuß-Verlängerungskabel, die die Gesamtlänge auf ca. 6 Fuß verlängern. Nicht genau das gleiche wie Ihr Setup (nur zwei Geräte sind miteinander verbunden), aber es ist ein Beispiel für I2C über ein Kabel in einem weit verbreiteten Verbraucherprodukt.
quelle
Ich habe an einem Projekt mit etwa 80 AVR-basierten Knoten in einem Sternnetzwerk gearbeitet, das über I2C kommuniziert. Es war ein totales Durcheinander und hat am Ende nicht funktioniert. Das Abrufen von Updates für alle Knoten dauerte Sekunden, und eine fehlerhafte Verbindung löste das gesamte Netzwerk aus. Zuletzt habe ich mit dem Typ gesprochen, der die Knoten erstellt hat. Er sagte, er habe die Verwendung von I2C für Projekte wie dieses eingestellt. Leider weiß ich nicht, warum gerade I2C hier unzureichend war.
quelle
Mit diesen kurzen Strecken sollte es einfach sein. Was Sie tun könnten, ist herauszufinden, was diese Abstände und Ihre Verkabelung in Bezug auf Kapazität und Leitungsimpedanz bedeuten, und zu sehen, welche Arten von Frequenzen (Anstiegs- / Abfallzeiten) Sie durch sie hindurch bekommen können. Über einen bestimmten Punkt hinaus ist es am besten, sie als Übertragungsleitungen zu behandeln. Wenn es schlecht aussieht, können Sie in der Tat auf eine andere serielle Leitung wie EIA-232 oder 422 umsteigen. Dies kann bedeuten, dass an beiden Enden ein zusätzlicher Chip vorhanden ist, der sich jedoch weit ausdehnt. Wenn Sie wirklich schnell und weit gehen müssen, brauchen Sie etwas mehr (Ethernet, ohne Radio oder Laser :).
quelle
Wenn Sie die Taktrate steuern können und keine Hochgeschwindigkeitsdatenübertragung benötigen, sollten Sie versuchen, die Taktrate zu verlangsamen. Dies macht es weniger anfällig für Rauschen.
quelle