Forum: Mikrocontroller und Digitale Elektronik SPI über 5m per RS422


von der-gt (Gast)


Lesenswert?

Hallo,
ich habe das Problem dass ich per SPI Bus Daten von einem AtMega8 als 
Master an einen 5 Meter entfernten AtMega16 als Slave senden möchte.

Es handelt sich dabei um ein Byte Daten welches zu unregelmässigen 
Zeitpunkten gesendet werden soll. Es sollen keine Daten vom Slave an den 
Master gesendet werden.

So leider klappt die 5 Meter Verbindung per SPI überhaupt nicht, während 
Kabellängen bis 1 Meter funktionieren.

Ich habe mir deshalb nach ein bisschen recherche folgende Lösung 
ausgedacht und umgesetzt:

AtMega 8 an AM 26LS31 CN (RS422 Treiber):
P.19 SCK an 2A
P.16 SS an 1A
P.17 MOSI an 3A
P.18 MISO an 4A

Dann AM 26LS32 CN (RS422 Empfänger) an AtMega 16:
1Y an SS P.5
2Y an SCK P.8
3Y an MOSI P.6
4Y an MISO P.7

Der Treiber ist mit Empfänger über normales Cat 5 Ethernet Twisted Pair 
Kabel verbunden:

AM 26LS31 CN an AM 26LS32 CN
1Y an 1A
1Z an 1B
2Y an 2A
2Z an 2B
3Y an 3A
3Z an 3B
4Y an 4A
4Z an 4B

G ist jeweils an Vcc (5V) und G(neg.) an GND.
GND von den Schaltungen ist natürlich überall gleiches Potenzial, sprich 
verbunden.

Treiber: http://goo. gl/1Y9Ot
Empfänger: http://goo. gl/0Hh1m

leider tut sich da bei der Datenübertragung garnichts, während Sie wie 
gesagt auf Strecken bis 1 Meter ohne die RS422 problemlos funktioniert 
(RS422 einfach überbrückt).

Ich habe leider kein Oszi zum Nachmessen, hoffe jemand mit mehr 
Erfahrung kann mir vielleicht einen guten Tipp geben :)

Achja bevor ichs vergesse der SS Kanal ist an beiden µC mit einem 
Widerstand "geerdet".

Danke und schönen Gruß

von Klaus D. (kolisson)


Lesenswert?

Wwnn es doch nur ab und zu mal eine Byte sein soll,
wäre es nicht einfacher eine andere Übertragungsart zu wählen ?
z.B. 1 Wire oder normal seriell ?

Klaus

von Flo (Gast)


Lesenswert?

Moin moin!

Enable Pins G und /G richtig beschaltet?

Gruß,
Flo

von der-gt (Gast)


Lesenswert?

Problem ist die Platinen sind bereits alle fertig erstellt, deshalb 
würde ich gern den Fehler finden und ausbessern, sofern das halt möglich 
ist.

von Flo (Gast)


Lesenswert?

Ach sorry, hab ich überlesen...
Stand da ja schon

von der-gt (Gast)


Lesenswert?

Flo schrieb:
> Moin moin!
>
> Enable Pins G und /G richtig beschaltet?
>
> Gruß,
> Flo


Habe darüber leider fast keine Infos gefunden und deshalb wie oben 
beschrieben bei Treiber und Empfänger

G an Vcc (5V)
/G an GND

verschaltet

von ferdiflachmann (Gast)


Lesenswert?

Hallo

Hast du an die Abschlußwiderstände gedacht? Ich könnte mir denken, daß 
die Eingänge übersteuert werden und daher mit der Datenrate nicht 
mithalten können?!

Gruß

Rainer

von Flo (Gast)


Lesenswert?

Also im Datenblatt ist doch eine "Function Table" die den Einfluss der 
Enable Leitungen beschreibt.
Direkt auf Seite 1.

Demnach sollte das bei dir korrekt angeschlossen sein.
Hatte das nur überlesen.

Gruß,
Flo

von karadur (Gast)


Lesenswert?

Hallo

G und /G sind Oder-verknüpft. G an VCC und /G an GND ist richtig.

Aber MISO und MOSI einer davon ist Ausgang und einer Eingang.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

der-gt schrieb:
> Treiber: http://goo. gl/1Y9Ot
> Empfänger: http://goo. gl/0Hh1m
Probier das doch nochmal. Was hast du dort versteckt?

von der-gt (Gast)


Lesenswert?

ja miso als eingang ist richtig, da der slave allerdings keine daten 
senden soll, sollte ich die leitung doch eigentlich sogar komplett weg 
lassen können oder?

Abschlusswiderstände habe ich keine eingesetzt da ich gelesen habe dass 
das bis 5 Meter wohl nicht benötigt wird?!

von Flo (Gast)


Lesenswert?

karadur hat Recht,

Aber wenn es eh nur unidirektional werden soll, dann kann man doch MISO 
beim Sender und MOSI beim Empfänger weg lassen.

Gruß,
Flo

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

der-gt schrieb:
> Abschlusswiderstände habe ich keine eingesetzt da ich gelesen habe dass
> das bis 5 Meter wohl nicht benötigt wird?!
Seit Guttenberg muss man dazu immer noch einen Quellennachweis bringen. 
Diese Aussage ist nämlich FALSCH. Schon bei wesentlich kürzeren 
Leitungslängen (20-30cm) macht z.B. duchaus mal eine Serienterminierung 
Sinn: Beitrag "Re: Signalproblem bei langem Kabel"

Und bei einem differentiellen Bus würde ich immer eine Terminierung 
vorsehen...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Flo schrieb:
> Aber wenn es eh nur unidirektional werden soll, dann kann man doch MISO
> beim Sender und MOSI beim Empfänger weg lassen.
Wofür dann noch einen SPI?
Dann hat man ja gar keine Verbindung mehr zwischen Master und Slave... 
:-o
Master      Slave
  MOSI ---> MOSI
  MISO <--- MISO
  SCLK ---> SCLK
  SS   ---> SS

        |
 MISO beim Sender und MOSI beim Empfänger weg lassen
        |
        V

  MOSI  //  MOSI
  MISO  //  MISO
  SCLK ---> SCLK
  SS   ---> SS

von karadur (Gast)


Lesenswert?

Hallo "der gt" schreibt das er am Empfänger alle 4 angeschlossen hat. 
Dann arbeiten 2 Ausgänge gegen einander.

von Flo (Gast)


Lesenswert?

Lothar Miller schrieb:
> Wofür dann noch einen SPI?
> Dann hat man ja gar keine Verbindung mehr zwischen Master und Slave...
> :-o
> Master      Slave
>   MOSI ---> MOSI
>   MISO <--- MISO
>   SCLK ---> SCLK
>   SS   ---> SS

Master     Slave
MOSI ----> MISO
SCLK ----> SCLK
SS   ----> SS

würd schon gehen. Ist dann halt SPI ohne Rückkanal.
Obs sinn macht oder nicht liegt im Auge des Betrachters. Vielleicht ist 
nur noch SPI frei, alle anderen Pins anderweitig verwendet.

Gruß,
Flo

von Flo (Gast)


Lesenswert?

Hmm, lange nix mit SPI gemacht stelle ich gerade fest...
Lothar hat natürlich recht, ich meinte bei beiden MISO weg lassen.
Ich hoffe ihr habt trotzdem verstanden was ich meinte.

Gruß,
Flo

von Klaus D. (kolisson)


Lesenswert?

Flo schrieb:
> Vielleicht ist
> nur noch SPI frei,

und selbst dann kann man einfach auf den freien Pin einen
Soft-Uart legen.
Ich versteh den Aufwand nicht wirklich.

Klaus

von slow (Gast)


Lesenswert?

Wenn ich das richtig sehe, verbindest Du bei der SPI Eingang mit Eingang 
und Ausgang mit Ausgang. Ist ja nicht grad günstig für eine Übertragung.

von Pieter (Gast)


Lesenswert?

moin moin,

SPI über RS422 macht schon Sinn, Bitsynchrone Übertragung, macht bei 
unterschiedlich schnell arbeitenden MC duchaus was her.
Die Terminalwiderstände bei RS422 darf man nicht weglassen!

Eigendlich braucht man ja nur MOSI und CLK zur Übertragung. Allerdings 
würde ich GND mitführen.

MfG
Pieter

von Purzel H. (hacky)


Lesenswert?

Den GND mitzufuehen ist zwingend. Denn die 7V Gleichtakt sind schnell 
erschoepft.

von der-gt (Gast)


Lesenswert?

danke erstmal für eure antworten, wie würde ich denn dann korrekt 
terminieren?

habe einmal 5meter kabel und einmal 2meter kabel, (gleiche schaltung 
unterschiedliche distanzen).

würde ich dann je einen widerstand zwischen hin und rückleiter von einem 
twister pair Paar, am RS422 Treiber anschließen?

Und gibt es eine Formel um den Widerstandswert zu berechnen? (Bin bis 
jetzt leider über keine gestolpert, habe nur häufiger den Wert 120Ohm 
gesehen).

Gruß

von Pieter (Gast)


Lesenswert?

moin moin,

>>würde ich dann je einen widerstand zwischen hin und rückleiter von einem
twister pair Paar, am RS422 Treiber anschließen?

1x 120Ohm zwischen den Treiberausgängen und 1x 120Ohm zwischen den 
Eingängen -> das Kabelpaar wird an beiden Enden mit 120 Ohm 
abgeschlossen.

MfG
Pieter

von Falk B. (falk)


Lesenswert?

@  Pieter (Gast)

>1x 120Ohm zwischen den Treiberausgängen und 1x 120Ohm zwischen den
>Eingängen -> das Kabelpaar wird an beiden Enden mit 120 Ohm
>abgeschlossen.

Nö, bei unidirektionalem RS422 reicht ein Terminierungswiderstand am 
Ende, das Ende am Treiber braucht keine Terminierung.

MfG
Falk

von der-gt (Gast)


Lesenswert?

Hallo nochmal, habe jetzt eben zwischen jedes Twisted Pair Paar, am 
Empfänger einen 120Ohm Terminierungswiderstand angelötet.

Funktioniert trotzdem nicht. Was mich stutzig macht ist, dass der 
AtMega8 auf dem SS Channel die ganze Zeit 5V ausgibt (mit Multimeter 
gemessen), die Spannung liegt am RS422 Treiber (Pin 1A) auch an, wird 
vom Empfänger aber nicht ausgegeben, dort messe ich nur eine Spannung 
von 0,7V - 1V.

Ich versteh nicht warum der Empfänger das Signal nicht vernünftig zurück 
wandelt oder ob der Treiber das Signal erst garnicht vernünftig 
umwandelt.

von Pieter (Gast)


Lesenswert?

>>vom Empfänger aber nicht ausgegeben, dort messe ich nur eine Spannung

wie sind denn die Eingangspegel des Empfängers?

>>von 0,7V - 1V.
für mich etwas viel, was sagt eine AC-Messung?

von slow (Gast)


Lesenswert?

Langsam wäre es an der Zeit mal einen gescheiten Schaltplan zu posten.
Nicht den Schaltplan, den Du nachbauen wolltest, sondern den, den Du 
tatsächlich zusammengelötet hast. Aber genau kontrollieren!

Sieht alles nach Leitungsdreher und Schluß zwischen Ausgängen aus.

Raten Ende, her mit dem richtigen Schaltplan.

von der-gt (Gast)


Lesenswert?

Ja slow da hast du wohl recht, werde den Schaltplan heute Abend posten, 
vorher schaffe ich es leider nicht. Danke aufjedenfall schonmal für euer 
Interesse, melde mich mit dem Plan und den AC Messungen zurück.

Gruß

von Weingut P. (weinbauer)


Lesenswert?

wird an der Konfiguration der SPI liegen ... zieh mal den Slave raus und 
schau nochmal die Spannung des SS nach ...
nächster Schritt wär dann als Eingang deklarieren und Pullup aktivieren, 
was der dann macht.

von der-gt (Gast)


Lesenswert?

Hey Leute, habe gerade begonnen den Schaltplan zu zeichnen (habe die 
Schaltung im Kopf designed und aufgelötet).
Und was fällt mir auf? Ich Idiot habe Vcc an /G, und GND an G gelötet, 
also genau verkehrt.

Jetzt klappts (komischerweise -.-) natürlich. Ich bedanke mich trotzdem 
für eure Hilfe und für die Zeit die Ihr durch meinen Fehler verloren 
habt kann ich mich nur entschuldigen.

Schönen Abend noch und danke nochmal ;)

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.