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:
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.
Pin-Nummer bei DB-9 | Pin-Nummer bei DB-25 | Signal abgekürzt | ausführlich |
---|---|---|---|
1 | 8 | CD | Carrier Detect |
2 | 3 | RxD | Receive Data |
3 | 2 | TxD | Transmit Data |
4 | 20 | DTR | Data Terminal Ready |
5 | 7 | GND | Ground |
6 | 6 | DSR | Data Set Ready |
7 | 4 | RTS | Request To Send |
8 | 5 | CTS | Clear To Send |
9 | 22 | RI | Ring 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.
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!
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
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.
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:
Parameter | Beispielwerte |
---|---|
Übertragungsgeschwindigkeit, auch Baudrate | 300 bps, 2400 bps, 4800 bps, 9600 bps, 19200 bps |
Parität | keine, gerade, ungerade |
Datenwortlänge | 8 Bits, 7 Bits |
Anzahl Stop-Bits | 1 Bit, 2 Bits |
BASIC kennt noch einige weitere Parameter:
CHR$(26)
das sog. End Of Transmission-Zeichen (EOT) dar analog dem Dateiende
(EOF()
wird dann wie bei normalen Diskdateien auf -1 gesetzt),
während Sie im Binärmodus wirklich jeden beliebigen Bytewert
über die Leitung schicken könnenINPUT$()
»abholen« Umgekehrt legt PRINT#
die Daten auch solange
in den Sendepuffer, bis sie übermittelt werden.' 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.
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:
RS
verwenden, um die Berücksichtigung dieser Signale auszuschalten:
OPEN "COM2:9600,N,8,1,DS0,CS0,CD0,BIN,RS" AS 1Unter UNIX und Linux sollten Sie mit stty die clocal-Option aktivieren:
# stty clocal </dev/ttyS1
OPEN
-Anweisung entsprechend an, auf der UNIX/Linux-Seite
überprüfen Sie mit
# stty -a </dev/ttyS1die aktuellen Einstellungen und setzen diese, wie in man stty beschrieben, entsprechend.
OPEN "COM2:9600,N,8,1,DS0,CS0,CD0,BIN,TB4096,RB4096" AS 1
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.