mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS-485, Kommunikationsproblem mit dem LTC2850


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Ludo S. (ludo916)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich versuche mit dem LTC2850 eine RS-485 Kommunikation mit einem Sensor 
zu erstellen. Mit meiner Software bekommen ich eine Fehlermeldung und 
keine Ergebnisse. Wenn ich aber den Sensor mit einem USB <-> RS-485 
Modul anschließe bekomme ich die richtige Werte (Ergebnisse) vom Sensor. 
Dieses Modul habe ich am Eingang A & B vom LTC2850 angeschlossen.

Ich habe noch mal meinen LTC2850 - Baustein verbunden und die serielle 
Kommunikation mit einem Logic-Analyser mitgehört. Mir ist aufgefallen, 
dass ich auf der RX-Leitung direkt das bekomme, was gerade über TX sende 
und erst ca. 0.34s später kommt die richtige Antwort.

hat zufällig jemand eine Idee warum, sich der Sensor so verhält? 
Manchmal bekomme ich nicht das, was ich sende, sondern irgendeine 
Information. Ich habe ich verschieden Anschlussmöglichkeiten der beiden 
Pins (*RE & DE) ausprobiert und bekomme immer das gleiche Verhalten.

VG

Autor: Schorsch X. (bastelschorsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RS-485 ist eine halbduplex Kommunikation, d.h. der Empfänger (wenn 
aktiv) hört das mit, was der Sender sendet. Entweder per Software die 
eigenen Daten wegfiltern, oder beim Senden den Empfänger deaktivieren 
z.B. über den RE Eingang.

Autor: Ludo S. (ludo916)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Schorsch X. schrieb:
> RS-485 ist eine halbduplex Kommunikation, d.h. der Empfänger (wenn
> aktiv) hört das mit, was der Sender sendet. Entweder per Software die
> eigenen Daten wegfiltern, oder beim Senden den Empfänger deaktivieren
> z.B. über den RE Eingang.

Hallo,
Dank für deine schnelle Rückmeldung.

Vielleicht habe ich es nicht richtig verstanden. Ich sende die Abfrage 
vom PC über UART an den LTC2850 und der soll über RS485 die Daten vom 
Sensor holen und mir zurückgeben.
Aber ich höre meine Anfrage im gleichen Moment über die UART (RX) und 
kurz danach die richtige Antwort vom LTC2850.
Da ich ein Bild der verschiedene Schaltzustände (gelbe Markierung), die 
ich ausprobiert habe.

VG

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ludo S. schrieb:
> Aber ich höre meine Anfrage im gleichen Moment über die UART (RX)

Das ist logisch; Du hast die "*RE"-Leitung des RS485-Transceivers auf 
Masse gelegt, damit kommt an dessen "RO"-Ausgang alles 'raus, was auf 
dem RS485-Bus geschieht.

Möchtest Du das nicht, musst Du die Leitung während des Sendens 
deaktivieren, was am einfachsten geht, wenn Du *RE mit DE verbindest.

Bist Du Dir sicher, daß Deine Monoflop-Steuerung das zur Baudrate 
passende Timing produziert?

Bessere UARTs als die PC-Standard-UART enthalten Hardwareunterstützung 
für die Ansteuerung von RS485-Transceivern, auch etliche 
USB-Seriell-Bridges können das, so daß derartige Monoflop-Frickeleien 
nicht nötig sind.

Soll der Aufbau wirklich an einem PC betrieben werden, oder ist das nur 
ein Testbetrieb?

Autor: Achim S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ludo S. schrieb:
> Da ich ein Bild der verschiedene Schaltzustände (gelbe Markierung), die
> ich ausprobiert habe.

Schorsch hat es ja eigentlich schon beschrieben. Wenn du die eigenen 
Nachrichten nicht mithören willst, dann musst diese "Schaltzustände" 
zwischen Senden umd Empfangen umstellen.

- wenn du sendest musst du DE=RE=1 stellen (und R= per Pullup auf 
Ruhepegel halten). Dann ist dein Baustein in Senderichtung aktiv, in 
Empfangsrichtung ignoriert er aber, was er grade selbst auf die 
Leitungen treibt.
- wenn du nicht sendest musst du DE=RE=0 stellen. Dann ist dein Baustein 
in Senderichtung inaktiv, und du kannst Nachrichten von anderen 
Bausteinen empfangen.

Gleichzeitig senden und empfangen geht nicht, weil die Sende- und 
Empfangsrichtung über die identischen Leitungen läuft (deshalb 
halbduplex).

Autor: Ludo S. (ludo916)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:

>
> Möchtest Du das nicht, musst Du die Leitung während des Sendens
> deaktivieren, was am einfachsten geht, wenn Du *RE mit DE verbindest.

Das stimmt. Ich habe nachher beim Test die *RE-Leitung von der Masse 
getrennt und mit DE verbunden. Leider bekam ich immer das gleiche raus.

Rufus Τ. F. schrieb:
> Bist Du Dir sicher, daß Deine Monoflop-Steuerung das zur Baudrate
> passende Timing produziert?

Da bin ich noch nicht ganz sicher.

Rufus Τ. F. schrieb:
> Bessere UARTs als die PC-Standard-UART enthalten Hardwareunterstützung
> für die Ansteuerung von RS485-Transceivern, auch etliche
> USB-Seriell-Bridges können das, so daß derartige Monoflop-Frickeleien
> nicht nötig sind.

Das wäre bei meiner Hardware super. Die UART meines Controllers 
unterstützt diese leider nicht. Deswegen brauche ich diesen Monoflop, 
vielleichet gibt es auch eine andere Möglichkeit?

Rufus Τ. F. schrieb:
> Soll der Aufbau wirklich an einem PC betrieben werden, oder ist das nur
> ein Testbetrieb?

Ja. und alle USB-port vom implementierten HUB sind schon belegt.

Autor: Ludo S. (ludo916)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achim S. schrieb:
> (und R= per Pullup auf
> Ruhepegel halten)

meinst die damit die RO-Leitung? Da habe ich gestern auch mal mit einem 
10k Pullup ausprobiert. Es war leider nicht besser.

Ich habe auch mit RE=*RE = 0 und DE=*RE=1 versucht. Es kam zwar was 
zurück aber mit Error Bit usw. leider habe kein Bild mehr davon.

Autor: Ludo S. (ludo916)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ludo S. schrieb:
> Ich habe auch mit RE=*RE = 0 und DE=*RE=1 versucht. Es kam zwar was
> zurück aber mit Error Bit usw. leider habe kein Bild mehr davon.

siehe Foto !

Autor: Achim S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ludo S. schrieb:
> Ich habe auch mit RE=*RE = 0 und DE=*RE=1 versucht.

Und das hast nach dem Senden im richtigen Zeitpunkt vom einen aufs 
andere umgeschaltet?

Ludo S. schrieb:
> siehe Foto !

Du hast bei deinem Bildausschnitt die Signalnamen abgeschnitten. Wähle 
bitte den Ausschnitt so, dass man eindeutig erkennen, welches Signal 
jeweils gezeigt ist.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ludo S. schrieb:
> Die UART meines Controllers unterstützt diese leider nicht. Deswegen
> brauche ich diesen Monoflop, vielleichet gibt es auch eine andere
> Möglichkeit?

Natürlich, Dein Controller kann das auch in Software machen. Welcher ist 
es denn?

>> Soll der Aufbau wirklich an einem PC betrieben werden, oder ist das nur
>> ein Testbetrieb?
>
> Ja. und alle USB-port vom implementierten HUB sind schon belegt.

Du widersprichst Dir. Controller oder PC?

Im übrigen: Sieh mal nach, wofür das Wort "Implementieren" steht.

: Bearbeitet durch Moderator
Autor: Ludo S. (ludo916)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Du widersprichst Dir. Controller oder PC?
>
> Im übrigen: Sieh mal nach, wofür das Wort "Implementieren" steht.

Sorry. Das System wird nicht an einem PC angeschlossen. Das ist ein 
kleines Auswertesystem, wo ein iMX6-Prozessor (in Form eines Computer on 
Modul) drauf kommt.Ich verwende deshalb die UART <-> RS485 (LTC2850) 
-Schnittstelle um die Kommunikation mit einem RS485-unterstützen Sensor 
zu erstellen.

Rufus Τ. F. schrieb:
> Dein Controller kann das auch in Software machen.

Signal filtern??


Achim S. schrieb:
> Du hast bei deinem Bildausschnitt die Signalnamen abgeschnitten. Wähle
> bitte den Ausschnitt so, dass man eindeutig erkennen, welches Signal
> jeweils gezeigt ist.

Auf dem Bild:
Signal 1 --> Tx-Leitung
Signal 2 --> Rx-Leitung
Signal 3 --> RS485-A
Signal 4 --> RS485-B


Achim S. schrieb:
> Und das hast nach dem Senden im richtigen Zeitpunkt vom einen aufs
> andere umgeschaltet?

Das könnte eventuell ein Timing Problem vom SN74AHC123AD seien. Ich 
verstehe leider immer noch nicht warum dieses Signal eintrifft wenn DE 
(aktiv) = *RE(inaktiv) = 1. Die Umschaltung erfolgt sobald nichts mehr 
auf Tx gesendet wird und da kommt schon was zurück, obwohl Rx nichts 
machen muss.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ludo S. schrieb:
>> Dein Controller kann das auch in Software machen.
>
> Signal filtern??

Nein. Die Routine, die die UART beschreibt, aktiviert vor dem Senden die 
Steuerleitung und deaktiviert sie, wenn die UART signalisiert, daß das 
letzte Bit das Sendeschieberegister verlassen hat.

Es gibt UARTs, die dann einen Interrupt auslösen können, es gibt UARTs, 
die dafür ein abfragbares Bit im Statusregister haben (wie z.B. die im 
PC-Bereich ubiquitäre 8250/16450 etc.).

Wenn es diese Information nicht gibt, wird vor dem Senden eines 
Telegrammes ein Timer mit einem von Baudrate und Telegrammlänge 
abhängigen Wert aufgezogen, in dessen Interrupthandler dann die 
Steuerleitung wieder deaktiviert wird.

Mit dem Problem haben sich für Deinen Controller aber auch schon andere 
Leute auseinandergesetzt, z.B. hier:
https://community.nxp.com/thread/310625

Autor: Achim S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ludo S. schrieb:
> Auf dem Bild:
> Signal 1 --> Tx-Leitung
> Signal 2 --> Rx-Leitung
> Signal 3 --> RS485-A
> Signal 4 --> RS485-B

Ok, danke. Wie wäre es, wenn du direkt DE und RE messen würdest? Dann 
wüsste man, ob deren Timing stimmt.

Ludo S. schrieb:
> Ich
> verstehe leider immer noch nicht warum dieses Signal eintrifft wenn DE
> (aktiv) = *RE(inaktiv) = 1. Die Umschaltung erfolgt sobald nichts mehr
> auf Tx gesendet wird und da kommt schon was zurück, obwohl Rx nichts
> machen muss.

Wenn der Receiver disabled ist und die RO Leitung überhaupt nicht 
definiert wird (also kein ausreichender Pullup), dann kann sie 
"irgendwas" anzeigen. Z.B. mitkoppeln, wenn irgendeine benachbarte 
Leitung schaltet. Oder beliebig um die Umschaltschwelle herum wackeln.

Eine Oszilloskopmessung (anstelle der Logikanalysatormessung) würde 
Klarheit schaffen, ob auf RO definierte Logiksignale unterwegs sind oder 
ob man da nur das Zufallsergebnis einer undefinierten Logikleitung 
sieht.

Autor: Ludo S. (ludo916)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achim S. schrieb:
> Wenn der Receiver disabled ist und die RO Leitung überhaupt nicht
> definiert wird (also kein ausreichender Pullup), dann kann sie
> "irgendwas" anzeigen. Z.B. mitkoppeln, wenn irgendeine benachbarte
> Leitung schaltet. Oder beliebig um die Umschaltschwelle herum wackeln.

Hallo Zusammen,

erstmal vielen Dank für eure hilfreiche Antworten. Timing war richtig 
aber der Pullup widerstand auf der Ro-Leitung war nicht ausreichend 
genug. Den habe ich angepasst und bekomme nun ein sauberes Signal 
zurück.

Rufus Τ. F. schrieb:
> Mit dem Problem haben sich für Deinen Controller aber auch schon andere
> Leute auseinandergesetzt, z.B. hier:
> https://community.nxp.com/thread/310625

Danke für den Link. Die Seite hatte ich mal irgendwann mal kurz 
geöffnet.


noch mal besten Dank an alle.

VG

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.