Forum: Mikrocontroller und Digitale Elektronik Störungen auf einer RS485 Übertragung


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 Markus B. (up_marki)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Ich habe ein xmega-board von Atmel. Dies liest mir 1-Wire 
Temperatursensoren aus und gibt sie dann über RS485 (LTC1480) an eine 
SPS weiter. Siehe Schaltplan.

Nun mein Problem:
Die Daten in der SPS kommen nur teilweise korrekt an. Falsche Zeichen.

Das interessante daran, ich habe zwei Atmel-boards (Probe mit nur einem, 
nicht gleichzeitig beide), beim einen kommen die Daten richtig an. Beim 
anderen nur teilweise und weiter komisch - wenn ich bei dem "Nicht 
korrekten Board" mit dem Multimeter über den RS485 zwischen A und B 
Spannung messe, dann kommen die Daten richtig. Multimeter weg --> Daten 
wieder falsch.

Ich vermute mein Problem mit nicht korrekter Hardware, vorallem auf der 
RS485 Leitung. Entstörung notwendig ???
Oder Board defekt, oder die FUSE-Bits nicht korrekt Taktfrequenz? (habe 
ich zwar verlichen) oder habe ich welche übersehen?


Ein paar hoffentlich wichtige Infos:
- das ganze läuft mit einer Baudrate von 9600 (sollte doch nicht heikel 
sein?)
- RS485 -  als Subprint auf Atmelboard mit gelöteter Lochkarte gesteckt
- Leitungen RS485 wie im Schema beidseitig mit 120 Ohm abgeschlossen 
(auch schon verschiedenes probiert)
- Leitungen kürzer als 2 Meter

Was ich schon gesehen habe, dass zwischen VCC und A und B und GND je ein 
560 Ohm Widerstand drin ist. Macht das Sinn?
Habe ich auch probiert, hat mal bisschen besser funktioniert aber nicht 
wirklich die Lösung.

Vielen Dank für Euere Tips und Hinweise.

Viele Grüsse

Marki

: Bearbeitet durch User
von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Markus B. schrieb:
> Siehe Schaltplan.
Wie sind die "Massen" der Teilnehmer miteinander verbunden? So wie es 
gezeichnet ist, ist das Ganze irgendwie potentialfrei...

Und wenn die "Massen" miteinander verbunden sind: gibt es da irgenwelche 
Ausgleichströme?

: Bearbeitet durch Moderator
von Volker B. (Firma: L-E-A) (vobs)


Bewertung
1 lesenswert
nicht lesenswert
Masseverbindung zwischen SPS und Controller existiert?

Grüßle,
Volker.

von Jim M. (turboj)


Bewertung
1 lesenswert
nicht lesenswert
Masseverbindung? Busvorspannung beim RS485 vorhanden?

von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
Lothar M. schrieb:
> Und wenn die "Massen" miteinander verbunden sind: gibt es da irgenwelche
> Ausgleichströme?

Hallo
Habe mal die Massen verbunden. Keine Besserung.
Ausgleichströme? Wenn ich ein Multimeter in die Ausgleichsleitung hänge, 
messe ich 115uA DC, und 25uA AC (True RMS). Das sagt mir jetzt gar 
nichts aus. Dir/Euch schon?

Danke und Gruss
Marki

von A. S. (achs)


Bewertung
0 lesenswert
nicht lesenswert
Wenn ein Board funktioniert, dann kannst Du doch
- beide vergleichen
- kreuztesten
- die Reserven des guten herausfinden (z.B. a) 120R entfernen, b) auf 
50R absenken, sollte trotzdem funktionieren, ebenso bei 100m Leitung)

Wenn der eine satt funktioniert, der andere nicht, dann ist einer 
defekt. Wenn der gute bei leichten Störungen auch nicht läuft, gibt es 
einen gravierenden Fehler, z.B. die Baudrate (falscher Teiler und 
dadurch 3% Versatz).

Oder einfach irgendwo ein Oszi ausleihen, dann hat alle Spekulation ein 
Ende

von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
Hallo
Danke noch mal allen schreibern.

Habe noch mal einiges probiert vor allem mit GND-Verbindung und 
korrektes Erden der SPS (da Testaufbau war das nicht richtig) Aber alles 
hilft nichts.

In etwa so sieht ein fehlerhafter String in der SPS aus:
'I$02’8 ²E $02‚0 ‚ 0$02D 0L‚$02= $0217I$02’8 (

... und so ein Korrekter.
'ID: 28 56 6E 29 00 00 00 D2 T: 0112 =   17.1C;'

Folgende Sachen verstehe ich nicht:
Bei zwei verschiedenen uC Boards funktioniert es beim einen einwandfrei 
beim anderen nicht. (SPS und Tochterplatine auf uP mit RS485-Komponenten 
immer die selbe).
Wenn ich beim nicht funktionierenden mit einem RS485-USB-Konveter 
parallel die Daten abgreife, zeigt der USB-Konverter die Daten korrekt 
an, während in der SPS die falschen ankommen.

Der eine oder andere denkt jetzt vielleicht, nimm doch das Board welches 
funktioniert und gut.
Ja - aber da habe ich ein schlechtes Gewissen, dass das Funktionierende 
plötzlich auf Grund von Störungen auch nicht mehr geht.

Der ganze Aufbau soll mir schon dauerhaft zuverlässige Temperaturen für 
Raumklimasteuerung liefern.

Die Signale auf dem Bus A/B habe ich mal mit Oszi angesehen. Könnte 
nichts negatives feststellen und auch keine Unterschied zwischen den 
beiden Boards.

Vielleicht habt ihr noch weiter gute Ideen was ich testen kann.

Meine Frage weiter oben bleibt offen. Was meint Jim Meba mit 
"Busvorspannung"?

Wünsche ein frohes Wochenende!

Gruss Marki

von Frank (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Markus B. schrieb:
> Meine Frage weiter oben bleibt offen. Was meint Jim Meba mit
> "Busvorspannung"?

Er meint wahrscheinlich die Fail-Safe Schaltung die du selbst weiter 
oben beschrieben hast mit den 560 Ohm Widerständen.

Was für RS485 Tranceiver haben denn beide Boards? Mit was für Spannungen 
werden die betrieben? 3V3 oder 5V?

Masse wurde ja schon ausreichend erwähnt.

Twisted Pair Leitungen verwendet?
Schirmung ordentlich aufgelegt?

Stimmt bei beiden Boards die Baudrate korrekt!?

von Andi B. (andi_b2)


Bewertung
0 lesenswert
nicht lesenswert
Ungenaue Baudrate ev. vom internen RC Oszillator erzeugt? Oder nimmst du 
den Takt vom Quarz? Und hast du das Timing auch exakt nachgemessen? 
Teiler falsch?

von Ruediger A. (Firma: keine) (rac)


Bewertung
0 lesenswert
nicht lesenswert
Kannst Du ein Oszillogramm auf dem Bus vergleichend aufnehmen?

von Forist (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Frank schrieb:
> Mit was für Spannungen werden die betrieben? 3V3 oder 5V?

Guckst du hier:

Markus B. schrieb:
> RS485_1.png

von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
Forist schrieb:
> Frank schrieb:
>> Mit was für Spannungen werden die betrieben? 3V3 oder 5V?
>
> Guckst du hier:
>
> Markus B. schrieb:
>> RS485_1.png

:-) jaa - genau guckst Du in meine Schema, am Anfang des Beitrages, da 
steht drin, dass es sich um den LTC1480 handelt welcher mit 3,3 Volt 
betrieben wird.

Was ich ergänzt habe ist der Common, sprich GND - GND Verbindung SPS - 
uP

Grüsse
Marki

: Bearbeitet durch User
von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle Helfer, Danke!

Dieser Meinung bin ich auch langsam, dass was mit dem Timing nicht 
stimmt. Unterschied zwischen den beiden Boards.

Leider hatte ich fast keine Zeit mehr um weiter zu suchen.

Was ich gemacht habe: in der main_loop alles auskommentiert und nur ein 
Pin welcher somit mit maximaler Frequenz toggelt. Dabei habe ich einen 
Unterschied von Board 1 zu Board 2 von etwa 0.2us gemessen, dass sollte 
nicht das Problem sein? Oder?

Weiss aber grade nicht wie meine Baudrate gemacht wird. Habe da "alten 
Code" verwendet.

Denke mir, dass ich ein Register welches in diesem Zusammenhang relevant 
ist nicht schreibe. So dass es beim einen Board passt bei anderen nicht.

Oder eben der Oszillator.


Hier mal die Initialisierungsroutine des USART, vielleicht erkennt hier 
jemand gerade ein Fehler.

Sollbaudrate: 9600, Prozessortakt 2MHz, ein Quarz auf dem Board 32768??? 
Wohl für Uhrfunktionen gedacht.

1
void usart_init(void)
2
{
3
  /* This PORT setting is only valid to USARTC0 if other USARTs is used a
4
   * different PORT and/or pins is used. */
5
  /* PIN3 (TXD0) as output. */
6
  USART_IO_PORT.DIRSET = USART_TxD_PIN_m;
7
8
  /* PC2 (RXD0) as input. */
9
  USART_IO_PORT.DIRCLR = USART_RxD_PIN_m;
10
11
  /* USARTC0, 8 Data bits, No Parity, 1 Stop bit. */
12
  USART_Format_Set(&USART, USART_CHSIZE_8BIT_gc, USART_PMODE_DISABLED_gc, false);
13
14
  /* Set Baudrate to 9600 bps:
15
   * Use the default I/O clock fequency that is 2 MHz.
16
   * Do not use the baudrate scale factor
17
   *
18
   * Baudrate select = (1/(16*(((I/O clock frequency)/Baudrate)-1)
19
   *                 = 12
20
   */
21
  USART_Baudrate_Set(&USART, 12 , 0);

Muss mal die Datenblätter des Bord's und Prozessors studieren.
(Bord: Atmel XMEGA-A3BU-XPlained)

Wünsche euch viel frohes
up_Marki

: Bearbeitet durch User
von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
Ruediger A. schrieb:
> Kannst Du ein Oszillogramm auf dem Bus vergleichend aufnehmen?

Hallo Ruediger

Habs schon mal angeschaut, aber habe mit dem Triggern Probleme, und die 
Daten sind auch immer unterschiedlich.

Werd wohl mal immer den selben String/Char schicken und dann probieren 
zu Oszilloskopieren.

Gruss
Markus

von Cyborg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Markus B. schrieb:
> Die Daten in der SPS kommen nur teilweise korrekt an. Falsche Zeichen.

Ich würde mal die Forensuche benutzen, denn das Problem gabs schon
öfters. Was deiner Schaltung leider nicht zu entnehmen ist, ist
die Versorgung. Die muss erst mal vervollständigt werden und zwar
ALLES.

von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
... sorry hier noch weiterer Code der Schnittstelle:
1
#define USART_Format_Set(_usart, _charSize, _parityMode, _twoStopBits)(_usart)->CTRLC = (uint8_t) _charSize | _parityMode | (_twoStopBits ? USART_SBMODE_bm : 0)
2
#define USART_Baudrate_Set(_usart, _bselValue, _bScaleFactor)(_usart)->BAUDCTRLA =(uint8_t)_bselValue; (_usart)->BAUDCTRLB =(_bScaleFactor << USART_BSCALE0_bp)|(_bselValue >> 8)

und diesen hier...

1
* usart_func.h
2
3
4
#ifndef USART_FUNC_H_
5
#define USART_FUNC_H_
6
7
#include "avr_compiler.h"
8
9
#define USART      USARTC0    // USART PORT number
10
#define USART_IO_PORT    PORTC    // USART PORT
11
#define USART_RxD_PIN_m    PIN2_bm    // USART RxD PIN mask
12
#define USART_TxD_PIN_m    PIN3_bm    // USART TxD PIN mask
13
14
void usart_init(void);
15
void usart_enab(void);
16
void usart_disab(void);
17
void usart_send_byte(int8_t b);
18
void usart_send_string(char *s);
19
20
#endif /* USART_FUNC_H_ */

von Cyborg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mir ist an deiner Schaltung aufgefallen, dass du direkt auf eine SPS
gehst. Hat die denn einen Empfängerbaustein für RS485? Schon mal
die Typical Applikation vom LTC 1480 Datenblatt angeschaut, wie
so eine Datenschnittstelle aussehen muss?

von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
Cyborg schrieb:
> Mir ist an deiner Schaltung aufgefallen, dass du direkt auf eine SPS
> gehst. Hat die denn einen Empfängerbaustein für RS485? Schon mal
> die Typical Applikation vom LTC 1480 Datenblatt angeschaut, wie
> so eine Datenschnittstelle aussehen muss?

Hallo Cyborg

Danke für die Info.
Genau - mein Schema entstand aus der "Typical Application" aus dem 
Datenblatt. Wobei mein Slave eben die SPS ist und nicht ein zweiter 
LTC1480. Die SPS ist eine WAGO mit extra RS232/RS485 Karte Art.Nr. 
750-653/003

Was ich nicht habe, ist Datenflusscontrolle und Adressierung. Der 
uController "blappert" einfach vor sich hin und die SPS hört zu.

Denke wenn ich hier ein Problem hätte, würde es nicht bei einem 
Controllerboard gehen und beim anderen nicht.
Auch mal erwähnt, bei dem Board bei welchem es nicht geht, ist Nagelneu 
aus Verpackung. Das welches geht, hat schon einige Tests hinter sich. 
Also müsste quasi ein Produktionsfehler vorliegen. (Auf ESD achte ich so 
gut als möglich.) Da ich schon mal deswegen ein uP-Board in den Himmel 
gejagt habe...

Allen einen guten Tag.

Marki

: Bearbeitet durch User
von Ruediger A. (Firma: keine) (rac)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der typische Ausschlusstest (wenn möglich) besteht darin, stückweise 
Komponenten gegeneinander auszuwechseln und zu gucken, mit welchem Teil 
das Problem wandert, ist das von den boards her möglich?

von Marco H. (damarco)


Bewertung
0 lesenswert
nicht lesenswert
Wirklich sicher das die SPS die Datenrichtung nicht plötzlich umdreht ? 
Durch Ungereimtheiten wer wann senden darf entsteht der meiste Quark.

von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
Marco H. schrieb:
> Wirklich sicher das die SPS die Datenrichtung nicht plötzlich umdreht ?
> Durch Ungereimtheiten wer wann senden darf entsteht der meiste Quark.

Hhmm sicher ist nur der Tod ;-)
Aber die SPS Karte ist eine Vollduplex RS485 und ich habe nur RX 
angeschlossen, des weiteren sendet mein SPS-Programm auch keine Daten...

Darum denke ich nicht, dass das ein Problem ist. Aber werd das nochmal 
checken...

Vielen Dank für den Hinweis!

Gruss
Marki

von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

Irgend etwas ist hier im Thread komisch...

Sven K. hat eine Antwort geschrieben, welche hier nicht angezeigt wird. 
Trotzdem konnte ich sie einmal lesen. Ist da eine Verzögerung oder hat 
er sie gelöscht???

Auf jedenfall...

> USART_Baudrate_Set(&USART, 12 , 0);

Sven meinte für 9600 Baud muss ich anstatt 12 die 13 einsetzen. Gesagt, 
getan und siehe da, es sieht ganz gut aus.

Jedenfalls hat Sven wohl den Fehler gefunden. Ich werd's nochmal mit 
Datenblätter prüfen. Und falls korrekt überdenken, wieso ich auf 12 
gekommen bin.

Es funktioniert jetzt bei beiden Board's war wohl beim einen knapp an 
der Funktionsgrenze und beim anderen daneben.

Melde mich dann nochmal...

Danke schon mal an alle.

Marki

von Sven K. (svenk)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Markus,

ja ich hatte es berechnet - aber wieder verworfen - weil ich dachte Du 
hast das bestimmt schon 10mal geprüft und ich mich verrechnet.

Wenn man auf die schnelle hier die Werte eingibt - solltest Du 
vielleicht besser den Error näher an 0% bringen ;-)
Das wird wahrscheinlich für zu viel Abweichung sorgen und dann kommt 
Müll an.

http://www.dolman-wim.nl/xmega/tools/baudratecalculator/index.php

Gruß Sven

: Bearbeitet durch User
von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Sven

Sven K. schrieb:
> ja ich hatte es berechnet - aber wieder verworfen - weil ich dachte Du
> hast das bestimmt schon 10mal geprüft und ich mich verrechnet.
...das hatte ich als letztes vermutet, weil ich eine andere Anwendung 
habe mit dem es so lief. Und diese habe ich vor fast zwei Jahren 
erstellt. War wohl auch an der Grenze.

> Wenn man auf die schnelle hier die Werte eingibt - solltest Du
> vielleicht besser den Error näher an 0% bringen ;-)
> Das wird wahrscheinlich für zu viel Abweichung sorgen und dann kommt
> Müll an.
Da wirst Du recht haben. Gehe dem nochmal nach, sobald ich etwas Zeit 
habe.


> http://www.dolman-wim.nl/xmega/tools/baudratecalculator/index.php
Schönes Tool, rechnet es auch richtig? Wenn ich mich richtig Erinnere 
habe ich das vor zwei Jahren auch mit so einem Tool berechnet. War wohl 
falsch?!

Ziehe mir dann noch die Datenblätter rein. Die sollten nicht lügen...

Danke und Viel Frohes

Marki

von Markus B. (up_marki)


Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal an alle.

Habe nochmal geprüft, experimentiert, gerechnet und Datenblätter 
studiert. Durch eine bessere Wahl der USART-Parameter BSEL= 1539 und 
BSCALE=-7 habe ich den kleinsten Fehler, das funktioniert dann auch bei 
beiden Boards prima.

Vielleicht noch für jemanden der die Schaltung nachbaut diese 
funktioniert bei mir einwandfrei. (Nur kurze Leitungen). Habe aber noch 
den GND des uC mit der SPS verbunden.

Habe über GND-Verbindung gerade in einen anderen Beitrag gelesen. Der 
hat mich eher verwirrte als er mich schlau machte. Die Meinungen gehen 
auseinander ob GND-Verbindung ja od. nein. Mir gefallen die Argumente 
für eine Verbindung, deshalb ist sie bei mir jetzt drin.

War auch immer davon ausgegangen, dass es keine GND-Verbindung braucht. 
Hat in der Praxis funktioniert. Aber vielleicht war da trotzdem eine 
"unbewusste" Masse vorhanden.

Viele Grüsse
Marki

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.