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
@ RS (Gast)
>für Halbduplex sorgt doch die Software oder nicht?
Teils. Die RS232 Treiber müssen das aber auch mitmachen (abschaltbarer
Treiber).
MFG
Falk
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?
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.
Wenn die Frage gestattet ist: Worin besteht eigentlich der Gewinn? Ob
nun eine oder zwei Leitungen, das ist doch kein nennswerter Unterschied,
vor allem wenn Du ein Kabel verwendest...
>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?
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
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.zipBeitrag "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
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
RS schrieb:> mit NUR EINER LEITUNG einen Mikrokontroller mit dem PC verbinden
Aber eine GND-Leitung hast du schon? Denn ein Stromkreis hat immer 2
Leitungen!
Oder ganz ohne Leitung: per Funk ;-)
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.
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.
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.
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
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.
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.
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.
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.
Dietmar B. schrieb:> gehe davon aus, dass GND über den Schirm vom BNC geholt wird
BNC hat keinen Schirm. Den gibt es nur bei Triaxialkabel.
Der Außenleiter bei BNC wird mit für die Signalübertragung benötigt.
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!
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.
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
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).