RS-232
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:
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.
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:
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
- ScriptCommunicator Umfangreiches Skriptinterface.
- Logview (Freeware, Windows)
- AVRTERM (Windows 9x/ME, grafische Ausgabe möglich)
- XMON Micro controller serial port debugger variable view realtime curve tracer (Freeware)
- Robot - a scientific graph plotting and data analysis tool (Sourcecode, Binaries für Sun und Linux)
- Visualize real-time data streams with Gnuplot (Perl) und eine Erweiterung
- Python mit pyserial zur Datenerfassung und Weitergabe der Daten an eine der 2D/3D-Libraries zur Datenvisualisierung
- A “live” data monitor with Python, PyQt and PySerial von Eli Bendersky
- kst - plots scientific data (Linux mit KDE, GPL). Es können Daten aus Dateien angezeigt werden, die ständig ergänzt werden. Damit kann eine Real-Time Anzeige aufgebaut werden ([2]). Ein Usertutorial inkl. Video für eine Arduino Anwendung gibt es auch.
- Trend: a general-purpose, efficient trend graph (Req.: POSIX system, OpenGL, Lizenz: LGPL)
- Processing
- Automate your science experiments - Instructable zum Bau eines einfachen Datenloggers inkl. Transfer zum PC. Inhalt: µC (hier Picaxe) => RS232 => VB.Net (free!) => .csv Datei mit Messpunkten => Excel => Diagramm
- Zedgraph C#, C++ Klassen zur Datenvisualisierung statischer und dynamischer Daten (LGPL, Für Programmierer!)
- Data Acquisition System using ATmega8 (Link tot 2017_02_11)
- Live Graph kann Daten aus CSV Dateien und/oder über eine Java API aus Programmen heraus darstellen. (BSD Lizenz)
- RS232 Scope V1.02 - Serial Data Capture with Microsoft Excel 97 on Windows 95/98/ME/NT
- Serial Chart - Analyse and chart serial data from RS-232 COM ports (Open source, C++, Windows Binary)
- Arduino and the Web using NodeJS and SerialPort2 von Bangon Kali auf www.codeproject.com (Javascript)
- MegunoLink - free tool for talking to Arduino microcontrollers (or any serial device for that matter). It has a window to graph data sent from the Ardunio in real time. Send {Temperature [degC],T,12.4} and MegunoLink will plot it.
- sTerm kann Daten vom COM-Port live darstellen und Abspeichern, Skalieren etc.
- DebugTerminal Visualisierung empfangener Binärdaten von der seriellen Schnittstelle in Echtzeit, 4 Kanäle, 8/16 bit, signed/unsigned, GPL, cross-platform.
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
- Universal Asynchronous Receiver Transmitter
- AVR-Tutorial: UART
- AVR-GCC-Tutorial/Der UART
- Ports benutzen (GCC), Ports benutzen (PHP), Ports benutzen (Windows)
- Serielle Schnittstelle unter Java
- Beitrag: RS232 aus Excel heraus ansprechen
- Terminal mit Kommandointerpreter
- Serial-Port-Weiterleitung
- Daten von COM port in Excel einlesen (Forumsbeitrag von Thomas)
- Beitrag: Latenzzeitmessung der seriellen Schnittstelle
Weblinks
- Virtual Serial Port Driver - Genaue Emulation der realen seriellen Schnittstelle
- Com Port Monitor
- The EIA232 (former RS232) Standard
- Introduction to Serial Communications
- lvr.com "Serial Port Central"
- QuickComs: RS-232 Analyzer - Wettbewerbsbeitrag für M16C/62P µC von Nicholas Lott
- Portmon für Windows
- Sprites mods: Automatic baudrate converter (Attiny2313, GPL)
- Arduino with Visual Basic by Carl Morey auf codeproject.com