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
In dieser Dimension ist I2C durchaus einsetzbar. Wird bei 100Kbps erst ab einigen Metern kritisch.
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?
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.
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?
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.
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
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
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.
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
Das Problem in SPI besteht darin, dass für jeden weiteren Teilnehmer eine Select-Leitung erforderlich ist. Das durchschleifen erachte ich als zu langsam.
Zum SPI : "Das Durchschleifen erachte ich als zu langsam" Ist aber sicher so schnell wie ein RS232.
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
"Das durchschleifen erachte ich als zu langsam." da war ich wohl zu langsam^^
@ 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?
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
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?
"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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.