mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS-485-Bus produziert bei Leitungsverlängerung nur noch Datenmüll


Autor: Michael Matthes (mima)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
'zusammen,
ich habe Probleme bei folgendem Szenario: Ein Atmega 8 soll als 
"Außeneinheit" Daten sammeln und auf Abfrage (die Inneneinheit sendet 
ein "w", dann Antwort) über einen RS-485-Bus (auf beiden Seiten 
MAX485ECPA, 9600 Baud) an eine Inneneinheit (Atmega 644) liefern. Der 
Bus ist an beiden Seiten mit je 120 Ohm terminiert (direkt am MAX485), 
weitere Verbindungen der beiden Busleitungen (Pull-Ups/-Downs o.Ä.) 
bestehen nicht. Auf meinem Schreibtisch liegend mit ca. 25 cm Litze 
zwischen beiden Einheiten funktionierte soweit alles problemlos und 
stabil über mehrere Tage. Dann habe ich die Außeneinheit an ihren 
Bestimmungsort verbracht, nun sind aus den 25 cm Testlitze ca. 60m 
Twisted-Pair-Adern geworden (die ersten ca. 40m in Cat7-Leitung, dann 
20m Cat5E). In diesem Kabel läuft nur die Versorgungsspannung für die 
Außeneinheit (12 Volt DC auf der orange/weißen) und die RS-485-Leitung 
halt (auf blau/weiß), sonst nichts. Ab diesem Moment jedenfalls 
funktioniert es nicht mehr, ich habe mir testweise (Bascom-Code siehe 
unten) das, was über den Bus ankommt, auf dem LC-Display visualisieren 
lassen bzw. den Bus mit dem Oszi (kein Speicheroszilloskop leider) 
überwacht.
Es sieht so aus, dass das "Abfrage-w" von der Außeneinheit erkannt wird, 
diese dann auch auf Sendung geht und ihre Daten sendet, diese kommen 
innen aber als relativer Datenmüll an. Es handelt sich um 
Semikolon-separierte Zahlenwerte, zwischendrin lassen sich einige 
Ziffern und auch mal Semikolon erkennen, ansonsten so ziemlich alles, 
was der Zeichensatz zu bieten hat. Sende ich kein w, bleibt alles stumm, 
ich denke also, lediglich beim Empfangen oder Senden der Rückantwort von 
der Außeneinheit besteht ein Problem.

Any ideas? ;-)
Ich hatte mal testweise versucht (weil ich es an einigen Stellen im 
Internet gesehen habe, nicht im Datenblatt des Max485 allerdings), eine 
Ader des Busses über 1kOhm an Plus und die andere über 1 kOhm an Minus 
zu legen, bringt aber keine Besserung.



Hier noch zweimal der Programmcode:


Außeneinheit:
$regfile = "m8def.dat"

$crystal = 8000000

Config 1wire = Portb.1


$baud = 9600
$hwstack = 32
$swstack = 10

$framesize = 40



On Urxc Rx_cmd

Enable Urxc

Enable Interrupts


Dim Readbus As String * 1

Readbus = ""

Bus_tx Alias Portb.2

Config Bus_tx = Output

Bus_tx = 0


Dim Ausgabe As String * 100

Ausgabe = ""



Do


'...weiterer, als funktionell getesteter Programmcode, der u.A. den String Ausgabe zusammensetzt


   While Readbus = "" And Laeufe < 200

      Laeufe = Laeufe + 1

      Waitms 10

   Wend

   Laeufe = 0  'so etwas wie Wait 2, allerdings wird kürzer gewartet wenn über den Bus der Befehl, etwas zu senden ("w") kam



   If Readbus = "w" Then

      Disable Urxc

      Bus_tx = 1

      Waitus 40

      Print Ausgabe

      Bus_tx = 0

      Readbus = ""

      Enable Urxc

   End If

   Readbus = ""


Loop


End



Rx_cmd:

   If Usr.rxc = 1 And Udr = 119 Then Readbus = "w"

Return



Inneneinheit:
$regfile = "m644def.dat"

$baud = 9600

$crystal = 16000000

$hwstack = 300

$swstack = 400

$framesize = 400



On Urxc Serrut

Enable Urxc

Enable Interrupts



Bus_tx Alias Portd.2

Config Bus_tx = Output

Bus_tx = 0


Dim Readbus As String * 30

Readbus = ""


Dim Lauf As Word

Lauf = 0


Dim Rxbs As Word

Rxbs = 0


Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.4 , Db6 = Porta.0 , Db7 = Porta.1 , E = Portb.2 , Rs = Portb.1

Config Lcd = 20 * 2

Cursor Off

Cls



Do

   Readbus = ""

   Bus_tx = 1

   Waitus 40

   Print "w"

   Bus_tx = 0

   Wait 5 'zum Testen willkürlich 5 Sekunden, vollkommen egal ;-)

   Locate 1, 1
   Lcd Readbus


Loop



Serrut:

   Dim Rxb As Byte

   Rxb = Inkey()

   Readbus = Readbus + Chr(rxb)

   Rxbs = Rxbs + 1

Return

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der zu den Signalen gehoerende GND wurde auch durchgezogen und verbunden 
? Denn je nach Treiber ist der zulaessige Gleichtaktberein +-7V oder so. 
Wenn der velassen wird, ist Schluss mit richtigen Daten.

Also mach das mal.

Autor: Michael Matthes (mima)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

jop, Außen- und Inneneinheit hängen an denselben 12 VDC (jeweils über 
nen 7805, aber da sind die GND ja trotzdem alle durchverbunden).

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann muesste man mal mit einem Scope die Signale nachmessen.

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du direkt an deine MAX Kondensatoren an der Versorgung?
Wenn nein dann nachrüsten.
Ein eigener 100 nF Keramik ist muß,
ein kleiner Tantal oder Elko (z.B. 2µ2) zusätzlich kann helfen.

Aber wirklich direkt am MAX, nicht irgendwo am Stabi im anderen
Leiterplatteneck.

hans

PS: Du hast doch hoffentlich Quarze als Taktgeber?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte bei 9600 Baud eigentlich unkritisch sein, aber: Wie ist die 
Verbindung zwischen Cat.5E und Cat.7 ausgefuehrt? (Stichwort: 
Reflexionen)

Autor: Alexander Schmidt (esko) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spendier dem Datenbus einen eigenen GND. Genug Adern hast du ja.
Ein Schaltplan wäre gut wenn man helfen soll.

Autor: Michael Matthes (mima)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für den vielen Input.

Um mal ein paar Sachen zu erschlagen: Ja, es werden Quarze benutzt (8 
MHz außen, 16 MHz innen)

Kondensatoren sind auch da, ich beschalte eigentlich immer wie in den 
Datenblättern empfohlen und sowohl am Atmega als auch am Max sitzen 
direkt an den Pinnen entsprechende 100nF nach GND zur Entstörung.

Ich habe das Netzwerkkabel nicht hf-mäßig bzgl. Reflektionen gemessen, 
erschien mir bislang etwas nach Overkill. Vielleicht geht es auch ohne 
;-)

Ich werde nochmal versuchen, die GNDs der MAX485 außen und innen direkt 
mit einer zusätzlichen Ader zu verbinden, kann aber noch etwas dauern, 
werde dann nachberichten.

Schaltplan liefer ich nach, existiert nur handgezeichnet und gerade kein 
Scanner da.

Autor: Andreas Vogt (tico)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prüf doch mal, ob beim Senden die Spannung am MAX485 der Außeneinheit 
einbricht. Eine kalte Lötstelle oder Kontaktprobleme beim Transport der 
Versorgungsspannung über das lange Kabel zur Außeneinheit könnten dafür 
die Ursache sein.

Autor: MAX321 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab' zwar keine konkrete Idee zur Fehlerursache, aber ich kann 
bestätigen, dass grundsätzlich Dein Aufbau funktionieren sollte. Ich 
habe hier problemlos Ähnliches im Einsatz: 2 bequarzte Mega32 bei 9k6 
und MAX485, Bus terminiert mit 120. Daten auf einem Aderpaar und ein 
Paar mit 9V, die vor Ort 78L05 werden. Hier liegen ca. 50m J-Y(ST)Y, die 
über eine CAT5- UP-Dose dann in ein CAT7-Patchkabel von nochmal 30m 
übergehen.
No Problems...

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