RS232 über eine Leitung

Gast #789771
Lesenswert?

Hallöchen :-)

ist es möglich die RS232-Schnittstelle über nur eine Leitung zu 
realisieren?

Hat jemand sowas vielleicht schon programmiert?

Was muss man beachten? (sowohl Hardware als auch Software)


Ein Sensor soll über RS232 mit dem PC verbunden werden. Damit der Sensor 
nicht zu viele Verdrahtungen besitzt, soll die RS232-Interface über eine 
Leitung erfolgen.

Vielen Dank schon mal für die Hilfe
#789786
Lesenswert?

#789800
Lesenswert?

Master und Slave sind auf Empfangen geschalten
Der Master schaltet auf senden
Der Master sendet seine Daten
Am Ende schaltet der Master wieder auf empfangen, z.B. durch den TXC 
Interrupt

Der Salve empängt die Daten und berechnet die Antwort
Der Slave schaltet auf senden
Der Slave sendet seine Daten
Am Ende schaltet der Slave wieder auf empfangen, z.B. durch den TXC 
Interrupt

Beginne am Anfang

MFg
Falk

P.S. Was ist daran so kompliziert?
Gast #789806
Lesenswert?

das komplizierte an der Sache ist, dass ich mir nicht vorstellen kann, 
wie ich mit NUR EINER LEITUNG einen Mikrokontroller mit dem PC verbinden 
kann.
Wenn ich da eine Idee hätte, würde ich die Software ohne große Probleme 
meistern, denke ich.
Gast #789871
Lesenswert?

>Muss denn der Sensor ueberhaupt in beide Richtungen kommunizieren?
der Sensor antwortet auf die Steuersignale

>wie wär's denn einfach mit einem LIN-Treiber?
es ist ja auch so was wie LIN. Gibt es LIN auf RS232?
Gast #798483
Lesenswert?

hi,

ich bin's noch mal :-)..

Die Hardware funktioniert so weit ganz gut, aber ich habe ein kleines 
Problem mit der Software.

Und zwar ist es so, dass ich mehrere Bytes empfange und sie in eine 
Array speichere. Das Ende erkenne ich durch CR (carriage return ~ 0x0D). 
Klappt alles ganz gut. Aber bei der Auswertung habe ich keine gute 
Lösung.

Ich will, je nachdem welche Bytes ich erhalten habe, die entsprechende 
Antwort zurücksenden.
D.h. wenn ich so was erhalte:
0x21
0x20
0x23
0x0d (für das Ende)

will ich antworten mit:
0x45
...

Die Anzahl der Bytes die ich erhalte, sind unterschiedlich (von 0 bis 
10).

Am liebsten hätte ich das ganze mit der SWICTH-Anweisung programmiert, 
aber bei switch-Anweisung kann ich nur auf einen Character- oder 
Integer-Wert abfragen.
Mir fällt an dieser stelle nur die if-Anweisung mit strcmp() ein:
1
//empf: Array für die empfangene Characters
2
//sx eine Liste von soll-Werten
3

4
x=strcmp(empf,s1);
5
if( !x )
6
{
7
  //beide gelich, tu was
8
}
9

10
x=strcmp(empf,s2);
11
if( !x )
12
{
13
  //beide gelich, tu was
14
}
15

16
x=strcmp(empf,s3);
17
if( !x )
18
{
19
  //beide gelich, tu was
20
}
21

22
x=strcmp(empf,s4);
23
if( !x )
24
{
25
  //beide gelich, tu was
26
}
27
.......

Gibt es eine bessere Methode?? Es muss doch bestimmt was einfacheres 
geben..

Danke
RS
#798799
Lesenswert?

RS wrote:
> Hallöchen :-)
>
> ist es möglich die RS232-Schnittstelle über nur eine Leitung zu
> realisieren?

Ja, überhaupt kein Problem.

Wenn man sich mal die Eingangsdaten eines RS232 Chips ansieht (z.B. 
MAX232), fällt auf, daß die vollkommen TTL-kompatibel sind.

Ich benutze daher ne wired OR Schaltung in meinem Bootloader:

http://www.mikrocontroller.net/attachment/29691/fboot18.zip

Beitrag "UART Bootloader ATtiny13 - ATmega644"

Der PC sendet über den Widerstand 4,7k und der AVR sendet mit open drain 
Ausgang, d.h. strong High für Low und tristate für High (RS232 Pegel ist 
ja invertiert).

Damit der PC weiß, was ist sein Echo und was wurde wirklich vom AVR 
gesendet, zählt er die Bytes einfach mit.


Peter
#6965607
Lesenswert?

juppi schrieb:
> hallo
>
> eine D und ein R gegen + auf beiden seiten zur entkopplung.
> wurde vor 20 Jahren gemacht auch ohne Int.
>
> MfG

Hallo zusammen,

auf der Suche nach einer RS232 Anbindung im Halbduplex bin ich auf den 
Artikel gestoßen.
Ich habe einen Laptimer mit einem BNC Anschluss, welcher auf RS232 
angeschlossen wird.
Leider fehlt mir das Schnittstellenkabel. Eine Belegung dafür bekomme 
ich nicht.
Ich könnte mir vorstellen, dass in dem Adapterkabel zwischen BNC und 
RS232 Stecker eine einfache Schaltung verbaut ist.
Leider habe ich keine Vorstellung, wie über ein Widerstand und Diode die 
Beschaltung realisiert werden kann. Vermutlich ist das für ein Profi 
kein Problem.
Könnte mir jemand freundlicherweise eine Skizze dieser Beschaltung 
zukommen lassen oder mir das erklären und welche Bauteilwerte verwendet 
werden sollen?

Vielen Dank im Voraus.

Dietmar
Gast #6965674
Lesenswert?

Dietmar B. schrieb:
> gehe davon aus, dass GND über den Schirm vom BNC geholt wird
> RX und TX über eine Leitung im Halbduplex.
> Wie oben Beschrieben, soll das mit Diode und Widerstand realisierbar
> sein.

Solche Lösungen werden seit Jahrzehnten im Automobilbereich verwendet. 
Google mal nach "K-Line" oder "LIN-Bus". Im wesentlichen hast Du einen 
Ruhepegel, der den High-Zustand darstellt (über Pullup eingestellt), und 
wenn ein Teilnehmer sendet wird der Low-Pegel aktiv über 
open-collector-Treiber angelegt.
Gast #6965675
Lesenswert?

Dietmar B. schrieb:
> juppi schrieb:
>> hallo
>>
>> eine D und ein R gegen + auf beiden seiten zur entkopplung.
>> wurde vor 20 Jahren gemacht auch ohne Int.
>>
>> MfG
>
> Hallo zusammen,
>
> auf der Suche nach einer RS232 Anbindung im Halbduplex bin ich auf den
> Artikel gestoßen.


Entspricht wohl funktionell dem Vorschlag "Das mc-Netzwerk" Thema in der 
MC 4/1983 und 5/1983.

Hubert Eing hatte dazu schon was in der ELEKTRONIK 8/1982, S. 87 unter 
dem Titel "SP-Netz" publiziert.
Angehängte Dateien:
Gast #6965689
Lesenswert?

Falk B. schrieb:
>>für Halbduplex sorgt doch die Software oder nicht?
>
> Teils. Die RS232 Treiber müssen das aber auch mitmachen (abschaltbarer
> Treiber).

Schön und gut, aber kann der Sensor das auch?

Abgesehen davon, abschaltbare Sender gibt es bei RS485, bei RS232 ist 
das eher unüblich.

Georg
Gast #6965736
Lesenswert?

Soul E. schrieb:
> Solche Lösungen werden seit Jahrzehnten im Automobilbereich verwendet.
> Google mal nach "K-Line" oder "LIN-Bus".

Was hat LIN mit RS232 zu tun?
RS232 ist eine voll duplexfähige Spezifikation der physikalischen 
Schnittstelle und kein Bus, LIN ist ein Eindraht-Bus.
#6965811
Lesenswert?

Vielen Dank für die bisherigen Infos.
Bisher zeichnet sich für mich keine Lösung ab.
Für mich hat sich das so gelesen, dass es sich mit einer einfachen, 
passiven Schaltung mittels Dioden und Widerständen realisieren lässt, da 
das ganze ja in einem RS 232 Stecker verbaut sein muss.

Vielleicht ist in dem Stecker ja auch ein Wandler o.ä. verbaut.
Gast #6965979
Lesenswert?

RS schrieb:

> ist es möglich die RS232-Schnittstelle über nur eine Leitung zu
> realisieren?

Naja, eine Signal-Leitung und GND, also insgesamt zwei.

> Hat jemand sowas vielleicht schon programmiert?

Ja, ich z.B. Vermutlich aber auch noch Zehntausende andere.

> Was muss man beachten? (sowohl Hardware als auch Software)

Hardware: TXe müssen entkoppelt werden (1 Diode pro Sender+gemeinsamer 
Lastwiderstand). Bei hinreichend konfigurierbarer UART-Hardware kann man 
auf die Diode verzichten, indem man OpenDrain-Ausgänge benutzt.

Software: Der Receiver muss wissen, dass er auch immer den vom eigenen 
Sender produzierten Kram mithört. Und: Multi-Master ist relativ 
schwierig umzusetzen, kann sich aber den Sachverhalt aus dem vorigen 
Satz zunutze machen, um Kollisionen relativ zuverlässig zu erkennen. 
Zusätzlich braucht man aber ein Protokoll, was dies unterstützt. Sprich: 
erstes Byte einer jeden Nachricht muss so eine Art Adressbyte sein, was 
den Absender eindeutig identifiziert.
Gast #6965989
Lesenswert?

Bei einer normalen RS-232-Leitung sind -5..15V auf der Leitung (bei 
Ruhepegel 1 und den vorgesehenen Invertern).

Die Dioden müssen also im Ruhepegel sperren.

Also Dioden in Durchlassrichtung von TX nach RX an jedem Device. Und 
dann beide RX verbinden.

Das Problem: Der eigene RX zieht das Signal gegen GND, so dass die 
mögliche Übertragungslänge mehr als halbiert wird.
#7114697
Lesenswert?

Mit der SDI-12 Spezifikation wird ein 1200Bd  Eindraht Half-Duplex 
Serial Bus für Sensor Communication beschrieben:

http://www.sdi-12.org/current_specification/SDI-12_version-1_4-Jan-30-2021.pdf

Verwendet zwar keine RS232 Pegel, ist aber möglicherweise als 
Ansatzpunkt für Ähnliches von Interesse. In der Spezifikation wird auch 
die dazu notwendige (einfache) Hardware behandelt.

Auch Protokollfragen werden in B-1 behandelt.

Auf Seite A-1 finden sich ausführliche Schaltungsverwirklichungs 
Informationen.
Gast #7114714
Lesenswert?

Ben B. schrieb:
> Hey wenn ihr schon mal dabei seid, könnt ihr mir sagen wie man Drehstrom
> über eine einzelne Leitung überträgt? 5 Adern für die Phasen, Null und
> dann auch noch die Erdung ist doch wirklich lästig!

Dafür gibts doch Adapter Drehstrom auf Gardena.

https://etel-tuning.eu/produkt/adapter-drehstrom-auf-gardena/

zum Thema oben:
man könnte das ganze auch als LIN-Bus realisieren dafür gibt es fertige 
Treiber-Bausteine.

Gruß Anja
#7114731
Lesenswert?

A. S. schrieb:
> Das Problem: Der eigene RX zieht das Signal gegen GND, so dass die
> mögliche Übertragungslänge mehr als halbiert wird.

MAX3222 und ähnliche RS-232-Transceiver haben einen POWERDOWN aka SHDN 
Eingang. Damit werden die TX-Ausgänge abgeschaltet und ziehen dann noch 
max. 25uA. Das Ganze funktioniert dann praktisch wie RS-485, nur mit 
echten RS-232-Pegeln und ohne Dioden und Widerstände.

Mit Transceivern, die zwischen RS-232 und RS-485 umschaltbar sind, 
funktioniert das genauso (z.B.XR3160E).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren