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?
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.
Und wo ist CLK geblieben? Es wird bestimmt nich funktionieren daohne!
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.
>...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.
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.
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.
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.
>>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.
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.
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.
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?
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
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.