Forum: Mikrocontroller und Digitale Elektronik RS232 UART gestört?


von Tino T. (hike96)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe eine kurze Verständnis-Frage:

Ich möchte ein Messgerät, welches  via RS232 alle 100ms einen 
Datenstring sendet, mit meinem Microcontroller verbinden und dort also 
die Daten auslesen. Irgendwie kann ich die Daten aber leider nicht 
lesen. Deswegen habe ich nun mit einem Osziloskop geschaut, was denn am 
Pin 3 (TxD) des 9-poligen Steckers des RS232 Messgeräte-Kabels überhaupt 
ankommt. Eigentlich würde ich hier ja nun eine Art Rechtecksignal 
erwarten, also meine Daten, oder nicht?

Was ich stattdessen bekomme, zeigt das Bild im Anhang. Außerdem bekomme 
ich merkwürdigerweise ein Signal, wenn ich am RxD-Pin (Pin 2) messe, was 
ich jetzt nicht erwartet hätte. Kann es sein, dass das RS232 - Kabel 
kaputt ist? Oder das Messgerät selbst?

Danke und LG

von Pat (Gast)


Lesenswert?

Es sieht so aus als htättest Du am Oszilloskop die Masseleitung 
vergessen.

von Sven L. (svenl)


Lesenswert?

Also ich sehe da Rechtecke auf dem Oszillogramm...

Wie ist Dein Messaufbau? AC- oder DC-Kopplung am Oszi eingestellt? 
GND-Kabel mit Pin 5 (Data-GND) des 9-poligen Steckers verbunden?

Viele Grüße!

Sven

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Tino T. schrieb:
> Kann es sein, dass das RS232 - Kabel kaputt ist?

Eher hast Du Rx/Tx vertauscht. Keine Ahnung, ob Du ein 1:1-Kabel oder 
ein Nullmodem-Kabel verwendest.

> Was ich stattdessen bekomme, zeigt das Bild im Anhang. Außerdem bekomme
> ich merkwürdigerweise ein Signal, wenn ich am RxD-Pin (Pin 2) messe, was
> ich jetzt nicht erwartet hätte.

Das sieht nach einem Nullmodem-Kabel aus. Oder Dein Gerät verhält sich 
wie ein Modem mit TX an Pin2 statt Pin3. Das nennt man dann DCE statt 
DTE.

Bedenke: TX kommt an RX, RX an TX.

TX erkennt man bei RS232 an dem negativen Pegel - meist ca. minus 10V, 
wenn nicht gesendet wird. Miss das mal nach und schließe dann Deinen µC 
entsprechend an. Im einfachsten Fall musst Du nur TX und RX vertauschen.

Hilfreich: https://de.wikipedia.org/wiki/RS-232

: Bearbeitet durch Moderator
von Jim M. (turboj)


Lesenswert?

Tino T. schrieb:
> Was ich stattdessen bekomme, zeigt das Bild im Anhang

Da steht groß "Autoset" im Bild, damit bekommt man i.d.R. nicht das was 
man wirklich sehen will am Oszi. Man sollte die <60 Sekunden investieren 
und manuell entsprechende Einstellungen vornehmen.

Eine AC Kopplung ist bei einem DC Digitalsignal nicht soo toll...

von Tino T. (hike96)


Angehängte Dateien:

Lesenswert?

Vielen Dank schonmal für die Antworten.

Dass ich RxD und TxD vertauscht habe bzw. es sich einfach um ein 
Nullmodemkabel handelt, kann schon sein. Nachdem ich entsprechende 
manuelle Einstellungen am Oszi vorgenommen habe, habe ich an Pin 2 
tatsächlich ein echt gutes Rechtecksignal messen können (Anhang: 
oszi2_edit, Anhang oszi2 kriege ich nicht gelöscht, ist aber nicht mehr 
gültig, habe den Fehler hier gerade schon gefunden).

Ich will diese Daten nun an meinen Mikrocontroller senden, indem ich 
eine RS232 click board von MikroE verwendet. Mit dem MAX3232, der darauf 
vorhanden ist, sollte das Signal ja eigentlich bloß auf den 
entsprechenden TTL Pegel (bei meinem Microcontroller habe ich 3.3 V 
supply voltage) umwandeln. Wenn ich aber nun mit dem Oszi an den Pins TX 
und RX messe, die vom RS232 click board zum Microcontroller gehen, mit 
Masse vom Oszi am GND vom Board, bekomme ich am TX-Pin ein Signal, dass 
der Versorgungsspannung 3.3V entspricht,  und am RX-Pin ein sehr 
unerwartetes , siehe Anhang oszi3 und oszi4. Man erkennt hier zwar bei 
oszi4 einmal eine Rechteck-Form , jedoch habe ich dafür ein Zeitfenster 
von 1 microsekunde gewählt, was doch sehr sehr klein ist.

Das kann ich mir beim besten Willen nicht erklären, denn egal, ob ich 
nun RxD und TxD vertausche, der Microcontroller kann doch hier keine 
vernünftigen Daten abgreifen ?
Meine Frage zielt jetzt natürlich etwas in eine andere Richtung, da es 
nun plötzlich um den RS232 to TTL converter geht. Aber ich hoffe, dass 
mir trotzdem jemand weiterhelfen kann.

Achso, und ich habe eine DC-Kopplung eingestellt, das sollte doch 
stimmen, oder?


Dankeschön!

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Tino T. schrieb:
> Wenn ich aber nun mit dem Oszi an den Pins TX und RX messe, die vom
> RS232 click board zum Microcontroller gehen, mit Masse vom Oszi am GND
> vom Board, bekomme ich am TX-Pin ein Signal, dass der
> Versorgungsspannung 3.3V entspricht,

Das ist normal, TX ist auf UART-Ebene high, wenn nicht gesendet wird.

>  und am RX-Pin ein sehr
> unerwartetes , siehe Anhang oszi3 und oszi4.

Hast Du denn schon den TX-Pin, mit dem Du mittels TX vom µC aus an RX 
Deines Geräts senden willst, schon auf dem µC initialisiert? Sendet Dein 
µC also schon was?

Musst Du überhaupt etwas vom µC aus senden, wenn Du Dein Messgerät 
auslesen willst? Wenn nein, lege RX des Messgeräts (UART-Ebene) per 
Pullup (10k) auf high (3,3V).

: Bearbeitet durch Moderator
von Tino T. (hike96)


Angehängte Dateien:

Lesenswert?

> Das ist normal, TX ist auf UART-Ebene high, wenn nicht gesendet wird.

Achso okay, na das ist ja schonmal gut!


> Hast Du denn schon den TX-Pin, mit dem Du mittels TX vom µC aus an RX
> Deines Geräts senden willst, schon auf dem µC initialisiert? Sendet Dein
> µC also schon was?
>
> Musst Du überhaupt etwas vom µC aus senden, wenn Du Dein Messgerät
> auslesen willst? Wenn nein, lege RX des Messgeräts (UART-Ebene) per
> Pullup (10k) auf high (3,3V).

Nee, genau, ich will gar nichts senden, sondern nur das, was mein 
Messgerät sendet (und wo ich ja auch schon festgestellt habe durch das 
Messen am Anfang, dass konstant etwas gesendet wird), am Microcontroller 
empfangen.

Die TX und RX Pins habe ich bereits initialisiert/zugeordnet, das sollte 
so eigentlich passen.

> lege RX des Messgeräts (UART-Ebene) per Pullup (10k) auf high (3,3V).

Oh, okay, dann probiere ich das mal aus. Ich bin mir nicht sicher, ob 
ich vielleicht einen internen Pullup habe, da ich hier in der Software 
eine Einstellungsmöglichkeit des Receive-Pins zu "Pullup" gefunden habe. 
Ansonsten, einen externen Pullup machen könnte etwas komplizierter sein, 
denn es handelt sich eben um so ein Click-Board, wo ich an die Pins nach 
dem Aufstecken nicht mehr so einfach drankomme, siehe Anhang. Deswegen 
könnte ich mir vorstellen, dass es eigentlich nicht so gedacht ist, 
einen externen Pullup zu verwenden?

Ich hoffe, ich habe dich da jetzt überhaupt richtig verstanden?

Ich werde mal gucken, ob ich irgendwas im Datenblatt meines 
microcontrollers finden werde. Dankeschön !!

von Tino T. (hike96)


Lesenswert?

Ich habe mich mittlerweile nochmal mit dem Thema Nullmodem/1:1 
beschäftigt und habe festgestellt, dass ich tatsächlich ein solches 
Nullmodem für meinen Konverter brauche.

Jetzt ist das Problem gelöst und ich bekomme die erwarteten TTL-Signale 
am RX-Pin!!

Vielen Dank für die Hilfe!!

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Tino T. schrieb:
> Jetzt ist das Problem gelöst

Freut mich. Viel Spaß!

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.