mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Treiber für mehr SPI-Reichweite


Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich habe vor einer Woche angefangen als Elektronik-Entwickler und habe 
noch überhaupt kein Wissen (geschweige denn Erfahrung) zur Anwendung von 
Bustreibern/Leitungstreibern. Ich muss Lösung dazu finden, wie man 
mehrere Slaves über SPI über längere Entfernungen ( bis 10 m ) betreibt.

Nachdem ich mir hier schon einige Threads zu diesem Thema gelesen habe, 
weiß ich, dass SPI eigentlich zur Kommunikation innerhalb einer Platine 
(oder eines Gerätes) gedacht ist, aber dass es mit etwas Wissen und 
zusätzlichem Aufwand (geeignete Kabel, Terminierung, Leitungstreiber) 
möglich ist, höhere SPI-Reichweite zu erreichen.

Ich habe mich noch nie mit Treibern beschäftigt und weiß nicht wie sie 
eingesetzt werden. Ich habe einige Dattenblätter angeschaut und keine 
genauen Beschreibungen dazu gefunden, wie sie eingesetzt werden. Eine 
Beispielschaltung wäre für mich sehr hilfreich. Euch wird meine Frage 
vielleicht wundern, aber ich habe mich eben noch nie damit beschäftigt. 
Vielleicht kennt jemand eine Seite, wo es ausführliche Erklärung dazu 
gibt?

Welche Treiber sind für SPI empfehlenswert? Gibt es vielleicht speziell 
dafür irgendetwas, so wie es für I2C den Bus Extender gibt? Kann man die 
Signale für die Übertragung differentiell machen?

Ist es überhaupt OK,  bei professionellen Anwendungen Kommunikation 
zwischen länger voneinander entfernten Modulen über SPI vorzunehmen oder 
würdet ihr unbedingt so etwas wie RS485 (wie in einem Thread hier 
empfohlen) nehmen.

Ich danke für jeden Hinweis!!!

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht jeweils ein 26LS31 und 26LS32. Als Kabel könnte man normales 
Ethernet Kabel her nehmen.

Es kommt auch auf die verwendete Übertragungsfrequenz an.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst die SPI Signale auch über RS485 Treiber übertragen.

Autor: Bogumil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst vom Prinzip her alles nehmen, das ist ein Vorteil von SPI, 
auch Optokoppler usw. sind dem Bus egal.

Bei I²C brauchst du spezielle Bausteine da 2 Richtungen auf einer 
Leitung.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> über längere Entfernungen ( bis 10 m )
> bei professionellen Anwendungen Kommunikation zwischen länger
> voneinander entfernten Modulen

wäre meiner Meinung nach RS485 oder CAN geeigneter.

Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke euch allen für die schnellen und nützlichen Antworten!!

@Gast

zu RS485:
RS485 ist interessant, da man sich die Slave-Select leitungen sparen 
kann. Aber soviel ich aus einem früheren Thread zu ähnlichem Thema hier 
(I2C Buslaenge ueber 5m?) mitgekriegt habe muss man sich bei RS485 um 
das Protokoll (Adressierung der Slaves, Richtung der Datenübertragung, 
Vermeiden von Kollisionen) selbst kümmern und es ist bei wenigen (z.B. 
4) Teilnehmern relativ unkompliziert. Wie hoch ist der Aufwand, wenn 
z.B. 10 oder mehr Teilnehmer am Bus hängen?

zu CAN:

ein Kollege von mir hat gemeint, dass die Verwendung von CAN 
lizenzpflichtig ist? Ist es so? Muss eine Firma Lizenzen haben, wenn sie 
in den entwickelten Geräten/Anlagen CAN-Bus einsetzt? Ich habe auch von 
CAN-Open was gehört? Was ist das?

Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, jetzt weiß ich, CANOpen baut auf CAN auf und ist in der 
Automatisierungstechnik verbreitet. Also nicht so eine Art freie Version 
von CAN, was man dem Namen nach vermuten könnte.

Aber ist CAN lizenzpflichtig? Das würde ich gerne wissen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber ist CAN lizenzpflichtig?
Wenn du CAN-Bausteine herstellst, oder einen CAN-Core auf einem FPGA 
implementierst, dann zahlst du Lizenzen an Bosch.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein wichtiger Unterschied zwischen RS485 und CAN ist, dass CAN 
Multimasterfähig ist und RS485 nicht. Da du nur Slave anhängen willst, 
wäre also RS485 für dich eine Lösung. Max.Anzahl der Teilnehmer bei 
RS485 in der Regel 32.
Hier ist der RS485 Bus gut erklärt:
http://www.wiki.elektronik-projekt.de/mikrocontrol...

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Witali

Du hast nicht richtig gelesen. Ich hab dir empfohlen lediglich die 
pysikalische RS485 Übertragungstechnik zu verwenden und darüber dein SPI 
zu übertragen. Den SPI Signalen ist es egal wie sie von a nach b kommen. 
Nachteil ist lediglich, dass du relativ viele Leitungen benötigst.
Du musst natürlich dafür sorgen, dass keine 2 Teilnehmer gleichzeitig 
senden.

Muss es denn SPI sein? Wenn du frei wählen kannst ist CAN natürlich 
generell sehr konfortabel aber kann etwas Kopf zerbrechen bei der 
Inbetriebnahme verursachen.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei man im Zusammenhang mit den unidirektionalen Punkt zu Punkt 
Signalen von SPI wohl eher von RS422 sprechen kann. Unter RS485 versteht 
man auch auf physikalischer Ebene meist einen Bus, oft sogar 
bidirektional.

Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@gast

Oh, das war ein Missverständnis! Deine Antwort habe ich schon richtig 
verstanden, dass du RS485 nur als Treiber-Baustein für SPI-Bus empfohlen 
hast. Es gibt in diesem Thread aber noch einen Gast (großgeschrieben, 
dein Nik ist ja kleingeschrieben "gast")! Meine Frage zu RS485 als 
Bussystem war an Gast (großgeschrieben) gerichtet.

Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ A. K.

Hm... SPI ist doch genau so ein Bussystem, und keine Punk zu Punkt 
Verbindung. Es gibt doch aus diesem Grund auch die SlaveSelect-Eingänge, 
um zu wählen welcher der vielen Bus-Teilnehmer angesprochen wird. Oder 
verstehe ich etwas falsch?

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er wird aber mindestens zwei RS322-Bus treiber benötigen. Denn minimal 
hat er drei Leitungen (SDA, SDI, CLK), eher vier (+CS).

Da immer ein Sender und ein Empfänger in solch einen Treiber IC drin 
ist, braucht er auf der Master Seite drei solcher ICs um seine drei 
Sender zu bilden (SDA, CLK und CS) und einen Empfänger-Teil von diesen 
drei ICs um SDI zu verarbeiten.

Auf der Slave Seite das gleiche umgekehrt.

Also pro Baugruppe drei Bus-Treiber.

Mit den LS31 und 32 benötigte man pro Baugruppe zwei ICs.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Witali schrieb:

> Hm... SPI ist doch genau so ein Bussystem, und keine Punk zu Punkt
> Verbindung. Es gibt doch aus diesem Grund auch die SlaveSelect-Eingänge,
> um zu wählen welcher der vielen Bus-Teilnehmer angesprochen wird. Oder
> verstehe ich etwas falsch?

SPI kann beides sein. Punkt zu Punkt und Stern (logisch gesehen). Aber 
du hast Recht, ich hatte das "mehrere Slaves" überlesen. Für logische 
Sterne grösserer Distanz ist SPI aber nicht ideal, schon der Anzahl 
Leitungen wegen.

Autor: Bogumil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SPI kann man auch ohne weiteres Multislavefähig machen indem man ein 
mehrfaches der Registerbitbreite bis zum letzten Slave durchschiebt. 
Einfacher geht es wohl nur noch mit Onewire.

Vor- und Nachteile sind Applikationsabhängig.

Autor: Bogumil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lupin,

für Slaves braucht du nur 2. Daten raus und Takt. Die Adressierung 
kannst du auf der Masterseite mittels Treiber Enable machen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.