PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : i²C Bus. 15 Slaves in Reihe, 1,5m Abstand



curby23523
05.04.2013, 18:52
Hallo,

ich habe durch Steckmontage eine große Platine vor mir, welche 1,5 in der Länge misst. Auf ihr sind 15 Bausteine in gleichen Abständen verteilt, die miteinander über wenige Bytes kommunizieren ( Atmega8 ). Meine Fragen lauten:

-Wohin gehören die Widerstände für die Busleitung? Am Anfang, Mitte oder ende der Leitung?
-Welche Maßnahmen sollten bei 1,5m Leitungslänge getroffen werden, damit die Signalübertragung zuverlässig funktioniert?
-Ist es notwendig/angebracht, jeden Slave mit einem Treiber zu versehen?

Im Grunde arbeiten alle Megas als Sensoren und wenn einer etwas gemessen hat, wird es an den zentralen Mega am Ende der Kette geschickt.

mfg,
Nils

BMS
05.04.2013, 20:05
Hallo,
der I2C-Bus ist eigentlich nicht für solche Entfernungen gedacht.
Das Problem sind die Pullup-Widerstände in Kombination mit den parasitären Kapazitäten.
Diese RC-Kombination ist ein Tiefpass und wird deine Übertragungsgeschwindigkeit begrenzen.
Den Pullup kann man leider auch nicht zu niederohmig machen, bei 3mA ist Schluss.
Auch stelle ich mir einen Multimastermode nicht einfach vor.
Versuchen kannst du es, musst aber wohl mit einer niedrigen SCL-Frequenz zurecht kommen :-k
Grüße, Bernhard

curby23523
05.04.2013, 20:12
Welcher Bus würde sich denn stattdessen eignen? SPI ist auch nicht für lange Leitungen ausgelegt? Can?

Stone
05.04.2013, 20:47
Also mit CAN kannst du nichts falsch machen, dass ist für den Industriellen Einsatz entwickelt, auch über größere Strecken und sehr hoher Störsicherheit.
Ist natürlich teuer als I²C das kann jeder 2€ µC und die Ansteuerung ist auch etwas komplexer
Kommt drauf an wie weit du mit deiner Entwicklung bist.
Es gibt auch Leute die ihr Hausbussystem mit I²C steuern, also so kritisch sind die 1.5m nun auch nicht. Wenn du mim Speed runter gehst sollte es deutlich störsicherer sein. Auf jeden Fall auf die Leiterbahrführung achten. Kannst ja auch Fehlererkennung in die Software einbauen (Hamming-Code, CRC, ...).
Widerstände gehören an den Master, da der immer da sein wird.


Gruß Matthias

curby23523
05.04.2013, 21:01
Ich habe die Platine fertig geroutet (ist kaskadierbar, 15 mal in Reihe). Derzeit hängt alles über SPI in einem Ring. I²C der Mega8s sind belegt da, alle 6 ADCs verwendet werden. Also muss jetzt eine Möglichkeit gefunden werden, dass jeder der 15 Mega8 sobald er zu sendende Daten hat, diese an ein Zentrum schicken kann - ein weitere µC oder einer bereits verwendeten. Empfangen sollte er auch können. Ich könnte das ganze mit Mega16 neu aufbauen, dort wäre I²C verfügbar.

Es ist keine hochfrequente Anwendung 100khz würde auch reichen.

Den SPI-Ring habe ich mit Treiber vor jedem Baustein versehen. 15*8ns Verzögerungszeit der Treiber = 105ns. Bei 1Mhz wäre dies ja noch in Ordnung, wenn eine Flanke 500ns anliegt.

021aet04
06.04.2013, 09:42
Ich weiß zwar nicht was du vorhast und ob das Auslesen über Interrupt laufen muss, du könntest aber einen PCF8574 verwenden (falls am Master I2C frei ist bzw du Soft I2C verwenden kannst). Dieser hat einen Int Ausgang, somit kannst du dem Master signalisieren das an einem Slave Daten anliegen. Wenn du jetzt einen Int bekommen hast ließt du den PCF8574 aus und weißt somit welcher Slave neue Daten hat. Den kann man dann gezielt auslesen. Da der PCF8574 nur 8 I/Os hat brauchst du 2 PCF8574 (oder es gibt einen der mehrere Eingänge hat).

Ansonsten kannst du zyklisch die Slaves auslesen.

MfG Hannes

curby23523
06.04.2013, 10:45
11 µC mit jeweils 8 Sensoren um Tasten vom Klavier abzunehmen (Position, gedrückt oder nicht gedrückt, Lautstärke). Sobald eine Taste als gedrückt erkannt wird, soll der entsprechende µC Information an einen zentralen µC gesendet werden (sprich Multimaster). Da bietet sich meiner Meinung nach I²C vom Protokoll geradezu an. PCF8574 macht die ganze Sache nur noch komplizierter. Ständig alle µC zu pollen (wie bei SPI z.b.) verbraucht nur unnötig Ressourcen und wäre vom Timing wohl zu ungenau (Tastendruck - Pause - Information wird abgefragt. Man kann ja schon 1ms Latenz hören.).

Wenn ich die ganze Sache mit 100khz betreibe brauchen 3 Byte ohen Kontrollbits 24µS. Ich muss nur die elektronische Funktionalität gewährleisten.

021aet04
06.04.2013, 10:59
Da wird wie du schreibst ein Multimaster System besser geeignet sein, da kann ich dir aber nicht helfen. Du kannst versuchen so den Aufbau machen oder mit einem I2C Busextender (http://www.nxp.com/documents/data_sheet/P82B715.pdf) arbeiten.

MfG Hannes