Forum: Mikrocontroller und Digitale Elektronik SPI Recihweite über RS422 (MAX490) erhöhen?


von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Hi Gemeinde,

ich hab da mal ein paar Fragen bezüglich SPI und RS422.

Folgendes:
Ich habe vor über SPI mehrere Slaves mit einem µC zu verbinden. Dabei 
muss aber eine Distanz von ca. 4-5m überbrückt werden. Nun habe ich 
schon etwas mit Terminierung rumgespielt, was mir allerdings einen 
Teilnehmer zerstört hat. :-( Deshalb will ich es jetzt mit dem MAX490 
und etwas Patchkabel probieren.

Nun ist es ja so dass bei dem SPI ein SS Pin für jeden Slave gibt, um 
den jeweiligen Slave anzusteuern.
Mein Frage wäre da nun, kann ich MISO und MOSI über den MAX490 laufen 
lassen und den SS Pin einfach direkt über das Patchkabel an den Slave 
anschließen? Ich würde dadurch ja wieder einen MAX490 sparen.
Theoretisch wird ja über SS nur auf LOW gezogen und nach der Übertragung 
wieder auf HIGH gesetzt, das dürfte doch relativ unkritisch sein oder?


Benötigt man Abschlußwiderstände bei der Entfernung?

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Ohje, ein Rechtschreibfehler im Thread Titel. Kann ein Admin den 
vielleicht korrigieren? Danke.

Zum besseren Verständnis, hier als Anhang den Aufbau so wie ich ihn 
geplant habe. Das ganze Gebilde verläuft sternförmig und ist jetzt für 
zwei Slaves gezeichnet, es können aber noch weitere Slaves hinzukommen.

von butrus (Gast)


Lesenswert?

Und wo ist CLK geblieben? Es wird bestimmt nich funktionieren daohne!

von Steffen (Gast)


Lesenswert?

Oh stimmt, wobei es ist so dass MOSI nicht gebraucht wird weil nur Daten 
von den Slaves empfangen werden.
Also MOSI in der Zeichnung durch CLK ersetzten.

von lkmiller (Gast)


Lesenswert?

>...kann ich MISO und MOSI über den MAX490 laufen lassen und
>den SS Pin einfach direkt über das Patchkabel an den Slave anschließen?
Sicher kannst du das. Die Frage ist nur, ob es auch funktioniert.
Auch das SS Signal muß ohne Überschwinger o.ä. am entsprechenden Pin 
ankommen. Und manche SPI-Teilnehmer sind auf ein sauberes SS-Signal 
angewiesen, da das nicht einfach nur den Slave auswählt, sondern mit zur 
Kommunikation zählt.
Du musst aber auf jeden Fall den Takt auch differentiell übertragen, 
sonst wird das sicher nix!!

Was sind denn das für Slaves?
Muss es denn unbedingt SPI sein?
SPI ist wie I2C schon von der Idee her ein serieller Platinenbus.
Reichweite ca. 50cm.

von lkmiller (Gast)


Lesenswert?

Dieser sternförmige Aufbau, den du skizziert hast, ist von RS422 nicht 
vorgesehen. Wo willst du denn da einen Abschlusswiderstand setzen?
Beim Slave 1 oder 2, oder einen halben bei beiden?

Auch das Empfangen wird so ohne weiters nicht klappen, denn der Sender 
des MAX490 müsste bei den nicht benötigten Slaves hochohmig geschaltet 
werden, sonst gibts eine Buskollision auf der MISO-Strippe.

von Michael H* (Gast)


Lesenswert?

spendier doch einfach einen tiny45 oder 2313. kostet keinen euro und 
schon kannst du die uart nutzen, um differentiell übertragen zu können.
übrigens gibts auch billigere und sogar bidirektionale 
differentiell-umsetzer. max3468 zum beispiel.

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Die Übertragung ist doch Differenziell oder etwa nicht?

Kannst du die Probleme die auftreten etwas genauer erklären, ich komme 
da irgendwie nicht hinterher.
Aber zur Not ginge es auch so, dass ich den zweiten Slave quasi am 
ersten Slave anschließe (nicht sernförmig sondern "Reihe").

Bei den Slaves handelt es sich um MAX6675, diese lassen sich nur 
auslesen Daten empfangen tun die keine.

von lkmiller (Gast)


Lesenswert?

>>Auch das Empfangen wird so ohne weiters nicht klappen...

>Kannst du die Probleme die auftreten etwas genauer erklären...

Du hast garantiert eine Buskollision, weil der MAX490, dessen Slave 
nicht aktiv sein soll, eigentlich auch deselektiert (hochomig 
geschaltet) gehört.
Der MAX490 hat aber gar keinen Tristate-Steuereingang.

Also: der eine Slave ist deselektiert und gibt z.B. eine '0' aus, der 
andere will Daten übertragen. Dabei sool jetzt eine '1' übertragen 
werden. Jetzt passierts: der erste MAX490 sendet eine '0', der andere 
die '1'.
Was kommt da am Empfänger an?

Für die MISO-Leitung müsstest du RS485-Wandler nehmen, die haben solche 
Steuereingänge.

von Steffen (Gast)


Lesenswert?

OK, jetzt verstehe ich die Problematik.

Irgendwie blöd das ganze... Wie könnte ich denn sonst noch verfahren? 
Welche Möglichkeiten gibt es noch die Reichweite zu erhöhen?

Terminierung will ich lieber die Finger von lassen, denn ich habe keine 
Ahnung davon.

von Michael H* (Gast)


Lesenswert?

tiny spendieren, uart über rs485 mit max 485. den kannst auch tristate 
schalten. kostet ned viel und is ne ordentliche lösung.
terminieren musst du sowieso, da kommst du wohl ned drum rum.

von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Also ich hab mal einen neuen versuch gestartet (siehe Anhang).

Kann ich es so machen? Wie muss ich die DEs und -REs beschalten?

Kann ich nicht einfach die Receiver immer eingeschaltet lassen und nur 
die zwei Transmitter der Tinys ein- und ausschalten, d.h. Transmitter 
vom µC auch immer an?
Ich muss ja nur die Tinys abfragen, sonst findet ja keine Kommunikation 
untereinander statt.

Sende ich z.B. eine 1 übers USART vom µC müssen beide Tinys ja empfangen 
und Tiny 1 dann seinen Transmitter einschalten (DE=1) und  die 
gewünschten Daten senden, Tiny 2 erkennt dass er nicht gemeint ist und 
lässt seinen Transmitter aus (DE=0).
Also könnte ich doch alle drei Receiver immer eingeschaltet lassen, 
sowie den Transmitter von µC. Nur die Transmitter der Tinys müssen 
geschaltet werden.

Liege ich da richtig oder habe ich was übersehen?

von Michael H* (Gast)


Lesenswert?

jain =) aber schaut schon recht gut aus.
kommt auf den tiny an, den du nehmen willst. die tiny25/45/48 haben 
"nur" ein sog. USI, das universal serial interface.
damit lässt sich sowohl UART als auch SPI realisieren. du musst dann in 
der software die nötigen vorkehrungen treffen und pins schalten, sodass 
sich UART und SPI nicht in die quere kommen.
oder du nimmst einen tiny2313, der hat UART und SPI getrennt und kostet 
20 cent mehr.

übrigens kannst du für deine kommunikation auch nur 2 drähte verwenden, 
wenn du sender bzw empfänger tristate schaltest. allerdings gibts dann 
kein full duplex mehr.

grüße, holli

von Steffen (Gast)


Lesenswert?

Also ich würde dann den Tiny2313 nehmen. Das mit den Adern stellt kein 
Problem dar, da ich eh das Patchkabel mit 4x2 Adern nehmen werde.

Aber kann das so funktionieren wie ich geschreiben habe, also mit den 
ein- und ausschalten der Transmitter bzw. Receiver?

von Michael H* (Gast)


Lesenswert?

ja, genau so klappt das

von Steffen (Gast)


Lesenswert?

Eine Frage noch:

Die 5V Versorgungspannung der Slaves wollte ich mit über das Patchkabel 
liefern. Könnte es da zu Komplikationen kommen?
Auf der einen Seite brauchen die Slaves (Tiny+MAX485+MAX6675) ja nicht 
viel Strom, auf der anderen Seite ist die Entfernung zum Ende dann schon 
im schlimmsten Fall um die 7 Meter.

Ansonsten wäre noch die Möglichkeit 12V über das Kabel zu liefern und 
dann einen Spannungsregler für jeden Slave vorsehen. Wäre natürlich 
wieder etwas aufwendiger.

von Michael H* (Gast)


Lesenswert?

ich seh über die distanz eigentlich keine probleme. am besten sollte es 
sein, wenn du ein verdrilltes paar für spannung und gnd nimmst und auf 
der slave-seite wieder gut puffern, damits auf den leitungen möglichst 
wenig zuckt.

von Steffen (Gast)


Lesenswert?

OK, das mit dem verdrillten Kabel ist ja kein Problem. Und ein dicken 
Kondensator bei jeden Slave auch nicht.

Danke.

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.