Kommunikation über die serielle Schnittstelle

Einführung

In diesem Kapitel beschreibe ich kurz die Verwendung der seriellen Schnittstelle von BASIC aus und gehe gleichzeitig noch auf den Aspekt vom Kabel ein. Die Vorzüge dieser Kommunikationstechnik sind sicher:

Nullmodemkabel

Im Gegensatz zu einem richtigen Modem, wo Sie ein einfaches 1:1-verdrahtetes Kabel verwenden, benötigt man zwischen zwei Rechnern ein sog. Nullmodemkabel, bei welchem die Signalpaare TxD-RxD, DSR-DTR und DTR-DSR gekreuzt verbunden sind, ausserdem besitzt es in der Regel zwei weibliche Stecker.

Signalbelegung an den Pins
Pin-Nummer bei DB-9Pin-Nummer bei DB-25 Signal abgekürztausführlich
18CDCarrier Detect
23RxDReceive Data
32TxDTransmit Data
420DTRData Terminal Ready
57GNDGround
66DSRData Set Ready
74RTSRequest To Send
85CTSClear To Send
922RIRing Indicator

Bei der älteren, 25poligen Ausführung gibt es noch einige Signale mehr (z.B. Pin 1=PGND; Kabelabschirmung), auf welche hier jedoch nicht mehr weiter eingegangen wird, da mittlerweile alle modernen PCs nur noch mit 9poligen RS-232-Buchsen ausgestattet werden.

Bauplan für ein Nullmodemkabel

Die folgende Bauanleitung wurde sorgfältig überprüft, dennoch kann keine absolute Fehlerfreiheit garantiert werden. Für etwaige Hardware-Beschädigungen wird daher keine Haftung übernommen!

Für ein umfangreicheres Anzeigetafelprojekt lötete ich mir von ein paar Jahren solche Kabel, deren Bauplan ich Ihnen hier wiedergeben möchte, falls Ihnen der Umgang mit einem Lötkolben keine Probleme bereitet. Bei mir war seinerzeit der Grund, dass im Handel nicht die benötigte Länge vorhanden war. Das absolute Minimum stellt ein dreiadriges Kabel dar, bei welchem nur die beiden GND 1:1 sowie TxD/RxD gekreuzt verbunden sind. Wegen dem fehlenden sog. Hardware Handshaking rate ich Ihnen dringend davon ab, so dass Sie im Minimum ein 5adriges oder sogar 7adriges Kabel verwenden sollten, da die Verwendung von XON/XOFF häufig Probleme verursacht.

Bevor Sie in den Laden eilen, werfen Sie am besten noch einen Blick auf die Hinterseite Ihrer beiden Computer, ob sie einen 9poligen oder 25poligen Anschluss besitzen, um die passenden Stecker einkaufen zu können!

Lötschema für ein 5adriges Kabel

Folgende Pins 1:1 verbinden:

Folgende Pins gekreuzt verlöten:

Ausserdem innerhalb jedes Steckers noch folgende Drahtbrücke löten:

Grafisch sieht das Kabel dann wie folgt aus:

Sub-D 9polig | Sub-D 25polig              Sub-D 25polig | Sub-D 9polig
-------------+--------------              --------------+-------------
 Pin 3       |  Pin 2        >____ ____<    Pin 2       | Pin 3
 Pin 2       |  Pin 3        <____X____>    Pin 3       | Pin 2
 Pin 6       |  Pin 6        <____ ____>    Pin 6       | Pin 6
 Pin 4       |  Pin 20       >____X____<    Pin 20      | Pin 4
 Pin 8       |  Pin 5        <_       _>    Pin 5       | Pin 8
 Pin 7       |  Pin 4        >_|     |_<    Pin 4       | Pin 7
 Pin 1       |  Pin 8        <_|     |_>    Pin 8       | Pin 1
 Pin 5       |  Pin 7        ___________    Pin 7       | Pin 5

Lötschema für ein 7adriges Kabel

Folgende Pins 1:1 verbinden:

Folgende Pins gekreuzt verlöten:

Ausserdem innerhalb jedes Steckers noch folgende Drahtbrücke löten:

Grafisch sieht das Kabel dann wie folgt aus:

Sub-D 9polig | Sub-D 25polig              Sub-D 25polig | Sub-D 9polig
-------------+--------------              --------------+-------------
 Pin 3       |  Pin 2        >____ ____<    Pin 2       | Pin 3
 Pin 2       |  Pin 3        <____X____>    Pin 3       | Pin 2
 Pin 6       |  Pin 6        <____ ____>    Pin 6       | Pin 6
 Pin 4       |  Pin 20       >____X____<    Pin 20      | Pin 4
 Pin 8       |  Pin 5        <____ ____>    Pin 5       | Pin 8
 Pin 7       |  Pin 4        >____X____<    Pin 4       | Pin 7
 Pin 1       |  Pin 8        <_|     |_>    Pin 8       | Pin 1
 Pin 5       |  Pin 7        ___________    Pin 7       | Pin 5

Der Unterschied gegenüber dem 5adrigen Kabel ist lediglich, dass man RTS/CTS genauso kreuzt und nicht mehr bloss eine Drahtbrücke bildet.

Weiterführende Informationen dazu

Programmierung

Bevor es gleich los geht, müssen Sie im Falle einer Industriekomponente oder UNIX/Linux-Rechner die Kommunikationsparameter kennen, im Falle, dass Sie auf beiden Kommunikationsseiten BASIC einsetzen, können Sie diese natürlich selber festlegen:

Kommunikationsparameter bei RS-232
ParameterBeispielwerte
Übertragungsgeschwindigkeit, auch Baudrate300 bps, 2400 bps, 4800 bps, 9600 bps, 19200 bps
Paritätkeine, gerade, ungerade
Datenwortlänge8 Bits, 7 Bits
Anzahl Stop-Bits1 Bit, 2 Bits

BASIC kennt noch einige weitere Parameter:

Erstes Beispiel: Sehr einfaches Terminalprogramm

' Oberprimitives Terminal

OPEN "COM2:9600,N,8,1,DS0,CS0,CD0,BIN" AS 1
LokalesEcho% = 0

DO
  t$ = INKEY$
  IF t$ <> "" THEN    ' Taste gedrückt?
    PRINT#1, t$;      ' senden
    IF LokalesEcho% THEN
      PRINT t$;
    END IF
  END IF
  a% = LOC(1)
  IF a% > 0 THEN  ' etwas erhalten?
    z$=INPUT$(a%, 1)
    PRINT z$;          ' am Bildschirm ausgeben
  END IF
LOOP UNTIL t$=CHR$(27)

CLOSE 1

Dieses Programm eignet bereits als Einloggkonsole in einen UNIX- oder Linux-Rechner, bei welchem der zu Beginn dieses Artikels erwähnte getty-Daemon läuft. Ebenso können Sie damit bereits zu zweit wie im Internet miteinander »chatten« :-).

Von der Programmierung her ist die serielle Schnittstelle wie eine Datei, bei welcher Sie gleichzeitig lesen und schreiben können. Um aber eine Blockierung beim Lesen zu vermeiden, sollten Sie mit der LOC()-Funktion jeweils vorher schauen, ob Daten bereit liegen. Siehe dazu Ereignisabfragen.

Kommunikationsprobleme?

Falls beim Ausprobieren des obigen Programms die Tastatureingaben nicht auf dem anderen Bildschirm erscheinen wollen oder Ihr UNIX/Linux-Rechner Ihnen einfach keinen Login-Prompt anzeigen will, helfen Ihnen folgende Tips bei der Fehlersuche:

Nutzung von COM3 und COM4

Nicht selten brauchen Sie häufig mehr als nur 2 Schnittstellen. Hardwaremässig können Sie zu diesem Zweck eine E/A-Steckkarte in Ihren PC einbauen (war bei mir seinerzeit auch der Fall, da der Steuer-PC insgesamt 4 Commodore Amigas ansteuern musste). Der interne OPEN "COM..."-Befehl unterstützt jedoch nur die beiden ersten Schnittstellen. Die löbliche Ausnahme bildet hier Power Basic, welches alle 4 Schnittstellen unterstützt. Beim normalen GWBASIC.EXE und QuickBASIC müssen Sie entweder direkt über CALL INTERRUPT arbeiten (im Download-Bereich der QuickBASIC-Heimseite gibt es sogar eine spezielle Bibliothek, welche auch die Nutzung von 115200 bps erlaubt) oder sonst die Schnittstelle mit

C:\BASICPRG>mode com3:9600,n,8,1,r

Residenter Teil von MODE geladen

COM3: 9600,n,8,1,r

C:\BASICPRG>_

auf der MS-DOS-Befehlszeilenebene vorkonfigurieren und in QuickBASIC mit

OPEN "com3" FOR OUTPUT AS 1

(man beachte den fehlenden Doppelpunkt!) als normale Datei öffnen. Allerdings steht Ihnen die LOC()-Funktion nicht mehr zur Verfügung, ebenso kein Kommunikationspuffer. Ausserdem sind häufig keine freien Interrupts vorhanden, denn das Betreiben von COM1 und COM3 auf IRQ 4 sowie COM2 und COM4 auf IRQ 3 funktioniert nach meinen Erfahrungen nicht sonderlich gut. Am besten überprüfen Sie auf Ihrem PC die Situation im Gerätemanager oder mit MSD.EXE:

  File  Utilities  Help
   _------------------------------ IRQ Status ------------------------------+
 __|   IRQ  Address    Description       Detected            Handled By     |
   | ---  ---------  ----------------  ------------------  ---------------- |E:
 __|   0  0563:0000  Timer Click       Yes                 ???              |
 __|   1  D7D1:08D2  Keyboard          Yes                 KEYB             |
   |   2  F000:EF6F  Second 8259A      Yes                 BIOS             |
 __|   3  F000:EF6F  COM2: COM4:       COM2:               BIOS             |
 __|   4  F000:EF6F  COM1: COM3:       COM1: Not Detected  BIOS             |
   |   5  F000:EF6F  LPT2:             No                  BIOS             |
 __|   6  D6FB:009A  Floppy Disk       Yes                 Default Handlers |
 __|   7  0070:0465  LPT1:             Yes                 System Area      |
   |   8  D6FB:0035  Real-Time Clock   Yes                 Default Handlers |
 __|   9  F000:ECF3  Redirected IRQ2   Yes                 BIOS             |
 __|  10  F000:EF6F  (Reserved)                            BIOS             |
   |  11  D6FB:00CA  (Reserved)                            Default Handlers |
 __|  12  D6FB:00E2  (Reserved)                            Default Handlers |
 __|  13  F000:F0FC  Math Coprocessor  Yes                 BIOS             |
   |  14  D6FB:00FA  Fixed Disk        Yes                 Default Handlers |
 __|  15  D6FB:0112  (Reserved)                            Default Handlers |
 __+------------------------------------------------------------------------|
   |                                   OK   _                               |
 __|                                 ________                               |
   +------------------------------------------------------------------------+
IRQ Status: Displays current usage of hardware interrupts.

Auch hier erlaubt Power Basic ein nachträgliches Festlegen auf beispielsweise IRQ 10 oder IRQ 11.


Wieder zurück zur Übersicht


© 2000 by Andreas Meile