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
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
Masseverbindung zwischen SPS und Controller existiert? Grüßle, Volker.
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
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
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
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!?
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?
Kannst Du ein Oszillogramm auf dem Bus vergleichend aufnehmen?
Frank schrieb: > Mit was für Spannungen werden die betrieben? 3V3 oder 5V? Guckst du hier: Markus B. schrieb: > RS485_1.png
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
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
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
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.
... 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_ */ |
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?
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
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?
Wirklich sicher das die SPS die Datenrichtung nicht plötzlich umdreht ? Durch Ungereimtheiten wer wann senden darf entsteht der meiste Quark.
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
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.