Forum: Mikrocontroller und Digitale Elektronik Problem bei rs232 Übertragung


von Jürgen E. (joe73)


Lesenswert?

Hallo,

vielleicht weiß jemand einen Rat.

Mein RS232 Signal geht über eine Baugruppe welche aus einem H-Pegel 
einen L-Pegel macht. Dadurch kommen auf der Empfängerseite andere Werte 
an als abgesendet.
So z.B. bei einem
M   0100 1101 kommt ein
Y   0101 1001

oder

N   0100 1110
,   0010 1100

oder

O   0100 1111
X   0101 1000

Wie kann ich nun das empfangene Byte mit BASCOM bearbeiten damit
ich wieder auf das "richtige" Byte komme?

Bedanke mich für jegliche Hilfen...

mfg Jürgen

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Ich denke, das wird gar nicht gehen.

Aus deiner Beschreibung entnehme ich mal, daß das ganze TX-Signal 
invertiert wird. Dann hat der Empfänger gar keine Chance, das richtige 
Start-Bit zu sehen um die folgenden Bits einzurotieren, er kann nur 
irgendeine passende fallende Flanke nehmen, die folgenden 8 
Zeiteinheiten stumpf einrotieren und wenn dann der Zustand der Leitung 
für ein Stop-Bit reicht meldet er keinen Framing-Error....

Du solltest einen Inverter davorschalten.

von Michael (Gast)


Lesenswert?

Jürgen E. schrieb:
> Bedanke mich für jegliche Hilfen...

Wenn du ein Hardware UART verwendest, wird das nicht gehen, weil das 
Startbit beim Empfänger nicht als solches erkannt wird und deshalb ein 
gesendetes Byte vom Sender gar nicht als vollständiges Byte beim 
Empfänger ankommt. Da hilft nur das Signal zu invertieren.

von Jürgen E. (joe73)


Lesenswert?

Vielen Dank für die bisherigen Antworten,

Diese Baugruppe, welche das Signal invertiert, dient als Pegelanpassung 
zwischen einem KfZ Steuergerät und einem Messgerät für die Parameter.
Könnte es vielleicht sein, dass das KfZ-Steuergerät die Signale schon
im invertierten Zustand ausgibt? Nach einer nochmaligen Invertierung 
würden sie doch dann passen, oder?
Bei meinem Test habe ich zunächst "richtige" Signale verwendet und dann 
diese Invertierung bemerkt.
Ich wollte mir halt die Signale mal ansehen um einige Anzeigen zu 
realisieren.

Ja, ich nutze eine Hardware-UART.
Mein Test mit einer Software-UART ist leider gescheitert das sich beim 
ATMEGA328p kein Puffer einrichten lies für die Soft-UART und daher die 
meisten Zeichen verloren gingen wenn ich mal einen langen String 
gesendet hatte.
Das Problem hatte ich zuerst auch mit der Hardware-UART konnte dies dann 
aber mittels
Config Serialin = Buffered , Size = 64 lösen

mfg Jürgen

von Michael (Gast)


Lesenswert?

Jürgen E. schrieb:
> Diese Baugruppe, welche das Signal invertiert, dient als Pegelanpassung
> zwischen einem KfZ Steuergerät und einem Messgerät für die Parameter.
> Könnte es vielleicht sein, dass das KfZ-Steuergerät die Signale schon
> im invertierten Zustand ausgibt?

Normale RS232-Treiber invertieren immer. Von was für Pegeln reden wir 
denn. Welcher Pegel liegt an, wenn kein Zeichen übertragen wird. Auf der 
RS232-Schnittstelle wird negative Logik verwendet (High = -3..12V, Low = 
+3..12V)

von Jürgen E. (joe73)


Lesenswert?

Hallo,

aus der von mir genutzten Baugruppe liegen bei L 0V und bei H knappe 5V 
an.
Kann sein, dass im Original ein RS232 Pegelwandler zum Einsatz kommt.
Dies brauche ich allerdings nicht.
Ich werde mal das Signal invertieren und dann weitersehen...

Besser wäre es natürlich, ich könnte die Software UART nutzen, leider 
weiss ich da nicht, ob man da auch so einen Buffer einrichten kann wie 
bei der Hardware-UART.


mfg Jürgen...

von Jürgen E. (joe73)


Lesenswert?

So,

habe nun einen Inverter aufgebaut und es funktioniert....

Danke an alle die mich abgehalten haben weitere Software-Experimente 
durchzuführen...

mfg Jürgen

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.