Forum: Mikrocontroller und Digitale Elektronik RS485 Bus tot


von Kurt (Gast)


Lesenswert?

Hallo,

erstmal vielen Dank für das tolle Forum hier, ich habe hier schon viel 
nachgelesen und Ihr habt mir, ohne dass Ihr es gemerkt habt, toll weiter 
geholfen.
Jetzt habe ich aber ein Problem, an dem ich nicht weiter komme.

Ziel:
Ich möchte mit Arduino nano und RS485 MAX485 Bausteinen (die typischen, 
die man komplett mit Stiftleiste 2 x 4 in der Bucht bekommt,
http://www.ebay.de/itm/5PCS-MAX485-RS-485-Module-TTL-to-RS-485-module-for-Arduino-Raspberry-D-/331359788902?hash=item4d26951f66:g:qEcAAOSwGvhT8yic
) ein Netzwerk für die Hausautomation aufbauen. Über ICSC (Inter Chip 
Serial Communication, siehe GitHub,
https://github.com/MajenkoLibraries/ICSC
) sollen Telegramme verschickt werden (Tür offen, Tür zu etc. als 
Zahlenkombis).

Zunächst meine Schaltung:
Ganz einfach, Arduino hängt mit SoftwareSerial an Pin D2-4 (D2 = RO/Rx 
TTL, D3 = DEPin, D4 = DI/Tx TTL.

Testschaltung hat auch gut funktioniert, alles schön. Habe mir dann neue 
Platinen bestellt und alles aufgelötet. Jetzt die Enttäuschung: Sobald 
Die neue Platine unter Spannung steht, gibt es keinen Widerstand mehr 
zwischen A und B zu messen. In Ruhe, also stromlos, sind es 120 Ohm.
Bei der Spannungsmessung zwischen A und B zeigt es meist 0 V, oder 
schlägt je nach Treffer auf die Spitze des Signals auf bis zu 3 V 
Spannungsdifferenz aus.
Kurzschlüsse auf den Platinen habe ich ausgeschlossen, mehrmals 
nachgemessen.
DE Pin sollte eigentlich auf low sein, habe es jedenfalls mehrmals so 
programmiert.

Fakt ist jedoch, dass weder in die eine noch in die andere Richtung 
irgendein Signal gesnifft werden kann. Sobald ich aber Kanal A 
ausstecke, geht der Bus wieder über den alten Baustein.
Wenn ich den DEPin mit dem Voltmeter messe, dann zeigt er zwischen Gnd 
und D2 0 V an, also Gnd, und springt dann einmal auf 5 V max, wenn er 
sendet. DE-Pin funktioniert also auch wie gewollt.

Jetzt habe ich das alte Prototypmodul nochmal angeschaut, hier zeigte 
sich, dass ich die Verbindung zum Widerstand 120 Ohm zwischen A und B 
beim Auslösen der Drahtverbinder beschädigt hatte und somit zwischen A 
und B keine 120 Ohm Widerstand sind. Mit diesem Modul funktioniert der 
Bus zumindest in eine Richtung, während mit den neu gekauften und 
schadfreien Modulen nichts funktioniert....

Was ist der Fehler?
Zur Info: Auf 50 cm Kabel habe ich mir die Terminierung gespart, auf 20 
m Kabel habe ich tatsächlich die Enden terminiert mit 120 Ohm zwischen A 
und B und 390 Ohm zwischen V und A resp. B und Gnd.

Ich wäre Euch für Tipps sehr dankbar, gerne messe ich noch mal alles 
nach.

Bis bald Kurt

von Wolfgang (Gast)


Lesenswert?

Die GPIO Pins des RaspPi arbeiten IMHO mit 3.3V und deine RS485 Module 
mit 5V. Wie hast du sicher gestellt, dass die sich einig werden?

von Sven L. (svenl)


Lesenswert?

Hallo,

wie stellst Du sicher, dass die maximale Eingangsspannung an Deinen 
RS-485-Transceivern nicht überschritten wird? Die MAX485 sind IMHO nicht 
failsafe. Eine bessere pinkompatible Wahl wäre LT1785.

Auch wenn Du DC-Biasing verwendest, so halte ich das mitführen einer 
GND-Verbindung bei RS-485 für besser. DC-Biasing kannst Du dann an einer 
einzigen Stelle am Bus machen.

Dein Transceiver sollte natürlich die Logikpegel Deiner UART verstehen. 
Bei 5 V Pegel kann es mit 3,3 V TTL knapp werden (und wird es meist 
auch).

Viele Grüße!

Sven

von Kurt (Gast)


Lesenswert?

Hallo Wolfgang und Sven,
Das ist ein guter Hinweis. Immerhin hat der exakt identische Aufbau im 
Prototypen funktioniert, ohne 5->3,3 v wandler.
Ich arbeite mit dem Arduino nano und SoftSerial, ob dort die Pegel auf 
3,3 V liegen weiß ich nicht. Alle Tutorials haben diesbezüglich keine 
Erweiterungen vorgesehen. Also gehe ich davon aus dass Arduino und Rs485 
Module auf 5 V laufen. Ohne Oszi kann ich das ja auch schlecht messen, 
oder reicht einfach permanent ein Signal zu senden und dann zu messen?
Probier ich heute Abend aus.
Habt ihr sonst noch eine Idee? Ist doch seltsam dass alles stehen bleibt 
wenn Kanal A angeschlossen ist. Ist Kanal B ohne A dran, gibt es im Rest 
vom Bus kein Problem - außer dass natürlich das Modul ohne A nicht dabei 
ist...
Danke und Viele Grüße Kurt

von Pete K. (pete77)


Lesenswert?

Kurt schrieb:
> Ohne Oszi kann ich das ja auch schlecht messen

Wenn Du wirklich in die Elektronik-Bastelei einsteigen möchtest, dann 
kaufe Dir zumindest ein Multimeter mit dem man Spannungen, Stromstärke 
und Widerstände messen kann.
Oszi ist nicht unbedingt notwendig, aber manchmal hilfreich.

P.S.: Sehe gerade, Du hast ja ein Voltmeter...

Lies Dir mal die Datenblätter Deiner benutzten Bausteine durch, da steht 
alles drin.
Und ja, manchmal werden aus China auch Fakes geliefert, die nicht 
funktionieren.

: Bearbeitet durch User
von Sven L. (svenl)


Lesenswert?

Der Arduino nano sollte mit 5V laufen...

Du kannst die RX- und TX-Leitungen direkt ohne Kommunikation messen. 
Dort sollte als Ruhepegel immer logisch "1" anliegen, also in Deinem 
Falle 5 V.

Vielleicht fängst Du dort erst einmal an?

Viele Grüße!

Sven

von Harald (Gast)


Lesenswert?

Ich benutze die selben Bausteine.
Bei mir sind DE und  RE verbunden (gebrückt).

Gruß Harald

von Kurt (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, vielen Dank für die Tipps und Anregungen.
Also klar, ein Voltmeter habe ich, damit auch alles mal nachgemessen 
(siehe unten).g
Ich habe mich aufgrund der ausgeschlossenen Fehler noch mal mit dem 
Pinout vom Arduino nano beschäftigt - und da gibt es tatsächlich einen 
Unterschied zwischen Pin 3 und 4. Bei den Guides von SoftSerial steht 
zwar immer, man kann jeden Pin benutzen, aber das scheint nicht ganz zu 
stimmen. Pin D2 und D3 haben eine INT0 resp. INT1 Kennzeichnung, D4 
nicht. Außerdem nehmen die meisten Tutorials D2 und D3.
Jedenfalls habe ich jetzt die Pinbelegung geändert (schade, Platinen 
sind schon alle geätzt worden), sodass jetzt RxPin = D2 und TxPin = D3, 
dePin = D4 (DE und RE sind natürlich verbunden, danke Harald).
Also, hier sind die Ergebnisse meiner Messungen:
TxLeitung (D3) in Ruhe: 4,6 V, fällt beim Senden ab.
RxLeitung (D4) in Ruhe: 4,6 V, bleibt immer, weil empfängt ja nie was...
rs485-Kanal A in Ruhe: 1,9 V, beim Senden bis zu 2,9 V
rs485-Kanal B in Ruhe: 1,9 V, beim Senden bis zu 1,0 V
dePin in Ruhe: 0 V, beim Senden 0,7 V (ich glaube, da ist mein Voltmeter 
auch nicht schnell genug um die maximale Spitze zu sensen).

Also nach Euren Angaben müsste das alles passen. Ist nur die Frage, 
warum auf der anderen Seite nichts ankommt...
Ich habe jetzt auch noch mal verschiedene Baudraten durchprobiert - 
keine Änderung. Die Terminierung auch 50 cm Länge habe ich mir noch 
immer verkniffen... Aber irgendetwas sollte auch ohne Terminierung 
ankommen.

Ich werde weiter Lösungen suchen, wenn jemand noch eine Idee hat, gerne. 
Ich werde auf jeden Fall berichten, was weiter passiert.

Zur Illustration habe ich mal die Bilder meines Moduls angehängt, dann 
hat man wenigstens eine Vorstellung, wie das Produkt aussieht.

Viele Grüße Kurt

von Sven L. (svenl)


Lesenswert?

Steuerst Du auch die DE- und /RE-Pins korrekt an?

Bei Halbduplex kann man die verbinden, für 4-Draht RS-422 lässt man 
Empfänger und Receiver aktiv.

Baudrate korrekt eingestellt? Baudratenquarz verwendet?

Viele Grüße!

Sven

von Kurt (Gast)


Lesenswert?

Hallo Sven,
hab nachgemessen, RE und DE Pin sind verbunden und sobald ich auf senden 
gehe, ist die Spannung bei 5 V, sonst bei 0 V. Also Low beim Lauschen, 
High beim Senden, so wie es sein soll. Ich werde jetzt noch einmal einen 
Prototyp aufbauen und von da aus weiter auf Fehlersuche gehen.

Stutzig stimmt mich noch immer, dass der rs485 Transceiver, den ich 
"kaputt" gemacht habe (kein Widerstand mehr zwischen A und B, siehe 
oben) offensichtlich super sendet und empfängt, während alle 
fehlerfreien Bausteine keine Kommunikation zeigen...
Ich habe aber auch noch Teile aus einer anderen Charge, die werde ich 
auch testen. Ich melde mich dann.

Viele Grüße Kurt

von 485 (Gast)


Lesenswert?

>den ich "kaputt" gemacht habe (kein Widerstand mehr zwischen A und B, siehe
>oben)

Messen an Halbleitern ist anders als Messen an ohmschen Widerständen. Es 
macht keinen Sinn zwischen A und B zu messen.

von Kurt (Gast)


Lesenswert?

Hallo,
ich habe die letzten zwei Tage damit verbracht, zwei Teile komplett neu 
aufzubauen und zu testen.
Auch wenn ich vorher schon alles drei mal gecheckt hatte, war es 
wichtig, alles noch einmal anzuschauen.
Zu meiner Schande muss ich gestehen, dass möglicherweise ein Vertauschen 
der rx tx Pins ausschlaggebend für den Fehler war, wobei ich nach 
mehreren Stunden natürlich soviele Änderungen gemacht hatte, das nicht 
mehr klar ist, ob das schon vorher die Ursache war.
Ich kann also zusammenfassend für ähnlich geplagte nur empfehlen, dass 
es sich lohnt, im Zweifelsfall mit einem neuen Baustein komplett von 
Null zu starten und die Testumgebung ohne Annahme von "hat doch früher 
auch funktioniert" aufzubauen.

In diesem Sinne vielen Dank Euch allen für die wertvollen Tipps, die ich 
bekommen und auch umgesetzt habe. Außerdem habe ich viel gelernt!

Viele Grüße und bis bald, ich bin ja noch am Basteln - und versprochen, 
ich check zuerst die rx tx Pins ;-)

Kurt

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.