Forum: Mikrocontroller und Digitale Elektronik gelegentliche Datenfehler auf RS485


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.
von Andreas F. (dresi)


Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Gemeinde.
Erstmal: Alles Gute im neuen Jahr (wie sagt man in 
Mikrokontroller-Kreisen: Immer ein paar Millivolt über dem Logic-Level?)

Im Ernst: Ich habe hier einen RS485-Bus, der spinnt.
In unregelmäßigen zeitlichen Abständen (2 bis 5mal in 10 Sekunden - 
geschätzt) läuft irgendwelcher Mist über die Leitung.
Für die meisten angeschlossenen (anschließbaren) Geräte scheint das 
nicht relevant zu sein. Solange ich nur Taster- und Schalterpositionen 
auslese (in der einen Richtung Slave -> Master) und per PWM die 
Helligkeit einiger LEDs steuere (andere Richtung) läuft alles 
einwandfrei.
Seit ein paar Wochen versuche ich nun einige Daten (ASCII in 10 Zeilen á 
24 Zeichen) auf einem 3,5"-LCD auszugeben (Master -> Slave). 
Grundsätzlich funktioniert das prima. Sofort nach Einschalten sind alle 
Daten angezeigt, jedoch häufen sich mehr und mehr Anzeigefehler (falsche 
Zeichen). Die werden aber dann auch irgendwann mal wieder von den 
korrekten Zeichen überschrieben und so geht das dann hin und her.
Hier ein kleines Beispiel:
https://www.youtube.com/playlist?list=PLRZCDlblnoeciZiOngsZEORYZjGBKxIxi

Master ist ein MEGA2650, die Slaves werden durch Atmega 328P (NANO) 
dargestellt.
Als Transmitter benutze ich MAX487ESA und MAX487CSA (unterscheiden sich 
meines Wissens nur durch andere Temperatur-Werte).
Die Übertragung erfolgt durch fertig gekaufte Cat5-Patchkabel, auf den 
PCBs verwende ich hochwertige (geschirmt und mit vergoldeten Kontakten) 
RJ45-Buchsen. Alles andere auf zweiseitig gedruckten Schaltungen. Mit 
Masse-Vias habe ich nicht gespart.
Die GesamtBusLänge ist deutlich kürzer als 10 Meter. Wenn ich mit 100 
Ohm terminiere, wird alles nur noch schlimmer.
Ich wollte heute mal 120 Ohm Terminierung probieren (die Meinungen gehen 
da auseinander): Keine passenden Widerstände im Haus (sind aber 
bestellt).
Ich habe auch schon neue PCBs entworfen und ausprobiert, auf denen ich 
den MAX487 mit seinen A- und B-Beinchen so dicht es ging an die RJ45 
herangebracht habe. Jetzt ist es ein wenig(!) besser, aber weit weg von 
dem, was ich möchte.

Die MAX487 haben 100nF am VCC, die Versorgungsspannungen (die 5V für die 
MAX487 "mache" ich direkt auf den jeweiligen PCBs mit einem AMS1117-5,0) 
haben ordentliche 22uF Tantal-Stützen. Am TXenable (RE/DE) habe ich 10k 
PullDown gesetzt.

Die Daten- und 12V-Leitungen sind mit TVS-Dioden ausgestattet.
Die Gesamtstromversorgung (12V) kommt aus einem Labornetzteil. So kann 
ich den Strom begrenzen, falls es auf dem Labor-Tisch mal einen Kurzen 
gibt.
Damit will ich sagen, daß die Stromversorgung auf der Liste der 
Verdächtigen ganz unten steht.

Da ich am Ende meines Lateins bin und ich einen Hardware-Murks 
meinerseits ausschließen möchte - bevor ich mich an den Entwickler des 
Bus-Protokolls wende) her meine Frage: Habe ich in der Kabelbelegung 
vielleicht Mist gebaut?

Meine Kabelbelegung (Liste ist paarweise geordnet):
1/2 RS485-A und -B

3 GND
6 GND

4 GND
5 12V

7 12V
8 12V

Shield GND

Ich wollte ein Bullet-Proof-Design erreichen, bin aber - wie es aussieht 
- noch sehr weit davon entfernt.

Herzlichen Dank schonmal für's Mitdenken.
DRESI

von Hauke Haien (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Also ist dein Bus überhaupt nicht terminiert? Mit 120ohm wird es 
schlecht? Dann Terminierung mal auch auf 5v u gnd legen. Fail safe halt.

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Andreas F. schrieb:
> Seit ein paar Wochen versuche ich nun einige Daten (ASCII in 10 Zeilen á
> 24 Zeichen) auf einem 3,5"-LCD auszugeben (Master -> Slave).

Warten die Slaves auf den Master? Nicht das da ein Slave einfach nur 
dazwischen funkt.



Ansonsten müsstest Du folgendes:

> läuft irgendwelcher Mist über die Leitung.

mal mit einem Oszi einfangen.

Falls Du die Zeilen regelmäßig neu schreibst: Stack Overflow auf dem 
Master µC wäre auch eine Möglichkeit.

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Welche Baudrate verwendest Du?

Wirds besser, wenn Du die Baudrate drosselst?

Was für eine Taktquelle verwenden Deine µCs?

von posti (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie es aussieht, sendest Du laufend den kompletten Display-Inhalt?
Würde die zu übertragenden Daten auf ein Minimum reduzieren und eine 
Prüfsumme mitschicken.
Dann musst Du aber auch 'nachhören', ob die Daten korrekt empfangen 
wurden um Diese ggf. neu zu verschicken.

Die Sequenzen, wo nur noch Müll auf dem Display erscheint, sieht schon 
nach Daten-Gulasch aus, ein verschobener Pointer hört sich da für mich 
schlüssig an.

Die kleineren Fehler werden Übertragungsfehler sein - aber schon bei 10 
Metern?

MfG

von oszi40 (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Andreas F. schrieb:
> Die Übertragung erfolgt durch fertig gekaufte Cat5-Patchkabel, auf den
> .. Die GesamtBusLänge ist deutlich kürzer als 10 Meter

Dann nimm doch mal ein kurzes Kabel zum Test
und achte auch auf die richtigen Paare.

von Johann Klammer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn du half duplex machst, dann musst du failsafe terminieren, oder
irgendwie anders sicherstellen, dass die Pegel nicht wandern.

von Anja (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Andreas F. schrieb:
> Die Daten- Leitungen sind mit TVS-Dioden ausgestattet.

Ist evtl. die Kapazität der TVS-Dioden zu hoch?

Gruß Anja

von Andreas F. (dresi)


Bewertung
0 lesenswert
nicht lesenswert
Wow. Mit so viel Resonanz (und so schnell) hatte ich nicht gerechnet.
Habe morgen Frühdienst und muss mich vorbereiten (Schlaf).
Ich finde aber sicher eine Gelegenheit mir das Obige in Ruhe 
durchzulesen und noch am Vormittag entsprechend zu antworten.
Danke schonmal :) N8 (AFK)

von U. M. (oeletronika)


Bewertung
1 lesenswert
nicht lesenswert
Hallo,
> Andreas F. schrieb:
> Im Ernst: Ich habe hier einen RS485-Bus, der spinnt.
> In unregelmäßigen zeitlichen Abständen (2 bis 5mal in 10 Sekunden -
> geschätzt) läuft irgendwelcher Mist über die Leitung.
> Seit ein paar Wochen versuche ich nun einige Daten (ASCII in 10 Zeilen á
> 24 Zeichen) auf einem 3,5"-LCD auszugeben (Master -> Slave).
> Grundsätzlich funktioniert das prima. Sofort nach Einschalten sind alle
> Daten angezeigt, jedoch häufen sich mehr und mehr Anzeigefehler (falsche
> Zeichen).
Und du bist sicher, dass dies durch das Interface bedingt ist und nicht 
durch Macken im Display selbst?

> Als Transmitter benutze ich MAX487ESA und MAX487CSA
Ich kann keine Angaben zur verwendeten Baudrate finden.
Aber MAX487 sind Baudraten begrenzte Treiber, die Baudrate ist dann wohl 
eher moderat? Diese Treiber sind auch mit fehlerhafter Terminierung und 
schlechten Leitungen sehr gutmütig.
Auch die Kapazität von Schutzbeschaltungen (z.B. Suppresordioden) ist da 
eher nebensächlich (im Gegensatz zu den Treibern für hohe Baudraten).

>(unterscheiden sich meines Wissens nur durch andere Temperatur-Werte).
ja.

> Die Übertragung erfolgt durch fertig gekaufte Cat5-Patchkabel, auf den
> PCBs verwende ich hochwertige (geschirmt und mit vergoldeten Kontakten)
> RJ45-Buchsen. Die GesamtBusLänge ist deutlich kürzer als 10 Meter.
Das ist unter diesen Bedingungen Popelkram. Die Hardware sollte mit 
jedem beliebigen Klingedraht zurecht kommen.

> Wenn ich mit 100 Ohm terminiere, wird alles nur noch schlimmer.
Hast du die Pegel mal mit einem Oszi besichtigt.
100 Ohm, egal ob auf einer oder beiden seiten , sind bei den genannten 
Bedingungen völlig unkritisch.

Problem könnte sein, wenn die Leitungen nicht vorgespannt sind.
-> Leitung A mit ca. 470R ... 1k gegen +Ub
-> Leitung B mit ca. 470R ... 1k gegen gnd

> Ich wollte heute mal 120 Ohm Terminierung probieren (die Meinungen gehen
> da auseinander):
Das macht bei den bandbreitenbegrenzten Treibern und der kurzen Leitung 
nix.

> Ich habe auch schon neue PCBs entworfen und ausprobiert, auf denen ich
> den MAX487 mit seinen A- und B-Beinchen so dicht es ging an die RJ45
> herangebracht habe.
Unwichtig, sofern keine Schaltungsfehler vorliegen.

Natürlich müssen auch auf der TTL-Seite korrekte Signale anliegen.

> Die MAX487 haben 100nF am VCC, die Versorgungsspannungen (die 5V für die
> MAX487 "mache" ich direkt auf den jeweiligen PCBs mit einem AMS1117-5,0)
> haben ordentliche 22uF Tantal-Stützen. Am TXenable (RE/DE) habe ich 10k
> PullDown gesetzt.
/RE ist Low-aktiv, also korrekt.

> Die Daten- und 12V-Leitungen sind mit TVS-Dioden ausgestattet.
Welcher Typ? Ich nutze für solche Anwendungen z.B. SMBJ5 ohne Probleme.

Bei hohen Baudraten für z.B. Profibus sieht es ganz anders aus.

> Da ich am Ende meines Lateins bin und ich einen Hardware-Murks
> meinerseits ausschließen möchte - bevor ich mich an den Entwickler des
> Bus-Protokolls wende) her meine Frage: Habe ich in der Kabelbelegung
> vielleicht Mist gebaut?
Sofern die Leitungen alle A zu A und B zu B verkabelt sind, ist es ok.
Anders funktioniert erfahrungsgemäß gar keine Übertragung.

Folgende mir bekannte Kasperfallen gibt es bei RS485 noch:

-> Timings der Richtungsumschaltung  RE/DE ist nicht korrekt
z.B. weil es zu spät aktiviert wird (also nicht vor dem Startbit)

-> Busteilnehmer Antworten zu schnell, während der voherige noch den Bus 
mit RE/DE = High blockiert.

-> Baudraten (Bitzeiten) passen nicht gut zusammen (Mit Oszi 
korrigieren).

Gruß Öletronika

von ACDC (Gast)


Bewertung
1 lesenswert
nicht lesenswert
U. M. schrieb:
> Problem könnte sein, wenn die Leitungen nicht vorgespannt sind.
> -> Leitung A mit ca. 470R ... 1k gegen +Ub
> -> Leitung B mit ca. 470R ... 1k gegen gnd

sollte es sein ;)

von Andreas F. (dresi)


Bewertung
0 lesenswert
nicht lesenswert
So. Bin auf der Arbeit und habe somit Zeit, mich dieser Sache hier zu 
widmen. Blöderweise kann ich wiederum hier keine Versuche durchführen :)

Ich danke Euch für die wertvollen Anregungen und Richtungsweiser. Ich 
versuche mal, auf alles einzugehen. Hierbei werde ich mich auch gleich 
als Noob outen.
Dies ist mein erstes Projekt dieser Art. Ich kämpfe nun schon seit einem 
Jahr damit (in der Freizeit). Vorher wusste ich von serieller 
Kommunikation nur soviel, daß ich sie immer mit paralleler K. 
verwechselt habe.

Um so wertvoller ist mir dieses Forum, in welchem ich auch sehr viel 
"nur" lese.

Jim M. schrieb:
> Warten die Slaves auf den Master?
Im Prinzip ja. Hatte auch schon so eine Idee. Ich müsste - zumindest zu 
Debug-Zwecken - mal an geeigneter Stelle ein delay() im ms-Bereich 
einfügen. So weit bin ich aber noch nicht, der Code sollte eigentlich(!) 
auch so funktionieren.
Die Sache ist die, das System stammt nicht von mir, ich bastele nur das 
"Frontend" aus vorgegebenen Code-Schnipseln zusammen. An den 
Bibliotheken herumzupfuschen, sehe ich nicht als meine Aufgabe. Ganz 
davon abgesehen, daß ich dafür auch zu blöd wäre :)

Jim M. schrieb:
> Ansonsten müsstest Du folgendes:
>
>> läuft irgendwelcher Mist über die Leitung.
>
> mal mit einem Oszi einfangen.
Das Problem ist, ich habe nur so eine (etwas ältere) Conrad-Krücke mit 
5MHz. Mein Versuch, den Bus abzuhören, ist daran gescheitert, daß ich 
kein auswertbares Signal angezeigt bekommen habe.
Ich habe aber einen Logic-Analyser benutzt. Der zeigte mir im Vergleich 
von A und B (die meines Wissens genau(!) spiegelverkehrt sein müssen) 
gelegentliche - scheinbar spontane - Pegelsprünge auf nur einem Kanal. 
Deren Ursprung ließ sich hierbei natürlich nicht ermitteln.

Hauke Haien schrieb:
> Also ist dein Bus überhaupt nicht terminiert? Mit 120ohm wird es
> schlecht? Dann Terminierung mal auch auf 5v u gnd legen. Fail safe halt.

Stimmt. Nicht terminiert. Es heißt im Allgemeinen, daß das bei meinen 
Buslängen nicht erforderlich sei. Maxim behauptet auch im Datenblatt, 
daß der MAX487 Failsafe "eingebaut" hat.
Und ich habe 100 Ohm getestet. 120 Ohm will ich noch versuchen, sobald 
die Widerstände da sind. (Ich lebe hier in der Provinz - Erfurt - und es 
gibt hier keinen gescheiten lokalen Dealer mehr. Muss alles online 
einkaufen).
Die Datenleitungen "vorspannen" habe ich als Einziges noch nicht 
versucht.
Mal sehen, ob ich das elegant auf meine PCBs bekomme. Will nicht extra 
neue anfertigen für einen Versuch.

Rufus Τ. F. schrieb:
> Welche Baudrate verwendest Du?
Da bin ich mir nicht sicher. Ich habe nicht viel Ahnung von der Materie. 
Der Master wird per USB seriell mit 250000 angeschlossen. Per socat wird 
ein UDP-Stream "erzeugt" und an den Master geschickt (siehe Code).
Mehr verstehe ich davon nicht :( Wieviel effektive Baudrate das dann 
ergibt, weiß ich nicht. Ich habe mal versucht, das irgendwie zu 
errechnen... Habe es dann nach 10 Seiten "Internet" lesen aufgegeben.
1
REM Specify the number of the COM port your Arduino is connected to:
2
set COMPORT=5
3
4
set /A TTYNUM=%COMPORT%-1
5
mode COM%COMPORT% BAUD=250000 PARITY=N DATA=8 STOP=1 TO=off DTR=on
6
socat\socat -v UDP4-RECV:5010,ip-add-membership=239.255.50.10:127.0.0.1,reuseaddr!!udp-sendto:localhost:7778 /dev/ttyS%TTYNUM%
7
8
pause

> Wirds besser, wenn Du die Baudrate drosselst?
Um die Baudrate zu drosseln, müsste ich in die Library rein. Die wird 
dort vorgegeben.
> Was für eine Taktquelle verwenden Deine µCs?
Wenn ich das richtig verstehe, sind das wohl die 16 MHz des AVR. Oder?

oszi40 schrieb:
> Dann nimm doch mal ein kurzes Kabel zum Test
Habe ich auch schon versucht. Verschiedenste Kabel und -Längen. Manchmal 
hatte ich den Eindruck, daß die Störungen abnehmen, wenn ich mehrere 
Slaves in der Kette anschließe.
Ich schrieb auch: "deutlich unter 10m". Meistens habe ich bloß einen 
halben oder 2 Meter angeschlossen. Das Ganze läuft i.Moment noch auf dem 
Tisch.

Johann Klammer schrieb:
> Wenn du half duplex machst, dann musst du failsafe terminieren,

Das werde ich auf alle Fälle als Nächstes versuchen.

Anja schrieb:
> Ist evtl. die Kapazität der TVS-Dioden zu hoch?

Dazu kann ich mich nicht sachkundig äußern. Wieviel F sind "zu hoch"?
Ich benutze für die Datenleitungen die SM712 (angeblich speziell für 
RS485 geeignet), für die 12V-Leitung nehme ich (auf jedem Node) jeweils 
eine SMBJ12A.

U. M. schrieb:
>> ... jedoch häufen sich mehr und mehr Anzeigefehler (falsche
>> Zeichen).
> Und du bist sicher, dass dies durch das Interface bedingt ist und nicht
> durch Macken im Display selbst?
Das ist ausgeschlossen. Obwohl ich das nie in Erwägung gezogen hatte, 
habe ich schon verschiedene Displays ausprobiert. Die sind unschuldig :)

Es ist eindeutig der RS485-Bus. Ich hatte einen Versuch laufen, in 
welchem ich den LCD-"Treiber" AVR (UNO) direkt per USB betrieben habe: 
Keine Fehler!
> -> Timings der Richtungsumschaltung  RE/DE ist nicht korrekt
> z.B. weil es zu spät aktiviert wird (also nicht vor dem Startbit)
>
> -> Busteilnehmer Antworten zu schnell, während der voherige noch den Bus
> mit RE/DE = High blockiert.
>
> -> Baudraten (Bitzeiten) passen nicht gut zusammen (Mit Oszi
> korrigieren).
Klingt alles sehr einleuchtend.
Diese Punkte müsste ich aber mit dem Entwickler der Software 
diskutieren. Ich will erst mal meine(!) Fehler ausschließen, bevor ich 
den Mann belästige. Der hat mit seinem Studium genug um die Ohren. Das 
System befindet sich noch in der Beta-Phase und ich darf da (aufgrund 
meiner möglichen Schlamperei) nichts aufmischen.

Was ich aber auch interessant finde an Euren Antworten, daß niemand auf 
mein Breakout des Kabels eingegangen ist. Scheint wohl egal zu sein, wie 
ich Signal und Versorgung auf die 4 Adernpaare verteile?
Das Einzige, was ich hierzu gelesen habe, ist, daß das Signal auf 1 und 
2 (orange/orange-weiß) sein sollte, da diese am wenigsten übersprechen.

Nach der Lektüre dieses Thread liegen 3 Möglichkeiten oben:
- Failsafe für sicheren Pegel
- Timing der Halbduplex-Umschaltung

Jim M. schrieb:
> Falls Du die Zeilen regelmäßig neu schreibst: Stack Overflow auf dem
> Master µC wäre auch eine Möglichkeit.
Das habe ich eben noch gefunden.
Es werden immer ganze Zeilen neu geschrieben, aber nur, wenn sich ein 
Wert geändert hat.
Stack-Overflow??? Habe ich nur eine bildliche Vorstellung, was das sein 
könnte. Man müsste wohl einen Puffer(?) vergrößern oder schneller (oder 
mit besserem Timing) leeren.
Das müsste ich dann(!) mit dem Entwickler diskutieren.

Wenn ich alle möglichen Hardware-Kalamitäten (ich liebe: Kasperfallen) 
ausgeschlossen habe, lade ich ihn mglwse hierher ein (wenn er es nicht 
sowieso schon liest?) :)

Habe ich noch was vergessen? Fragt mich einfach.
Nochmal: Danke :)

: Bearbeitet durch User
von Nosnibor (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Wie sieht es an der RO-Leitung (Empfänger-Ausgang) der RS-485-Treiber 
aus?
Worst case: während des Sendens ist der Pin hochohmig, so daß der UART 
sich irgendwelche Pegel zusammenphantasiert und Blödsinn empfängt. Die 
Software verläßt sich darauf, daß alle empfangenen Daten von einem 
anderen Busteilnehmer kommen, und versucht ihr bestes, dem Blödsinn 
gerecht zu werden...
Gegenmaßnahmen:
 - UART-Empfänger während des Sendens ausschalten
 - ignorieren, was während des Sendens empfangen wurde
 - Pullup an RxD

Aber zuerst würde ich Öletronikas Punkte prüfen: Leitungen vorgespannt? 
Timing bei der Übergabe geklärt? (wie schnell nach Ende des Stopbits 
schaltet der Master den Sender aus? Wie schnell antwortet der Slave? 
Dazwischen sollte genug Zeit für Baudratentoleranz liegen)

Und schließlich: verwendet das Protokoll eine gute Prüfsumme? Wenn ja 
(und wenn die beim Empfang auch beachtet wird), muß der Datenmüll durch 
einen Softwarefehler (Puffer-Überlauf, verbogener Pointer...) innerhalb 
eines der beteiligten Geräte entstehen.

von U. M. (oeletronika)


Bewertung
1 lesenswert
nicht lesenswert
Hallo,
> Andreas F. schrieb:
> Was ich aber auch interessant finde an Euren Antworten, daß niemand auf
> mein Breakout des Kabels eingegangen ist. Scheint wohl egal zu sein, wie
> ich Signal und Versorgung auf die 4 Adernpaare verteile?
> Das Einzige, was ich hierzu gelesen habe, ist, daß das Signal auf 1 und
> 2 (orange/orange-weiß) sein sollte, da diese am wenigsten übersprechen.
darauf bin ich aber in Prinzip schon eingegangen.

Ich schrieb ja, das solche Bandbreiten begrenzten Treiber an so kurzen 
Leitungen mit jedem Klingeldraht funktionieren sollten.
Mindestens auf einer Seite sollte aber terminiert werden.

Übersprechen kannst du unter solchen Bedingungen vergessen.
In Praxis sollten natürlich immer ein Aderpaar (miteinader verdrillt) 
genutzt werden.

> Das Problem ist, ich habe nur so eine (etwas ältere)
> Conrad-Krücke mit 5MHz.
Naja, ein Oszi ist da unverzichtbar, aber 5MHz reicht doch.

> Mein Versuch, den Bus abzuhören, ist daran gescheitert, daß ich
> kein auswertbares Signal angezeigt bekommen habe.
Die Leitungen A und B sind ja differentielle Signale. Meist wird keine 
Masse dazu herausgezogen.  Da solltest du mal in die Schaltung gehen und 
dir selber eine Oszi-Masse herbeizaubern -> Pin5 am MAX487.

> Ich habe aber einen Logic-Analyser benutzt. Der zeigte mir im Vergleich
> von A und B (die meines Wissens genau(!) spiegelverkehrt sein müssen)
Der Logikanalyser betrügt dich nur, wenn die Pegel nicht sauber sind.

Leider ist es so, dass es keinen einheitlichen Standard gibt, der die 
Pegel von den Leitungen a und B definiert.
Bei originärer "RS485" sollte aber die Leitung A im Ruhepegel = High 
haben und B = Low.
Bei Profibus ist es genau umgekehrt, obwohl der auch physikalisch auf 
RS485 beruht.

> gelegentliche - scheinbar spontane - Pegelsprünge auf nur einem Kanal.
> Deren Ursprung ließ sich hierbei natürlich nicht ermitteln.
Das solltest du genauer untersuchen.
Das könnte ein Hinweis  Datenkonflikte sein.

Entscheidend sind aber am Ende nur die Differenzpegel.
Gruß Öletronika

von Werner (Gast)


Bewertung
1 lesenswert
nicht lesenswert
1. Hier sind noch sehr gute Tips zu RS485:
http://www.ti.com/lit/an/snla049b/snla049b.pdf
2. Sind die GNDs von den Busteilnehmern sicher miteinander verbunden?

Werner

von spess53 (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Hi

>Die Leitungen A und B sind ja differentielle Signale. Meist wird keine
>Masse dazu herausgezogen.

Ten Ways to Bulletproof RS-485 Interfaces (AppNote 1057)

sagt dazu

A typical mistake is to connect two
nodes with only two wires. If you do this, the system may radiate
high levels of EMI, because the common-mode return
current finds its way back to the source, regardless of where
the loop takes it. An intentional ground provides a
low-impedance path in a known location, thus reducing
emissions.

MfG Spess

von Andreas F. (dresi)


Bewertung
0 lesenswert
nicht lesenswert
Die bestellten Widerstände wurden heute geliefert. Kam noch nicht zur 
Testinstallation.
Die oben genannten Dokumente habe ich gelesen und - zum wesentlichen 
Teil - auch verstanden :)
Werde ganz sicher hier beschreiben, wie der Krimi weiter geht :)
Bis dann.

: Bearbeitet durch User
von Andreas F. (dresi)


Bewertung
0 lesenswert
nicht lesenswert
Ich hatte einen Nachmittag frei und die Gelegenheit genutzt, ein 
komplettes Master-PCB neu herzustellen (das nachträgliche Drauf-Gebastel 
auf einer SMD-Platine bringt es nicht wirklich).

Nun habe ich Failsafe 2x 750 Ohm und als Terminator zwischen A und B 130 
Ohm gesetzt. (Zum Glück passt das Rechenbeispiel in den o.g. Papieren zu 
meinem Fall). Am anderen Ende bleiben 120 Ohm als Terminierung.
Als Differenz zwischen A und B habe ich jetzt (in Ruhe und mit dem 
Multimeter gemessen) 400 mV (falls ich mich richtig erinnere, bin auf 
der Arbeit).

Der Bus funktioniert einwandfrei, jedenfalls die Slaves, die nur die 
Änderung von Schalterpositionen zu senden und die Helligkeit einer LED 
mittels empfangener Werte zu steuern haben. Aber die gingen auch vorher 
schon.

Auf meinem Display kommt nun garnichts mehr an. Ich vermute aber, das 
liegt nicht am neuen Master, ich habe sehr wahrscheinlich irgendwas 
anderes vermasselt. Jedenfalls wird der AVR etwas warm. Da muss ich 
nochmal bei.

Nosnibor schrieb:
> Gegenmaßnahmen:
>  - UART-Empfänger während des Sendens ausschalten
>  - ignorieren, was während des Sendens empfangen wurde
Das wird doch m.E. durch das Verbinden von RO und DI gewährleistet (?) 
Außerdem hat der fragliche AVR nichts zu senden. TX hängt in "der Luft".
>  - Pullup an RxD
Welcher ist das? Mein Verständnis sagt mir, daß es sich um den RX0 am 
AVR handelt. Ein Pullup hier ändert auch nichts.

: Bearbeitet durch User
von Andreas F. (dresi)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin jetzt kurz davor, die Hardware als Problemquelle auszuschließen.
Nach einem weiteren Durchlauf - diesmal mit funktionierendem Display - 
kommt die Erkenntnis, daß sich NICHTS geändert hat.

Alle Slaves arbeiten wie erwartet, nur der, an dem das Display hängt, 
macht Zicken (spontan auftretende falsche Zeichen).

Werde wohl doch den Entwickler des Protokolls kontaktieren. (es sei 
denn, hier hat noch jemand eine zündende Idee.

Zur Belohnung habe ich mal ein Foto von meinem neuen Masterboard (ein 
Shield für den "Arduino MEGA 2560 R3". Zu sehen sind die drei MAX487 mit 
Failsafe-Widerständen, die drei Pull-Downs für die TXenable und die drei 
RJ45-Buchsen.

Jetzt will ich aber hören: "Das haste fein gemacht". :)

: Bearbeitet durch User
von posti (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi

Andreas F. schrieb:
> Jetzt will ich aber hören: "Das haste fein gemacht". :)

Schaut doch nett aus :)

Hast Du von der Display-Platine noch einen Ersatz da und Diesen 
versuchshalber benutzt, oder Beide gleichzeitig?
Klar können vereinzelt Bytes verstümmelt ankommen, das muß man per 
Prüfsumme ect.pp. rausfiltern und die Übertragung neu anstoßen.
Wenn der Slave nicht selber 'oha, Fehler' senden darf, muß der Master 
abfragen, ob die Übertragung korrekt war, worauf der Slave dann ja 
antworten darf.
Oder ähnlich den Time-Slots beim 1-wire, daß jeder Slave, Der Probleme 
mit dem Paket hatte, den Fehler anzeigen kann, vll. wäre das Paket ja 
für Ihn gewesen und mit anderer Empfänger-ID könnte die Prüfsumme ja 
vll. passen.

MfG

von Andreas F. (dresi)


Bewertung
0 lesenswert
nicht lesenswert
posti schrieb:
> Hast Du von der Display-Platine noch einen Ersatz da und Diesen
> versuchshalber benutzt, oder Beide gleichzeitig?
Das ist eine SUPER Idee :)
Muss nur erst noch ein display-kompatibles Slaveboard bauen. Das ist 
kein Problem, muss nur die Zeit finden (dauert inkl. Bohren und Löten 
einen entspannten Tag). LCDs habe ich auch noch liegen.
Dann könnte ich sehen, ob auf beiden der gleiche Schrott läuft und wäre 
der Quelle einen Schritt näher. Danke.
> Klar können vereinzelt Bytes verstümmelt ankommen, das muß man per
> Prüfsumme ect.pp. rausfiltern und die Übertragung neu anstoßen.
> Wenn der Slave nicht selber 'oha, Fehler' senden darf, muß der Master
> abfragen, ob die Übertragung korrekt war, worauf der Slave dann ja
> antworten darf.
Meines Wissens gibt es (noch) keine Prüfsumme. Das Projekt ist noch in 
der Beta-Phase und ich bin einer der Minen-Hunde (Ian: Nicht böse sein. 
Mache ich sehr gerne.)
> Oder ähnlich den Time-Slots beim 1-wire, daß jeder Slave, Der Probleme
> mit dem Paket hatte, den Fehler anzeigen kann, vll. wäre das Paket ja
> für Ihn gewesen und mit anderer Empfänger-ID könnte die Prüfsumme ja
> vll. passen.
Das Problem ist, daß ich (aus welchem Grund auch immer) dem Slave durch 
Abtrennen des TX das Senden verbieten muss. Sonst bleibt das LCD dunkel.
Woran das liegt, habe ich auch noch nicht herausgefunden. Eventuell gibt 
es da Stress zwischen den "RS485"- und Adafruit-Bibliotheken (von deren 
Inneren ich NULL Ahnung habe).
Das liegt aber nahe... Wieso bin ich da nicht schon eher drauf gekommen, 
die Probleme begannen ja mit dem Display. Kann aber auch sein, daß die 
Probleme dadurch erst sichtbar wurden.

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]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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