Hallo, ich bin gerade dabei eine einfache RS 485 basierte Kommunikationsstrecke auszuprobieren. Es handelt sich dabei um ein sehr einfaches Szenario. Es soll nur zwei Kommunikationspartner geben, einen Master und einen Slave. Man kann sich das so vorstellen das der Slave Sensorwerte übernimmt und diese an den Mater schickt. Zu diesem Zweck sendet der Master eine Datenanforderung. Beide Seiten sollen in dem Experiment mittels des mBed 1768 Boards (Cortex M3 von NXP) implementiert werden. Ich habe zwei mBed Boards und habe als RS 485 Transceiver zwei RS 485 Breakouts siehe: https://www.sparkfun.com/products/10124 verwendet. Die Verbindung zwischen den Boards ist mittels 2 - Draht Leitung ( Halbduplex Betrieb) hergestellt. Ich habe die Schaltung aufgebaut und ein Testprogramm auf beiden mBed Boards installiert. Es fand keine Datenübertragung statt. Ich habe vorher das Programm ohne RS 485 (Direktverbindung zwischen den beiden Uarts) ausprobiert. Das hat funktioniert. Ich habe dann mit einem Oszilloskop die Signale gemessen. Dabei habe ich festgestellt das an dem Anschluss A stets 3,1 V anlagen und am Anschluss B ca. 0,3V. Von einem Signal (das Programm sendete ununterbrochen Signale -- waren auch am Eingang (Tx) messbar) war nichts zu sehen !!! Bei beider Breakouts ist zwischen der Leitung A und B ein Widerstand von 220 Ohm geschaltet. Für mich ergibt sich die Frage, ob mein aktuelles Problem damit zusammenhängt, das ich die PullUp und PullDown Widerstände nicht eingefügt habe, diese wurden in einigen Ausführungen als optional bezeichnet ?????? Ich kann das in den nächsten 3 Tage nicht probieren da ich im Propjektgeschäft unterwegs bin und hoffe auf einen Hinweis damit ich planen kann wie ich den Fehler weiter eingrenzen kann. Noch eine weitere Frage. In dem Transceiver gibt es Signalleitungen die ich dazu verwenden kann entweder den Empfänger oder den Sender zu aktivieren. In dem Breakout wurde zwei Leitungen zu einer RTS Leitung verbunden. Wenn eine "Station sowohl senden als auch empfangen können soll das müßte ich per Programm und unter Nutzung eines GPIO Pins die RTS Leitung dynamisch steuern ist das korrekt ? Ich würde mich über einen Hinweis freuen. Mit freundlichen Grüßen Andreas
Andreas B. schrieb: > Die Verbindung zwischen den Boards ist mittels 2 - Draht Leitung ( > Halbduplex Betrieb) hergestellt. Ist der GND verbunden?
Ich hatte die GND Leitung zwischen den beiden Stationen mal verbunden und mal offen gelassen. Das hatte sich nicht groß ausgewirkt.
Hallo, ist die Leitung "RTS" von den Breakout Boards am Controller angeschlossen? Wenn der RS-485-Baustein senden soll, muss für diese Zeit dieser Anschluss auf "High" liegen. Ansonsten wird nur empfangen ... Und ja, dieser Pin muss angesteuert werden, wenn man zwischen Senden (Pin = High, LED leuchtet) und Empfangen (Pin = Low, LED aus) umschalten will. Ausserdem ist der verbaute Widerstand von der Grösse her eigenwillig; Standard bei RS-485 ist 120 Ohm am Anfang und Ende der Leitung, nicht 220 Ohm (hängt aber vom Wellenwiderstand der Leitung ab).
Ich hatte für den Test die RTS Leistung der sendenden Station auf statisch auf High gelegt. Dadurch sind aber an A und B keine Signale angekommen. Sind die PullUp und PullDown Widerstände nun eigentlich notwendig oder sind diese wirklich optional und können mein Problem nicht hervorrufen.
TXD vom Embed geht auch an den RX-I vom Breakout Board? Auf der Emfängerseite ist RTS low, auf Sendeseite high? Ich würde den RS485 so vorspannen (via Pullup/down), dass am Empfänger eine "1" (=Ruhepegel vom UART) anliegt, wenn kein Sender aktiv ist. Ansonsten könnten angeschlossene Empfänger falsche Startbits sehen.
Hi, RTS bedeutet nur das der Empfänger bereit ist, mehr nicht. Normalerweise sind beide Treiber auf Empfang, das bedeutet du musst den Bus vorspannen und zwar genau so wie Jim Meba das beschreibt, genau genommen sogar auf beiden Seiten.(es könnten ja 1000m Kabel dazwischen sein) Will einer der beiden Teilnehmer etwas senden muss er natürlich den Sender einschalten. Bevor er das tut sollte er geprüft haben das der Bus frei ist. (für X ms Ruhepegel) Nach der Übertragung muss der Sender abgeschaltet werden sonst kann er auch nichts empfangen. Ob man den Empfänger wärend des Sendens abschaltet ist Geschmackssache. Man kann jedenfalls überprüfen ob das was gesendet werden soll auch raus geht. >Wenn eine "Station sowohl senden als auch empfangen können >soll das müßte ich per Programm und unter Nutzung eines GPIO Pins die >RTS Leitung dynamisch steuern ist das korrekt ? nicht ganz, nicht die RTS Leitung sondern das Senderpin am Treiber. Viel Erfolg, Uwe
Andreas B. schrieb: > Noch eine weitere Frage. In dem Transceiver gibt es Signalleitungen die > ich dazu verwenden kann entweder den Empfänger oder den Sender zu > aktivieren. Dann tu das. Ich würde da einfach nach Plan vorgehen. Da du eine Halbduplexstrecke aufbauen willst darf nur einer senden und es muss mindestens einer empfangen. Zeile 42 im Programm könnte ein Problem darstellen.
> nicht ganz, nicht die RTS Leitung sondern das Senderpin am Treiber. > > Viel Erfolg, Uwe Hi, Das der Sende Pin gesteuert werden muss ist mir schon klar. Das wird ja standarmäßig gemacht, wenn ich im Programm Dten sende. Da es aber extra Sender (DE - Data Enable) bzw. Empfangs (RE - Receiver Enable) gibt würde ich davon ausgehen, das ich nach einem aktive senden ( mit DE auf HIGH - sonst wird ja nichts gesendet) in den Empfänger Modus gehe ( d.h. ich muss DE auf LOW setzen und RE auf HIGH). Um dies zu bewerkstelligen muss der RTS Anschluss des Breakouts per Programm gesteuert werden ==>> oder habe ich hier etwas falsch verstanden ? Noch eine andere Frage. Ist es möglich für Testzwecke nur einen Teilnehmer, der als Sender ständig Daten aussendet "an den Bus" zu schalten ? Als erstes müßte ich ja mal hinbekommen das überhaupt ein Ausgangssignal an A und B anliegt. Wenn dies möglich ist was sollte man beachten ? Mit freundlichen Grüßen Andreas
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.