die direkt auf einen lokalen Bus des
Rechners zugreifen, wie zum Beispiel
ISA, EISA, PCI und so weiter.
Bei dem hier beschriebenen Projekt
handelt es sich um eine Karte mit 32
digitalen Eingängen zum Anschluss an
die serielle Schnittstelle (RS232) eines
(IBM-kompatiblen) PCs.
Serielle Verbindung
Die serielle Schnittstelle wird
hauptsächlich für die Verbindung
zwischen zwei Computern oder
zwischen Computer und Peripherie wie
Modem und Maus verwendet. Hinter
diesem Port steckt fast immer ein UART
(Universal Asynchronous Receiver
Transmitter), der als integrierter Baustein
auf der Hauptplatine des PCs zu finden
ist. Die Hauptaufgabe ist Umwandlung
der Daten von serieller nach paralleler
Übertragung und umgekehrt, von
parallel nach seriell.
Ein PC kann mit bis zu vier seriellen Ports
(COM1 to COM4) ausgestattet sein,
wobei jeder Port acht Plätze im I/O-
Speicherbereich belegt (siehe
Tabelle 1).
Die vom UART verwendeten Haupt-
Signalleitungen für das serielle Senden
und Empfangen sind TxD und RxD.
Weitere Signalleitungen (DCD, DSR, RTS,
CTS, DTR, RI) werden für
unterschiedliche Modi der seriellen
Übertragung benötigt.
X-2 - 3/2000 Elektor
EXTRA
——————————————————— PC-P
LUS
Der wesentliche Unterschied zwischen diesem Entwurf und
anderen Datenerfassungskarten am seriellen PC-Port liegt
darin, dass die Karte ohne Mikrocontroller oder UART
für die serielle Kommunikation auskommt. Die Karte
greift stattdessen für die Seriell/Parallel-Wandlung direkt
auf die Register des UARTs im PC zu.
BUFFER #4
INPUTS 24...31
8
MUX #4
COM DRIVER / RECEIVER
8
3
BUFFER #3
INPUTS 16...23
8
COM PORT
3
4
002012 - 11
MUX #3
8
3
BUFFER #2
INPUTS 08...15
8
MUX #2
8
3
BUFFER #1
INPUTS 00...07
8
MUX #1
8
3
1
1
1
1
32-Kanal-Digital-
Eingangskarte
für RS232
Datenerfassung einmal anders
Bild 1. Blockschaltbild der 32-Kanal-D/I-Karte
Die digitale Erfassung und Verarbeitung
von Messdaten durch einen Computer
gibt es im Prinzip schon so lange, wie es
mittlere und kleine Rechner gibt. Erste
Anwendungen gab es schon in den
60er-Jahren, vor allem in der Militär-
und Raumfahrttechnik. Mit der
Erfindung des Mikrocomputers und
dem Siegeszug des PCs hat die digitale
Datenverarbeitung in den gesamten
Bereich der industriellen Mess-, Steuer-
und Regeltechnik Einzug gehalten. Für
die Verbindung zwischen dem Rechner
und der Außenwelt sorgen dabei
spezielle Interfacekarten und Module.
Besonders verbreitet sind dabei Karten,
Spezifikationen:
Anzahl der Eingänge:
32
Art der Eingänge:
TTL kompatibel
(”0” = 0 V, ”1” = 5 V)
Ausgang:
RS232 (für seriellen PC-Port)
Kommunikation:
Direct-access auf
UART-Register
Power Supply:
9 -15 V Gleichspannung
Entwurf von George Vastianos
Obwohl einige dieser zusätzlichen
Leitungen als Eingänge und andere als
Ausgänge arbeiten, lässt sich jede
Leitung (mit Ausnahme von RxD) durch
ein Bit des UART-Registers steuern.
Tabelle 2 gibt eine Übersicht über die
Pinbelegung der Schnittstelle und die
I/O-Adressen.
Die an der seriellen Schnittstelle
verwendeten Logikpegel (RS232-Pegel)
unterscheiden sich von TTL: Ein logische
1 wird durch eine Spannung von –12V,
eine logische 0 durch +12V dargestellt.
Die Hardware
Im Blockschaltbild der Schaltung (Bild 1)
sind die verfügbaren Eingänge in vier
Gruppen zu je acht Eingängen unterteilt
(00-07, 08-15, 16-23, 24-31), alle sind mit
der Buffer Unit verbunden. Die Ausgänge
der Buffer Unit sind mit der Multiplexers
Unit verbunden, die aus jeder Gruppe
jeweils nur eine Leitung auswählt. Die
vier ausgewählten Leitungen
durchlaufen die COM-
Treiber/Empfänger-Einheit, in der die
Umsetzung von 5-V-Logik auf die RS232-
Pegel erfolgt, so dass die Signale an vier
Pins der seriellen PC-Schnittstelle
angelegt werden können (CTS, DSR, RI,
DCD). Zur Steuerung der Auswahl Signale
durch die Multiplexer Unit werden drei
Ausgänge des seriellen Ports
herangezogen (TXD, DTR, RTS). Über die
COM Driver/Receiver Unit (hier wird von
RS232- auf TTL-Pegel gewandelt)
gelangen die drei Signale an die
Adresseingänge des Multiplexers.
Puffer
Im Schaltplan Bild 2 sind die 32
Eingänge für eine einfachere
PC-P
LUS
——————————————————
Elektor
EXTRA
X-3 - 3/2000
Bild 2. Schaltbild der Puffereinheit.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
K1
74HC541
IC1
11
12
13
14
15
16
17
18
19
EN
2
3
4
7
8
9
5
6
&
1
74HC541
IC2
11
12
13
14
15
16
17
18
19
EN
2
3
4
7
8
9
5
6
&
1
8x 10k
1
2
3
4
5
6
7
8
9
R1
5V
8x 10k
1
2
3
4
5
6
7
8
9
R2
5V
CH0
CH1
CH2
CH3
CH4
CH5
CH6
CH7
CH8
CH9
CH10
CH11
CH12
CH13
CH14
CH15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
K2
8x 10k
1
2
3
4
5
6
7
8
9
R4
8x 10k
1
2
3
4
5
6
7
8
9
R3
74HC541
IC3
11
12
13
14
15
16
17
18
19
EN
2
3
4
7
8
9
5
6
&
1
74HC541
IC4
11
12
13
14
15
16
17
18
19
EN
2
3
4
7
8
9
5
6
&
1
CH16
CH17
CH18
CH19
CH20
CH21
CH22
CH23
CH24
CH25
CH26
CH27
CH28
CH29
CH30
CH31
002012 - 12
5V
5V
IC1
20
10
C1
100n
5V
IC2
20
10
C2
100n
5V
IC3
20
10
C3
100n
IC4
20
10
C4
100n
Tabelle 1.
Transmit/Receive Buffer
3F8h
2F8h
3E8h
2E8h
Interrupt Enable Register
3F9h
2F9h
3E9h
2E9h
Interrupt Identification Register
3FAh
2FAh
3EAh
2EAh
Line Control Register
3FBh
2FBh
3EBh
2EBh
Modem Control Register
3FCh
2FCh
3ECh
2ECh
Line Status Register
3FDh
2FDh
3EDh
2EDh
Modem Status Register
3FEh
2FEh
3EEh
2Eeh
Tabelle 2.
Pin-Name
Pin #
Pin #
COM1
COM2
COM3
COM4
Bit
I/O
25-Pin Konnector
9-Pin Konnector
TxD
2
3
3FBh
2FBh
3EBh
2EBh
6
O
DTR
20
4
3FCh
2FCh
3ECh
2ECh
0
O
RTS
4
7
3FCh
2FCh
3ECh
2ECh
1
O
CTS
5
8
3FEh
2FEh
3EEh
2EEh
4
I
DSR
6
6
3FEh
2FEh
3EEh
2EEh
5
I
RI
22
9
3FEh
2FEh
3EEh
2EEh
6
I
DCD
8
1
3FEh
2FEh
3EEh
2EEh
7
I
Gestaltung der Platine in zwei Gruppen
zu 16 aufgeteilt, die über Steckverbin-
der K1 und K2 angeschlossen werden.
Die Zuordnung der Anschlüsse ist in
Tabelle 3 angegeben.
Alle Eingänge sind mit Pull-up-
Widerständen beschaltet R1-R4 (10-k
Ω-
Arrays), damit auch offene Eingänge
auf definiertem Pegel liegen. Für die
Pufferung sorgen IC1-IC4 (74HC541).
Die vier Kondensatoren C1-C4 (100 nF)
dienen als Entkoppelkondensatoren.
Die Steuereingänge (Output Enable,
Pin 1 und 19) der ICs 74HC541 liegen
an Masse, so dass die Puffer
kontinuierlich arbeiten.
Multiplexer
Wie Bild
3
zeigt, bestehen die
Multiplexer aus vier 74HC151s (IC5-IC8)
mit vier 100-nF-Kondensatoren (C5-C8)
zur Entkopplung. Der Output-Enable-
Steuereingang (Pin 7) eines jeden
74HC151 liegt an Masse, so dass auch
die Multiplexer kontinuierlich arbeiten.
Die A-, B-, und C-Adresseingänge aller
74HC151 sind miteinander verbunden,
um alle 32 Eingänge selektieren zu
können.
COM-Treiber/Empfänger
Dieser Schaltungsteil enthält mit IC10
(7805) auch einen Spannungsregler, so
dass die Karte mit einer unstabilisierten
Spannung versorgt werden kann,
wobei D1 für einen Verpolschutz sorgt.
In der Schaltung in Bild 4 ist IC9
(MAX237) der RS232-Sende-Empfangs-
baustein, der über drei Kanäle zur
Umwandlung von RS232- nach TTL-
Pegel und 5 Kanäle zur TTL- nach
RS232-Konversion. Die Erzeugung der
Spannungen für die RS232-Pegel
erfolgt durch Spannungsverdopplung
mit Hilfe von fünf Kondensatoren (C9-
C13: 1
µ/35V).
Der MAX237 beinhaltet für jeden Kanal
einen Inverter. Da aber die vier
invertierten Ausgänge der vier
74HC151 verwendet werden, ergibt
sich eine zweifache Invertierung und
damit keine Invertierung.
Die Steuersoftware
Das Programm für die Kommunikation
mit der Karte wurde in QBASIC
geschrieben. Diese Kommunikations-
routine CARD32DI ist im Listing 1
angegeben. Beim Aufruf der Routine
(von jedem in Qbasic geschriebenen
Programm aus) ist die folgende Syntax
einzuhalten:
CALL CARD32DI (COMADDRESS,
CHANNEL (), DATA0, DATA1,
DATA2, DATA3)
X-4 - 3/2000 Elektor
EXTRA
——————————————————— PC-P
LUS
C5
100n
C7
100n
CH0
74HC151
IC5
MUX
11
10
12
13
14
15
EN
16
7
3
2
1
6
5
9
4
3
2
1
0
2
0
7
6
5
4
G
0
7
8
74HC151
IC7
MUX
11
10
12
13
14
15
EN
16
7
3
2
1
6
5
9
4
3
2
1
0
2
0
7
6
5
4
G
0
7
8
C6
100n
C8
100n
74HC151
IC6
MUX
11
10
12
13
14
15
EN
16
7
3
2
1
6
5
9
4
3
2
1
0
2
0
7
6
5
4
G
0
7
8
74HC151
IC8
MUX
11
10
12
13
14
15
EN
16
7
3
2
1
6
5
9
4
3
2
1
0
2
0
7
6
5
4
G
0
7
8
002012 - 13
CH1
CH2
CH3
CH4
CH5
CH6
CH7
CH16
CH17
CH18
CH19
CH20
CH21
CH22
CH23
CH8
CH9
CH10
CH11
CH12
CH13
CH14
CH15
CH24
CH25
CH26
CH27
CH28
CH29
CH31
CH30
D0
D1
D2
D3
A0
A1
A2
5V
5V
5V
5V
MAX237
R1OUT
R2OUT
T1OUT
T2OUT
R3OUT
T4OUT
T3OUT
T5OUT
IC1
T1IN
T2IN
R1IN
R2IN
T3IN
T4IN
T5IN
R3IN
C1–
C1+
C2+
C2–
12
10
V+
V-
23
22
13
14
11
15
17
18
19
21
16
24
20
7
5
6
4
2
8
9
3
1
C9
C10
C12
C11
C13
K3
1
2
3
4
5
6
7
8
9
D0
D1
D2
D3
A0
A1
A2
5V
LM7805CT
IC10
C14
100n
C15
330n
K4
D1
1N4001
C9 ....C13 = 1µ / 35V
5V
002012 - 14
Bild 3. Schaltung des Multiplexers.
Bild 4. Schaltbild der COM-Treiber/Empfänger-Einheit und der Stromversorgung.
Darin sind:
COMADDRESS:
Integer-Variable,
welche (vor dem Aufruf) die
Basisadresse des seriellen Ports
enthalten müssen. Zulässige Werte
dieser Variablen sind &H3F8 (für COM1),
&H2F8 (für COM2), &H3E8 (für COM3),
&H2E8 (für COM4).
CHANNEL (): Matrix-Integer-Variable (mit
Pointern von 0 to 31), die (nach dem
Aufruf) den logischen Zustand eines
jeden Kanals enthält (Werte 1 oder 0).
DATA0, DATA1, DATA2 & DATA3: Integer
Variablen, die (nach Aufruf) den
arithmetischen Wert einer jeden
Gruppe von 8 Kanälen (00-07, 08-15,
16-23 und 24-31). Die logischen
Zustände aller 32 Kanäle ergeben ein
doppeltes Wort (32 bit) mit Ch0 als LSB
und Ch31 als MSB. Dieses doppelte
Wort kann durch die vier Bytes DATA0,
DATA1, DATA2 & DATA3 ausgedrückt
werden, wobei DATA0 das LS-Byte und
DATA3 das MS Byte ist. Diese Variablen
sind in den Fällen zu verwenden, in
denen man die Logikzustände aller
Kanäle in einer Datei speichern
möchte. Diese “Kompression” erlaubt
es, mit nur 4 Bytes (anstelle von 32)
auszukommen. Für den Test der 32-
Kanal-D/I-Karte wurde ein Demonstra-
tionsprogramm entwickelt (siehe Bild 5).
Um die Adresse des seriellen Ports zu
ändern, werden einfach die Tasten
<1> bis <4> verwendet. Das
Verlassen des Programms erfolgt mit
<Esc>.
Bezugsquellen
Der Quellkode der Kommunikations-
routine (CARD32DI.SUB) und das
D e m o n s t r a t i o n s p r o g r a m m
(32DICARD.BAS) mit einer Exe-Version
des Demonstrationsprogramms
(32DICARD.EXE) sind über folgende
Internetadresse erhältlich:
http://members.xoom.com/robofreak/
download/32dicard.htm
die für den tatsächlichen Download auf
die Website des Autors führt:
http://www.robofreak.xs3.com
Der Autor selbst ist via E-Mail zu
erreichen: sebastian@mail.kapatel.gr
(002012-1e)
PC-P
LUS
——————————————————
Elektor
EXTRA
X-5 - 3/2000
Bild 5. Screendump des Demo-
Programms.
REM **************************************
REM * 32 Channel D/I Card *
REM * CARD32DI Communication Routine *
REM * Copyright (c) April 1999 *
REM * by George Vastianos *
REM * email:robofreak@technologist.com *
REM * http://members.xoom.com/robofreak/ *
REM **************************************
‘
SUB CARD32DI (COMADDRESS, CHANNEL(), DATA0, DATA1, DATA2, DATA3)
DATA0 = 0: DATA1 = 0: DATA2 = 0: DATA3 = 0
FOR BIT = 0 TO 7
IF (BIT AND 1) = (INP(COMADDRESS + 4) AND 1) THEN
OUT (COMADDRESS + 4), INP(COMADDRESS + 4) XOR 1
END IF
IF (BIT AND 2) = (INP(COMADDRESS + 4) AND 2) THEN
OUT (COMADDRESS + 4), INP(COMADDRESS + 4) XOR 2
END IF
IF (BIT AND 4) = (INP(COMADDRESS + 3) AND 64) / 16 THEN
OUT (COMADDRESS + 3), INP(COMADDRESS + 3) XOR 64
END IF
OUT COMADDRESS + 1, 0
OUT COMADDRESS + 2, 0
INDATA = INP(COMADDRESS + 6) AND 240
CHANNEL(BIT) = (INDATA AND 16) / 16
CHANNEL(BIT + 8) = (INDATA AND 32) / 32
CHANNEL(BIT + 16) = (INDATA AND 64) / 64
CHANNEL(BIT + 24) = (INDATA AND 128) / 128
DATA0 = DATA0 + CHANNEL(BIT) * 2 ^ BIT
DATA1 = DATA1 + CHANNEL(BIT + 8) * 2 ^ BIT
DATA2 = DATA2 + CHANNEL(BIT + 16) * 2 ^ BIT
DATA3 = DATA3 + CHANNEL(BIT + 24) * 2 ^ BIT
NEXT BIT
END SUB
Tabelle 3.
K1 K2
Kanal
Pin-Nummer
Kanal
Pin-Nummer
00
33
16
33
01
31
17
31
02
29
18
29
03
27
19
27
04
25
20
25
05
23
21
23
06
21
22
21
07
19
23
19
08
15
24
15
09
13
25
13
10
11
26
11
11
9
27
9
12
7
28
7
13
5
29
5
14
3
30
3
15
1
31
1