Forum: Mikrocontroller und Digitale Elektronik BUS über mehrere Platinen


von Sebastian (Gast)


Lesenswert?

Hallo..

Ich suche ein BUS-System zur adressierten Übertragung von Daten.

Ich habe verschiedene Platinen, jede mit einem AVR darauf. Diese 
Platinen repräsentieren Module. Nun sollen diese über einen BUS 
miteinander verbunden werden, sodass das Master-Modul an verschiedene 
Module (jedes hat eine Adresse) Daten senden und von ihnen wieder 
empfangen kann.

Da das ganze Adressiert sein muss, fällt SPI aus. I2C, habe ich gehört, 
ist schlecht für Übertragung mit Kabeln, die Module können einige 
Zentimeter von einander entfernt liegen (10-20cm).
Bei drei oder vier Modulen ist dann der Abstand zwischen Master und dem 
letzten Modul des BUS vielleicht zu groß.

Gibt es andere BUS-Systeme die auf einem AVR problemlos implementierbar 
sind?

Mit freundlichen Grüßen,

Sebastian

von (prx) A. K. (prx)


Lesenswert?

In dieser Dimension ist I2C durchaus einsetzbar. Wird bei 100Kbps erst 
ab einigen Metern kritisch.

von Sebastian (Gast)


Lesenswert?

Ok, das hört sich doch gut an.
Wie sieht das denn aus mit EMV? Welche Verbindungen immt man da am 
besten? Das ganze sollte sehr unempfindlich gegenüber Störungen sein.

Danke für die schnelle Antwort.

Ach und nochwas
Gibt es soetwas wie eine Broadast-Adresse im I2C Protokoll?

von (prx) A. K. (prx)


Lesenswert?

Kommt auf die Störungen an. Wenn da wirklich ernsthaft was unterwegs 
ist, dann ist I2C unpassend und RS485 besser. Aber wenn die Störungen so 
schlimm sind, dass sich I2C auf 20cm leicht was einfängt, dann wirst du 
beim Platinenlayout wohl mehr als 2 Layer investieren müssen, denn die 
fangen sich sonst auch was ein. Ansonsten: Schirm drum und CRC rein.

von Sebastian (Gast)


Lesenswert?

Hmm, da ist die Frage, wie sicher das ganze sein muss.
Es würde halt in einem Schaltschrank laufen, ich weiß nicht wie hoch 
dort das Risiko ist.

Hat jemand mit sowetwas Erfahrungen?

von Chris (Gast)


Lesenswert?

Schau dir mal das SMB Protokolll an, ist vielleicht besser, automatische
Adressvergabe, automatischer Timeout usw. Ev könnte auch das LIN 
Protokoll
interessant sein, setzt sich immer mehr durch.

von Sebastian (Gast)


Lesenswert?

Hmm diese Protokolle sehen sehr kompliziert aus. Im endeffekt muss der 
Master wenn er den Befehl bekommt schnellstmöglich ein Byte an einen 
Slave senden. Die Datenmenge ist also extrem gering, wichtig ist nur die 
Geschwindigkeit.

Eine Broadcast Funktion wäre halt interessant, dass der Master 
selbsständig die Adressen von allen Slaves sammeln und listen kann.

Wenn das nicht möglich ist, muss das manuell geschehen, ist auch nicht 
weiter schlimm. Wäre ein schickes Feature.

Danke für die reichlich informativen Antworten,

Gruß, Sebastian

von Schrotty (Gast)


Lesenswert?

CAN?

von Rufus (Gast)


Lesenswert?

Hallo Sebastian,
versuch es mal mit dem CAN-Bus: der ist dafür optimiert, in sehr 
störbehafteten Umgebungen sicher zu arbeiten (u.a. Automobil-Bereich).
Die Hardware (Busverkabelung) ist einfach und unkritisch und Du kannst 
Deine gewünschten Entferunungn locker überbrücken.
Vielleicht gibt es ja AVRs mit CON-Baugruppe ON-Chip, ansonsten gibt es 
ein Menge einfacher und preiswerter externer CAN-Bausteine.
Mit CAN bist Du in vielen Fällen auf der sicheren Seite.

Gruß
Rufus

von ccc (Gast)


Lesenswert?

Weshalb faellt SPI raus ? Man kann das seriell, oder auch parallel 
realisieren. Beim Parallelen Ansatz wird der SCK, MSIO & MOSI auf alle 
Module parallel gefuehrt. die Selektrion geschieht mit dem CS, der nur 
das Aktive bekommt. Beim seriellen ansatz hat man alle schieberegister 
hintereinander, das MOSI des Einen geht auf den MISO des anderen, der CS 
ist fuer alle parallel. Dann werden die Daten durch alle 
hindurchgeschoben. und alle latchen aufs Mal.

von Stefan P. (form)


Lesenswert?

Wie wäre es mit RS-232 (TTL)?

Master TX -> Slaves RX
Master RX <- UND-Gatter <- Slaves TX


- einfach
- geringer Schaltungsaufwand
- schnell dank Interrupts


MfG
form

von ccc (Gast)


Lesenswert?

Nein. RS232 ist nur Punkt-Punkt. Aber RS422 ist Master-Slave

von Sebastian (Gast)


Lesenswert?

Das Problem in SPI besteht darin, dass für jeden weiteren Teilnehmer 
eine Select-Leitung erforderlich ist. Das durchschleifen erachte ich als 
zu langsam.

von ccc (Gast)


Lesenswert?

Zum SPI : "Das Durchschleifen erachte ich als zu langsam"

Ist aber sicher so schnell wie ein RS232.

von Sumynona (Gast)


Lesenswert?

RS232 (bzw. UART) kann man auch als Kette / Ring betreiben
Die Adressierung muss dann allerdings über separate pins oder über die 
Datenpakete erfolgen

Node 1 (TX) -> (RX) Node 2 (TX) -> Node 3 -> (RX) ...
... -> (RX) Node 1

von Sumynona (Gast)


Lesenswert?

"Das durchschleifen erachte ich als zu langsam."
da war ich wohl zu langsam^^

von Sebastian (Gast)


Lesenswert?

@  Sumynona:
Das heißt das auch hier jeder Teilnehmer das Paket weiterreichen muss? 
Das wäre ja dann in diesem Sinne keine BUS sondern eher eine 
Ringtopologie. Oder sehe ich das falsch?

von Sumynona (Gast)


Lesenswert?

ja richtig. ist aber neben dem I²C bus eine nette möglichkeit, mit 2 
Drähten seriell viele Teilnehmer anzusprechen.
Vielleicht wären aber rs422/rs485 besser geeignet in dem Fall (wenns 
schnell gehn soll), denn sonst müssen die daten in jedem controller 
durch den interrupt und ausgewertet werden, bevor es weiter geht

von Sebastian (Gast)


Lesenswert?

Hmm, denke ich auch.

Wie sähe das denn mit der Störsicherheit aus, bei direkten, aufgelötetn 
Steckverbindern zwischen den Platinen? Wäre I2C dafür robust genug?

von (prx) A. K. (prx)


Lesenswert?

"Robust genug" hängt immer von den konkreten Störungen ab. Wenn direkt 
daneben ein Lichtbogensender oder ein Schrottplatzmagnet sitzt, dann 
kannst du alles ausser LWL vergessen (aber sowas haut dir dann auch in 
die Leiterbahnen der Platine und ggf. sogar die Bonddrähte vom Chip 
rein).

In leidlich normaler Umgebung kannst du auf der Distanz einen I2C Frame 
mit CRC absichern und damit jedenfalls einigermassen sicherstellen, dass 
kein Schrott unerkannt rüberkommt.

Auf PC Mainboards, die ja nicht grad eine störarme Umgebung sind, zieht 
sich jedenfalls quer drüber ein SMBus, was nix anderes als eine 
I2C-Abart darstellt.

von Sebastian (Gast)


Lesenswert?

Alles klar, wenn das im PC ohne Probleme läuft, dürfte das auch für mein 
Einsatzgebiet reichen.

Ich denke, I2C hat gerade im Bereich AVR den super Vorteil, dass weder 
Treiber noch andere externe Hardware benötigt werden.
Aus diesem Grund würde ich aus der techn. Perspektive Betrachtet diese 
Spezifikation bevorzugen.

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.