RS-232

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

RS-232 ist der Name der am meisten verwendeten seriellen asynchronen Schnittstelle, im Fachjargon auch Übertragungsstandard genannt, um Daten zwischen zwei elektronischen Geräten hin und her zu schicken (im Fachjargon: Datenkommunikation). Der offizielle Name ist EIA RS-232C, genormt durch die amerikanische Electronic Industries Alliance. Die äquivalente Norm der CCITT (*) ist V.24 (Beschreibung des Steckverbinders und der Signale) plus V.28 (Beschreibung der elektrischen Pegel). V.24/V.28 wird oft nur als V.24 bezeichnet, obwohl das streng genommen ungenau ist. V.24/V.28 wird überwiegend als asynchrone Schnittstelle genutzt, kann aber auch (seltener) eine synchrone Übertragung realisieren.

(*) Comité Consultatif International Téléphonique et Télégraphique, jetzt nur noch ITU-T genannt; das Normungsgremium der Internationalen Telegrafen-Union für Telekommunikationsstandards.

Einen guten englischsprachigen Überblick über die Steckverbinder und die verschiedenen Signalnamen findet man bei Connectworld. Beyond Logic liefert zu vielen gängigen Schnittstellen (RS232, PC-Parallelport, USB) umfassende Beschreibungen mit Soft- und Hardware-Beispielen.

Steckerbelegung

Die Steckerbelegung am PC war früher 25-polig und ist heute 9-polig. In beiden Fällen ist es ein männlicher Steckverbinder am PC.

RS-232 Steckerbelegung
9pol 25pol Signal Richtung Bezeichnung Anmerkung
1 8 DCD in Data Carrier Detect Signalträger erkannt
2 3 RxD in Empfangsdaten
3 2 TxD out Sendedaten
4 20 DTR out Data Terminal Ready Endgerät zum Empfang bereit
5 7 GND Ground Bezugspotential
6 6 DSR in Data Set Ready Endgerät bereit
7 4 RTS out Request to send Sendeanfrage
8 5 CTS in Clear to send Bereit zum Senden
9 22 RI in Ring Indicator Klingel
12 Speed Mode Detector
23 SPDS Speed select

Das RS232-Interface wurde ursprünglich nur für die Steuerung von Modems verwendet. Für den Datenaustauch zwischen zwei Rechnern genügen oft die Leitungen RxD, TxD und GND.

Signalpegel, Spannungsversorgung

RS-232 arbeitet mit Signalpegeln im Bereich von +3 ... +15 V zur Darstellung einer logischen 0 (SPACE) und -3 ... -15 V zur Darstellung einer logischen 1 (MARK). Die Übertragung des ASCII-Zeichens 'C' sieht dann so aus:

Rs232.png

Der Bereich von -3 V bis +3 V ist nicht definiert, jedoch erkennen viele Leitungsempfänger das Potential 0 V als logisch 1 an, da sie erst bei positiveren Spannungen auf logisch 0 umschalten. Dadurch ist es mit derartigen Empfängern durchaus möglich (jedoch nicht garantiert!), mit TTL-Pegel zu arbeiten. Zu beachten ist jedoch die RS-232-typische Negation der logischen Werte in diesem Falle, die dann zumindest noch einen einfachen Inverter (2 * 1/6 74xx04 o.ä.) oder einen Transistor in Emitterschaltung benötigt, wenn man als Signalquelle eine Standard-UART benutzen möchte, wie sie in vielen Mikrocontrollern bereits vorhanden ist. Lediglich im Falle einer in Software realisierten UART (Soft-UART) könnte man diese Negation bereits im Controller vornehmen und dann den Ausgang direkt an den RS-232-Eingang klemmen. Beim umgekehrten Fall (RS-232-Ausgang mit regulärem Pegel an Eingang eines Controllers) jedoch unbedingt eine Schutzbeschaltung vornehmen, um die negativen oder hohen postiven Spannungen sicher vom Controller fernzuhalten! Im einfachsten Falle genügt ein Widerstand, da den Rest die internen Schutzdioden übernehmen können (siehe Pegelwandler).

Für ein reguläres RS-232-Interface jedoch wird immer eine negative Versorgungsspannung benötigt, um den negativen Pegel für logisch 1 erzeugen zu können. Im PC, dessen Netzteil eine -12 V Versorgung bereitstellt, ist dies einfach. Die entsprechenden Treiberbausteine werden für die Logiksignale mit +5 V versorgt und für die Bereitstellung der RS-232-Signale zusätzlich mit +12 V und -12 V. Im Mikrocontroller, der in der Regel nur eine Versorgung mit +5 V (oder gar +3 V) benutzt, muss die negative Spannung auf andere geeignete Weise erzeugt werden. Stand der Technik ist dabei eine sogenannte Ladungspumpe: Ein Taktgenerator von einigen hundert Kilohertz lädt regelmäßig einen bzw. mehrere Kondensatoren um, und ein Schalternetzwerk aus MOSFETs sorgt dafür, dass die jeweils positiven oder negativen Pole anschließend außerhalb in einem abschließenden Kondensator summieren. Die entsprechenden Spannungsquellen sind nicht sehr stark belastbar, aber die RS-232-Schnittstelle arbeitet nur mit Strömen im einstelligen Milliamperebereich, so dass diese Variante genügt.

Beschaltung des MAX232

Ladungspumpen gibt es als IC wie z. B. den ICL7660, der aus einer positiven Spannung eine (annähernd gleiche) negative Spannung erzeugt. Da für RS-232 aber ohnehin Treiberstufen benötigt werden, die diese Pegel schalten können liegt es nahe, die Ladungspumpe gleich mit dem Treiber in einem IC zu vereinigen. Der Industriestandard für einen derartigen Schaltkreis ist der MAX232, den es von verschiedenen Herstellern in verschiedenen Varianten gibt. Maxim selbst hat daraus eine ganze Familie von Treiber-ICs entwickelt, die sich im Aufwand an externen Kondensatoren und der Anzahl der Sender und Empfänger unterscheidet. Der klassische MAX232 hat noch 4 x 10 µF Kondensatoren benötigt, aktuelle Typen benötigen nur noch 4 x 1 µF oder 4 x 100 nF (MAX202, MAX232A) bzw. gar keine externen Kondensatoren mehr (MAX233/203).

Der TTL-Pegel bei der Übertragung des ASCII-Zeichens 'C' sieht dann so aus:

Seri ttl.png

Der Ruhezustand des TTL-Pegels ist übrigens ein High-Pegel, wie im Bild ersichtlich.

Andere Signalpegel

Wenn der Empfänger und der Sender etwas entfernt sind und zwischen dem Bezugspotential GND des Senders und des Empfängers mehr als 3 V Differenz auftreten, dann kann die Übertragung gestört werden. Deswegen wird offiziell gesagt, dass durch RS232 maximal 15 Meter überbrückt werden können. Praktisch ist aber oft wesenlich mehr möglich, vor allem bei niedrigen Baudraten.

Außer RS232 gibt es auch noch die Norm RS422 bzw. RS485, mit der RxD und TxD durch je ein verdrillten Leiterpaar übertragen werden (diffentielle Signale). Damit wird das Bezugspotential durch die TX- (B) - Leitung zum Empfänger geführt.

Eine andere Methode ist die Datenübertragung durch Strom 4mA - 20mA. Hierfür können die Signale auch durch Optokoppler getrennt werden. Im Ruhezustand "Idle", also wenn der TTL-Pegel H ist, wird der Optokoppler durchgeschaltet. Die Stromschleife wird durch 12..30 Volt versorgt und die Stromstärke durch einen Widerstand von 500Ω, 630Ω, bzw. 3000Ω eingestellt. Die Stromschleife war in den Jahren bis ca. 1980 die serielle Standardschnittstelle für den Anschluß von Fernschreibern (Teletype ASR33).

Die Stromschleife (engl. Current Loop) ist sehr robust. Es können mehrere hundert Meter überbrückt werden.

Flusssteuerung

Für eine Kommunikation über RS-232 benötigt man normalerweise eine sogenannte Flusssteuerung (engl. flow control), damit ein Empfänger, der mit dem Einlesen der Daten nicht nachkommt, dem Sender Einhalt gebieten kann. Gängige Varianten sind Xon/Xoff Flow Control (auch als Software Handshake bezeichnet) und CTS/RTS Flow Control (Hardware Handshake).

Bei dem Software Handshake wird ein Zeichen Xoff (ASCII DC3, Control-S, dezimal 19, hex 0x13) vom Empfänger gesendet, um den Datenstrom anzuhalten und Xon (ASCII DC1, Control-Q, dezimal 17, hex 0x11), um die Sendung fortzusetzen. Naturgemäß steht in diesem Falle nicht der gesamte Zeichenvorrat von 256 Zeichen für die Übertragung zur Verfügung. Darum wird diese Variante oft nur bei reinen ASCII-Übertragungen genutzt.

Bei dem Hardware Handshake zieht der Empfänger das Signal CTS (Clear to Send) auf logisch 1 (also negativen RS-232 Pegel), um den Datenstrom anzuhalten. Da bei Verbindung zweier RS-232-Endgeräte CTS mit RTS gekreuzt wird, ist daraus der Name CTS/RTS flow control entstanden. Der Name Hardware Handshake darf dabei nicht missgedeutet werden: zwar werden Hardware-Signale für das Handshake benutzt, so dass der volle Zeichenvorrat für den Übertragungskanal zur Verfügung steht, aber weder die gängigen UARTs in PCs noch in Controller behandeln die eigentliche Flusssteuerung tatsächlich in Hardware, sondern die Softwareimplementierungen der jeweiligen Treiber müssen diese Zustände erkennen und entsprechend schnell reagieren.

Bei Mikrocontrollern wird jedoch sehr oft auf jegliche Flusssteuerung verzichtet, so dass nur die Leitungen von RxD, TxD und GND (Masse) verdrahtet werden. Diese Schnittstelle wird auch als 3-wire bezeichnet, da sie nur drei Drähte benötigt. Der Ausgang (TxD vom Controller via Treiberstufe des MAX232) wird dann mit dem RxD-Eingang des PC verbunden (Pin 2 bei DB9-Steckern), ggf. der Eingang (RxD des Controllers vom Empfänger des MAX232) mit TxD des PC (Pin 3 bei DB9), Masse des DB9-Steckers ist Pin 5.

Je nach Betriebssystem auf dem PC empfiehlt es sich noch, Pin 1 (DCD) und 6 (DSR) gebrückt an einen Treiberausgang des MAX232 zu legen, dessen Eingang auf 0 V liegt (so dass positiver Pegel an diesen beiden Pins liegt) sowie Pin 7 (RTS) und 8 (CTS) zu brücken, so dass der PC sich selbst RTS auf CTS rückkoppelt.

Terminalprogramme

Linux

  • ScriptCommunicator Ohne Terminalemulation, umfangreiches Skriptinterface.
  • HTerm Ohne Terminalemulation.
  • wxTerminal Ohne Terminalemulation.
  • GTKTerm (enthält bösen Bug, siehe: http://www.mikrocontroller.net/topic/73781 - sollte in 0.99.6 gefixt sein)
  • picocom
  • CuteCom
  • minicom (meist bei Linux dabei)
  • tiny serial terminal
  • Serial-IO (Terminal mit GUI und Sonderfunktionen wie Buffer senden, Highlighting, adaptive CRC-Berechnung)
  • ssterm - Simple Serial-Port Terminal is a console-based serial port terminal with curses and stdin/stdout user interfaces. (GPL)
  • GNU screen (Terminal-Multiplexer mit Zugriffsmöglichkeit auf serielle Ports)
  • PuTTY z.B. Ubuntu 12.10 "apt-get install putty" mit: putty 0.62-6ubuntu0.1
  • screen ("man screen" zeigt Hilfe: screen - screen manager with VT100/ANSI terminal emulation) Beispiel für USB -> RS232: sudo screen /dev/ttyUSB0 115200,cs8,-ixoff--ixoff,istrip
  • DebugTerminal Hex, Bin, Dec oder ASCII (aber keine Terminalemulation), graphische Visualisierung empfangener Daten in Echtzeit, GPL, cross-platform.

Windows

  • ScriptCommunicator Ohne Terminalemulation, umfangreiches Skriptinterface.
  • Awavo Serial Port Monitor (Erkennt COMPorts nur beim Starten / keine Baud Umschaltung wenn Port offen)
  • HTerm Ohne Terminalemulation.
  • Br@y++ Terminal Ohne Terminalemulation.
    Alternativer Download bei www.smileymicros.com (ZIP, Version aus 2004!)
  • AVRTERM (Windows 9x/ME, grafische Ausgabe möglich)
  • wxTerminal Ohne Terminalemulation.
  • Hercules Setup Utility (auch TCP, UDP)
  • Tera Term (Windows 95/NT,CE)
  • TeraTerm Pro (Windows 95/98, 2000, 2003, XP, and Vista)
  • Hyperterminal (bis Windows XP dabei) [1]
  • Terminal (bei Windows 3.1 dabei)
  • Docklight (Testversion mit eingeschränkten Funktionen)
  • XMON Micro controller serial port debugger variable view realtime curve tracer (Freeware)
  • PuTTY ab Version beta 0.59
  • OC-Console - Kostenloser Terminal Emulator für den Embedded Entwickler (Nur bis COM10)
  • TKTerm Terminalprogramm optimiert für den BasicBeetle. Aber auch für andere Zwecke verwendbar
  • Termite: a simple RS232 terminal (MS Windows, kostenlos, closed source)
  • Termie A Simple RS232 Terminal (ähnlich Termite, MS-Windows, open source C#)
  • RealTerm Windows, Opensource "specially designed for capturing, controlling and debugging binary and other difficult data streams"
  • Binterm , klasse Freeware Terminalprogramm.
  • YAT Freeware, mit vordefinierbaren Buttons
  • MegunoLink - free tool for talking to Arduino microcontrollers (or any serial device for that matter).
  • SimpleSerialTerminal Freeware, mit vordefinierbaren Funktionstasten für alle sendbaren Bytes[0..255], Empfang: Hex, Dec, und ASCII - Darstellung
  • DebugTerminal Hex, Bin, Dec oder ASCII (aber keine Terminalemulation), 8 Buttons für frei definierbare Byte-Sequenzen, graphische Visualisierung empfangener Daten in Echtzeit, GPL, cross-platform.

DOS/Kommandozeile

Datenvisualisierung

Tipps

Günstige Möglichkeit einen Mikrocontroller mit dem PC zu verbinden sind oftmals USB-Handy-Datenkabel: Meistens ist ein USB nach RS232 Chip verbaut, man bekommt RS232 direkt mit 5V bzw. 3V-Pegel und könnte teilweise sogar die 5V USB-Spannung als Stromversorgung nutzen...


===Windows COM-Ports=== die mit "bereits belegt" gekennzeichnet sind wieder von diesem Makel befreien

1.Systemsteuerung auf "System" -> dort auf den Reiter "Erweitert" und dort dann auf den Button "Umgebungsvariablen"!
2.Systemvariablen auf "Neu"
3. Namen der neuen Variablen: "DEVMGR_SHOW_NONPRESENT_DEVICES"
4. Wert: "1"
5. Eingabe 2* mit OK quittieren
6. danach den Rechner neustarten
7. im Gerätemanager das Häckchen bei "Ausgeblendete Geräte anzeigen" setzen
8. jetzt sollten die belegten Com-Ports sichtbar und deinstallierbar sein

getestet bei WIN 7
Winne

Siehe auch

Weblinks