Forum: Mikrocontroller und Digitale Elektronik Kabelwahl SPI über 10-15 m und offene Verständnisfragen


von Stefan L. (avlbger)


Lesenswert?

Hallo zusammen,

Habe nun schon einige Beiträge zu dem Thema gelesen und komme zum Schluß 
dass bei korrekter Terminierung (was wohl noch lustig wird...) bis zu 
20m möglich sein sollten. Allerdings habe ich noch einige durch die 
Suchfunktion unbeantworteten Fragen.

Oft wird auch davon geschrieben dass Flachbandkabel 
(GND/Clock/GND/Daten/GND..) das Mittel der Wahl sei.
Derzeit habe ich Netzwerkkabel verlegt(TwistedPair aber nur gemeinsame 
Schirmung also die Paare sind nicht eigens geschirmt), könnte allerdings 
noch ein 10pol Flachbandkabel dazulegen falls das tatsächlich viel 
besser wäre.
Was ist hier vorzuziehen?

Falls Netzwerkkabel, wie sollen die verdrillten Adern dann genutzt 
werden? Pro Paar einmal GND und Daten und dann beim nächsten Paar GND 
und Clock?

Zum Projekt:
Angesteuert wird ein 18m digitaler RGB-Strip an der Wohnzimmerdecke und 
in der Wohnwand über die Hardware SPI des Atmega32. Es geht um die 
Verbindungsleitung von AVR zum Beginn des RGB-Strips die ca. 10m lang 
sein wird. ( Geht nicht anders :( )
Es ist ja im Prinzip mißbrauchtes SPI da ja nur die Daten für die LED`s 
rausgetaktet werden.
Auch habe ich mehrere Teilstrecken die länger sind als für SPI gut ist 
(ohne Terminierung)
AVR->2m->Strip in Vitrine->3m->Strip in zweiter Vitrine->10m->Strip der 
Decke entlang

Wie ist das nun? Die LPD8806-Chips alle 2 LED's des RGB-Strips nehmen 
das Signal ja entgegen und senden es an den nächsten Chip weiter, 
funktionieren also quasi wie ein Repeater.

Für die Terminierung an sich bräuchte ich dann also eigentlich 3 mal 
eine Terminierung für jeden längeren Leitungsabschnitt, oder?

Würde ich theoretisch alle 30cm so einen Chip dazwischensetzen bräuchte 
ich dann gar keine Terminierung? (unschön aber Plan B ;) )

Echt ein Buch mit sieben Siegeln für mich... vielen Dank für hilfreiche 
Tips,
vg,
avlbger

von Frank K. (fchk)


Lesenswert?

Du kannst RS422/485-Treiber und -Empfänger verwenden. Die machen aus 
einem single-ended Signal (Signal,GND) ein differentielles 
(+Signal,-Signal), so dass Störungen von außen sich ausmitteln. Dafür 
ist Netzwerkkabel ideal, aber achte darauf, ein verdrilltes Adernpaar 
für ein differentielle Signal zu verwenden und nicht zwei Adern aus 
verschiedenen Paaren. Terminierung mit 100Ω am Ende.

So sind auch 100m möglich.

fchk

PS: Beispiele
RS-232 Sender:     26LS31
RS-232 Empfänger:  26LS32
Das sind uralte Bausteine, von verschiedenen Herstellern gefertigt und 
leicht zu bekommen. Es gibt natürlich auch moderneres.

von Stefan L. (avlbger)


Lesenswert?

Hallo fchk,

Vielen Dank für deine Antwort.
An die Umsetzung auf ein differentielles Signal habe ich auch schon 
gedacht bzw. darüber gelesen, aber ich scheue noch ein wenig den Aufwand 
da ich das im Prinzip ja dann für jede Teilstrecke machen müsste, also 
mindestens 3 mal von 5V/GND auf Differentiell von Differentiell wieder 
auf 5V/GND.

Was ich gelesen habe sind ja nicht bzw. erstmal nicht die "Störungen" 
von außen das Problem sondern eher die schnell ansteigenden Taktflanken 
und die Reflexionen derselben im Kabel.

Und von der Übertragungsgeschwindigkeit her haut eine Umsetzung 
(vorallem mehrfach) auf differentiell/singleended tadellos hin? Wenns 
klappt würde ich mit ca. 4 Mhz SPI-Takt ansteuern? Im Notfall halt 
weniger aber da ich ca. 600 LED`s einzeln anzusteuern habe wäre eine 
hohe Frequenz schon vorteilhaft vorallem wenn ich dann irgendwelche 
Lichtspielereien anstarte (die noch auszudenken sind ;) )

Und blöde Frage vermutlich.. aber Terminierung am Ende heißt praktisch 
am Eingang des RGB-Strips? Bzw. bei Umsetzung am Eingang des Umsetzers 
von differentiell auf singleended? Und dort dann zwischen die 
differentiellen Leitungen oder von jeder Leitung gegen GND?

Viele Grüße,
avlbger

von Thosch (Gast)


Lesenswert?

Stefan L. schrieb:
> Und blöde Frage vermutlich.. aber Terminierung am Ende heißt praktisch
> am Eingang des RGB-Strips? Bzw. bei Umsetzung am Eingang des Umsetzers
> von differentiell auf singleended? Und dort dann zwischen die
> differentiellen Leitungen oder von jeder Leitung gegen GND?

Bei Verwendung von RS-485 Transceivern am besten die Leitung an
beiden Enden terminieren, zumindest am Eingang des Receivers.
Und zwar differenziell mit dem Wellenwiderstand des Kabels.
Bei verdrillter Zweidrahtleitung (wie auch TP-Netzwerkstrippe)
ist das etwa 120Ohm.

Also je ein 120Ohm Widerling an beiden Enden der Leitung zwischen
beide Adern des Paares.

von Falk B. (falk)


Lesenswert?

@ Stefan L. (avlbger)

>Habe nun schon einige Beiträge zu dem Thema gelesen und komme zum Schluß
>dass bei korrekter Terminierung (was wohl noch lustig wird...) bis zu
>20m möglich sein sollten.

Ja, wenn gleich SPI dafür nicht optimal ist.

>Oft wird auch davon geschrieben dass Flachbandkabel
>(GND/Clock/GND/Daten/GND..) das Mittel der Wahl sei.

Ja, siehe Wellenwiderstand.

>Derzeit habe ich Netzwerkkabel verlegt(TwistedPair aber nur gemeinsame
>Schirmung also die Paare sind nicht eigens geschirmt),

Das reicht.

>könnte allerdings
>noch ein 10pol Flachbandkabel dazulegen falls das tatsächlich viel
>besser wäre.
>Was ist hier vorzuziehen?

Kommt auf die Anwendung an! Wenn unterwegs viel Abzweigungen sein sollen 
(LED-Matrix), ist Flchbandkabel besser, weil man einfach Stecker 
crimpen kann.

>Falls Netzwerkkabel, wie sollen die verdrillten Adern dann genutzt
>werden? Pro Paar einmal GND und Daten und dann beim nächsten Paar GND
>und Clock?

Ja.

>Angesteuert wird ein 18m digitaler RGB-Strip an der Wohnzimmerdecke und
>in der Wohnwand über die Hardware SPI des Atmega32. Es geht um die
>Verbindungsleitung von AVR zum Beginn des RGB-Strips die ca. 10m lang
>sein wird. ( Geht nicht anders :( )

Also nur ein Empfänger. Dann geht auch Netzwerkkabel.

>Auch habe ich mehrere Teilstrecken die länger sind als für SPI gut ist
>(ohne Terminierung)
>AVR->2m->Strip in Vitrine->3m->Strip in zweiter Vitrine->10m->Strip der
>Decke entlang

Das sind aber mehrere Empfänger! Was denn nun?

>Wie ist das nun? Die LPD8806-Chips alle 2 LED's des RGB-Strips nehmen
>das Signal ja entgegen und senden es an den nächsten Chip weiter,
>funktionieren also quasi wie ein Repeater.

Mach mal eine Skizze, sonst reden wir aneinander vorbei.

>Für die Terminierung an sich bräuchte ich dann also eigentlich 3 mal
>eine Terminierung für jeden längeren Leitungsabschnitt, oder?

Ja.

>Würde ich theoretisch alle 30cm so einen Chip dazwischensetzen bräuchte
>ich dann gar keine Terminierung? (unschön aber Plan B ;) )

Theoretisch ja, praktisch ist das Unsinn.

von Falk B. (falk)


Lesenswert?

@ Thosch (Gast)

>Bei Verwendung von RS-485 Transceivern am besten die Leitung an
>beiden Enden terminieren,

Nein, das ist nur bei bidirektionaler Übertragung nötig.

von Frank K. (fchk)


Lesenswert?

Stefan L. schrieb:
> Hallo fchk,
>
> Vielen Dank für deine Antwort.
> An die Umsetzung auf ein differentielles Signal habe ich auch schon
> gedacht bzw. darüber gelesen, aber ich scheue noch ein wenig den Aufwand
> da ich das im Prinzip ja dann für jede Teilstrecke machen müsste, also
> mindestens 3 mal von 5V/GND auf Differentiell von Differentiell wieder
> auf 5V/GND.

Ja und? Das ist ein SO08-IC am Eingang (ein ua9637) und ein SO08-IC am 
Ausgang (ein ua9638). Dazu jeweils ein Abblockkondensator pro Chip und 
jeweils 120Ω am Empfängerchip jeweils zwischen +Signal und -Signal.

> Und von der Übertragungsgeschwindigkeit her haut eine Umsetzung
> (vorallem mehrfach) auf differentiell/singleended tadellos hin? Wenns
> klappt würde ich mit ca. 4 Mhz SPI-Takt ansteuern?

Die ua9637/ua9638 können bis 15 MHz laut Datenblatt, das soll nicht das 
Problem sein. Und die mehrfache Umsetzung auch nicht - zwei 
Gatterlaufzeiten mehr oder weniger zwischen den Strips stören nicht, 
zumal sie ja Clock und Daten gleichermaßen betreffen.

> Und blöde Frage vermutlich.. aber Terminierung am Ende heißt praktisch
> am Eingang des RGB-Strips? Bzw. bei Umsetzung am Eingang des Umsetzers
> von differentiell auf singleended? Und dort dann zwischen die
> differentiellen Leitungen oder von jeder Leitung gegen GND?

wie oben gesagt immer am Empfänger, und dort zwischen den Signalpaaren.

ps: bei TI heißen die Teile ua...., bei National DS..... Werden seit 
mindestens 20 Jahren produziert.

fchk

von Stefan L. (avlbger)


Angehängte Dateien:

Lesenswert?

Habe jetzt mal eine Skizze beigefügt wie das in etwa vom Aufbau her 
ausschaut :)

Blau der Raum und die Wohnwandmöbel,
Rot die Position der digitalen RGB-Strips (etwa 18m durchgehend an der 
Decke und kleinere Abschnitte in den Vitrinen)
Schwarz die "Verbindung" zwischen den Strips bzw. dem Atmega32.
Die Verbindungsleitungen sind eben ca. 2m Flachbandkabel, dann zum 
nächsten Teil des RGB-Strips ca. 3m Flachbandkabel und von dort dann 
(als (1) bezeichnet) eine ca. 10m Strecke mit Netzwerkkabel.

Dass SPI für solche Entfernungen nicht das Mittel der Wahl ist ist klar, 
die RGB-Strips lassen sich aber leider eben nur so ansteuern. Im Grunde 
ist es ja

Ich denke ich werde heute mal mit "freifliegendem" 10m Netzwerk und 
Flachbandkabel und Serienterminierung experimentieren und sehen was 
dabei rauskommt. (Die Strips sind ja noch nicht eingebaut) Bauteile für 
eine differentielle Übertragung habe ich nicht, werde ich dann aber wohl 
bestellen wenn ich damit heute nicht weiterkomme.
Ist vermutlich sicherlich die zuverlässigste Lösung und ich will ja 
keine wilde gestörte flackernde Weihnachtsbeleuchtung sondern es sollte 
schon schlussendlich das machen  was ich will ;)

Vielen Dank für eure Tips

von Peter D. (peda)


Lesenswert?

Ich würde jedem Stripe einen kleinen MC vorsetzen. Dann kann man darauf 
Protokoll und Fehlerkorrektur laufen lassen.
So ein ATmega48-MU kostet nur 4*4mm² Platz.

Dumme Slaves an langem SPI machen nur Probleme. Die Frau quasselt am 
Handy oder saugt Staub und alle LEDs flackern wild.

von Stefan L. (avlbger)


Lesenswert?

Ja wäre natürlich auch eine Möglichkeit, allerdings muss ich mich auf 
Hobby-Lötbare Teile beschränken :) Falls das alles gar nicht hinhaut 
besteht noch die Überlegung die Strips in der Mitte zu teilen also über 
der Wohnwand quasi und dort dann die linke und rechte Seite jeweils mit 
einem MC anzusteuern. Würde zumindest die lange 10m Zuleitung einsparen 
aber halt die Ansteuerung aufwendiger machen. Vor allem wenn man einen 
Lichtpunkt laufen lassen möchte etc.. Werd da heute nochmal nachgrübeln 
:)

von Reinhard Kern (Gast)


Lesenswert?

Stefan L. schrieb:
> Wenns
> klappt würde ich mit ca. 4 Mhz SPI-Takt ansteuern?

20 m sind mehr als 100 ns Laufzeit Clk/Daten bis zum Kabelende 
(unkritisch weil für beides gleich), und dann nochmal für Miso zurück 
zum Master, das wird bei einer Clockperiode von 250 ns nicht klappen. 
Die Verzögerungen der ICs sind da noch garnicht dabei.

Gruss Reinhard

von Stefan L. (avlbger)


Lesenswert?

Hmm, gilt das nicht nur für eine zeitgleiche bidirektionale 
Kommunikation?
Ich verwende ja nur die Hardware-SPI um die Daten schnell rauszusenden, 
es gibt auf der anderen Seite ja kein SPI-Gerät welches darauf antwortet 
oder gleichzeitig Daten zurücksendet. Die andere Seite besteht ja aus 
dem Eingang des ersten LPD8806-Chips für die LED`s welches im Prinzip 
als riesiges Schieberegister gesehen werden kann.

Von dem her sollte die Laufzeit eigentlich nicht viel Rolle spielen, da 
ja wie erwähnt für Clock und Daten gleichermaßen gültig oder unterliege 
ich da schon wieder einem groben Denkfehler? :)

vg,
avlbger

von Falk B. (falk)


Lesenswert?

@ Stefan L. (avlbger)

>Hmm, gilt das nicht nur für eine zeitgleiche bidirektionale
>Kommunikation?

Ja.

>Von dem her sollte die Laufzeit eigentlich nicht viel Rolle spielen,

Richtig.

von Stefan L. (avlbger)


Lesenswert?

Hmm habe übers WE jetzt ein wenig experimentiert und festgestellt dass 
meine "Störungen" wohl überhaupt nicht von Reflexionen im Kabel oder 
Einstrahlungen der Umgebung kommen sondern durch einen Wackelkontakt bei 
einem der LPD8806-Chips ausgelöst wurden.
Nachdem mir auffiel dass erst ab einer bestimmten Stelle im RGB-Strip 
die Sache aus dem Ruder läuft konnte ich die Stelle lokalisieren und 
ausmerzen.

Somit habe ich jetzt einen funktionierenden Strip der mit 4Mhz SPI 
angesprochen wird Direkt (Test-Atmega8-MCU)-Ausgang->ca. 13m 
Netzwerkkabel->erster LPD8806-Chip

Scheint recht zuverlässig zu funktionieren, allerdings sollte es das 
eigentlich nicht, oder? Immerhin schreiben manche in Beiträgen dass SPI 
bis zu 37cm Kabel problemlos verträgt aber alles über 2m praktisch nicht 
funktioniert. Tut es eben doch, aber ich vermute mal dass es einfach 
daran liegt dass ich ja nur eine unidirektionale Kommunikation habe und 
der Atmega8 vielleicht keine soo schnellen Signalanstiegszeiten hat.

Meine bescheidenen Erklärungsversuche dazu.. naja da es erstmal 
funktioniert belasse ich es nun mal dabei und sehe was passiert wenn ich 
die LED`s in den Vitrinen noch dazuhänge..

Vielen Dank für eure Hilfe, mit den Infos in diesem Thread kann ich dann 
losstarten falls sich doch noch Probleme zeigen und ich mich doch noch 
der Terminierungsaufgabe stellen muss. (Bisherige Versuche haben nur 
eine verschlechterung bewirkt, lag vielleicht eben aber auch an dem 
"Wackelkontakt bei einem der RGB-Chips")

vg,
avlbger

von Reinhard Kern (Gast)


Lesenswert?

Stefan L. schrieb:
> aber ich vermute mal dass es einfach
> daran liegt dass ich ja nur eine unidirektionale Kommunikation habe

Ja, so könntest du deine LEDs noch auf dem Mars steuern - da kommen 
deine Signale zwar erst nach 20 min an, aber solange CLK und Daten 
zugleich eintreffen, gibt es kein Problem.

Gruss Reinhard

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.