www.mikrocontroller.net

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

Autor: Steffen (Gast)
Datum: 19.07.2008 13:52
Dateianhang: MAX1487-MAX491.pdf (829,5 KB, 24 Downloads)

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?
Autor: Steffen (Gast)
Datum: 19.07.2008 13:57
Dateianhang: CIMG6753.JPG (194,9 KB, 101 Downloads)
preview image for CIMG6753.JPG

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.
Autor: butrus (Gast)
Datum: 19.07.2008 14:13

Und wo ist CLK geblieben? Es wird bestimmt nich funktionieren daohne!
Autor: Steffen (Gast)
Datum: 19.07.2008 14:17

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.
Autor: lkmiller (Gast)
Datum: 19.07.2008 14:22

>...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.
Autor: lkmiller (Gast)
Datum: 19.07.2008 14:28

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.
Autor: Michael H* (-holli-)
Datum: 19.07.2008 14:41

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.
Autor: Steffen (Gast)
Datum: 19.07.2008 14:51
Dateianhang: MAX6675.pdf (133,6 KB, 24 Downloads)

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.
Autor: lkmiller (Gast)
Datum: 19.07.2008 18:25

>>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.
Autor: Steffen (Gast)
Datum: 19.07.2008 18:43

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.
Autor: Michael H* (-holli-)
Datum: 19.07.2008 18:55

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.
Autor: Steffen (Gast)
Datum: 19.07.2008 21:30
Dateianhang: Zweiter_Versuch.JPG (45 KB, 50 Downloads)
preview image for Zweiter_Versuch.JPG

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?
Autor: Michael H* (-holli-)
Datum: 19.07.2008 22:08

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
Autor: Steffen (Gast)
Datum: 19.07.2008 22:41

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?
Autor: Michael H* (-holli-)
Datum: 19.07.2008 22:51

ja, genau so klappt das
Autor: Steffen (Gast)
Datum: 20.07.2008 12:55

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.
Autor: Michael H* (-holli-)
Datum: 20.07.2008 13:06

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.
Autor: Steffen (Gast)
Datum: 20.07.2008 15:19

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

Danke.

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net