Forum: Mikrocontroller und Digitale Elektronik Signalprobleme bei einer RS 485 Kommuninaktionsstrecke


von Andreas B. (andreas_b63)


Lesenswert?

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

von Julian B. (julinho)


Lesenswert?

Andreas B. schrieb:
> Die Verbindung zwischen den Boards ist mittels 2 - Draht Leitung (
> Halbduplex Betrieb) hergestellt.

Ist der GND verbunden?

von Andreas B. (andreas_b63)


Lesenswert?

Ich hatte die GND Leitung zwischen den beiden Stationen mal verbunden 
und mal offen gelassen. Das hatte sich nicht groß ausgewirkt.

von AVRuser (Gast)


Lesenswert?

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).

von Andreas B. (andreas_b63)


Lesenswert?

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.

von Jim M. (turboj)


Lesenswert?

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.

von Uwe (Gast)


Lesenswert?

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

von Wolfgang (Gast)


Lesenswert?

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.

von Andreas B. (andreas_b63)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.