Man kann sich es kaum noch vorstel-
len, aber der Personal-Computer
wurde ursprünglich einzig zur
Automatisierung des Büroalltags ent-
worfen. So hat man seinerzeit diese
elektronische Sekretärin mit
Anschlußmöglichkeiten für
Standardgeräte wie Drucker oder
Modem ausgestattet, verschwendete
aber nicht den geringsten Gedanken
daran, den Anwendern analoge
und/oder digitale Ein- und Ausgänge
für Steuer- und Regelaufgaben zur
Verfügung zu stellen.
Paraport ist eine Schaltung oder bes-
ser ein komplettes System, daß mit
geringem technischen und finanziel-
len Aufwand einen normalen PC mit
einer großen Zahl von I/O-Leitungen
ausstattet. Dazu nutzt Paraport die par-
allele Standard-Druckerschnittstelle. In
der maximalen Ausbaustufe können
256 I/O-Leitungen realisiert werden,
und zwar nicht nur je 128 Ein- und
Ausgänge, sondern in fast jeder belie-
bigen Verteilung.
Die Eingänge arbeiten auf TTL-Niveau.
Die Ausgänge sind Puffer mit offenem
Kollektor und können direkt auch
schwerere Lasten schalten. Dank des
modularen Aufbaus ist der Anwender in
der Lage, genau die Ausbaustufe zu
verwirklichen, die er als ideal ansieht. So
kann Paraport so preiswert und so kom-
pakt wie möglich gehalten werden.
Ein Ansatz
Paraport ist modular aufgebaut und
besteht aus einem Interface zur
Druckerschnittstelle (Bus-Einheit) und
X-12 - 2/99 Elektor
EXTRA
———————————————————— PC-P
LUS
Nur einige wenige Bauteile verwandeln die Standard-
Druckerschnittstelle des PCs in ein I/O-System mit
maximal 256 I/O-Leitungen. Wir stellen die dazu not-
wendige Hardware und ein kleines BASIC-Programm
vor. Doch auch in anderen Programmiersprachen
kann die Hardware angesteuert werden.
Entwurf von V. Himpe
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
K1
D25
K3
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
K2
7805
U1
C4
100
µ
25V
C3
47
µ
10V
C1
100n
C2
100n
5
6
1
U2c
5
6
1
U3c
9
8
1
U2d
9
8
1
U3d
11
10
1
U2e
11
10
1
U3e
13
12
1
U2f
13
12
1
U3f
1
2
1
U3a
RA1
9x 47k
STROBE
D0
D2
D1
D3
A2
A3
A0
A1
R1
100k
U2
14
7
U3
14
7
U2 = 74LS04
U3 = 74LS05
5V
5V
5V
5V
5V
GND
+12V
990025 - 11
STR
STR
1
2
1
U2a
3
4
1
U2b
3
4
1
U3b
5V
5V
1
2
3
4
5
6
7
8
9
10
Paraport
256 I/O-Leitungen an der Druckerschnittstelle
Bild 1. Das Schaltbild der Bus-unit, an die sämtliche I/O-Module angeschlossen werden.
den eigentlichen I/O-Einheiten. Jede
I/O-Einheit besitzt acht TTL-kompatible
Eingänge und acht gepufferte
Ausgänge. Es können maximal 16 I/O-
Einheiten an die Bus-Unit angeschlos-
sen werden. In der höchsten
Ausbaustufe sind also 17 Platinen mit
der Druckerschnittstelle verbunden.
Port-Verlängerung: bus-unit
In Bild 1 ist der Aufbau der Bus-Einheit
zu sehen. Es handelt sich dabei ledig-
lich um eine Anzahl von Invertern, die
die Signale der Druckerschnittstelle
adäquat puffern. Da die Standard-
Druckerschnittstelle vor allem als
Ausgang eingesetzt wird, finden sich
auch nur wenige Steuer-Eingänge an
dem Port. Vom PC werden die
Datenleitungen D0...D3 als digitale
Ausgänge, die Steuerleitungen ackno-
wledge, busy, paper empty und sel-
ect als digitale Eingänge genutzt. Die
Adressierung der maximal 16 I/O-
PC-P
LUS
———————————————————
Elektor
EXTRA
X-13 - 2/99
K5
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
K4
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
D0
D2
D1
D3
A2
A3
A0
A1
5V
S1
8243-
MCS48
PROG
U4
P40
P41
P42
P43
P50
P51
P52
P53
P20
P21
P22
P23
P60
P61
P62
P63
P70
P71
P72
P73
23
22
21
20
19
18
17
13
14
15
16
12
24
11
10
CS
2
3
4
5
1
9
8
7
6
8x 47k
RA3
8x 47k
74LS688
U7
1P=Q
COMP
11
13
15
19
G1
17
18
12
14
16
1
2
4
6
8
0
7
3
0
5
7
9
7
P
Q
5V
5V
5V
STR
STR
3
4
5
6
U7
20
10
C5
47
µ
10V
990025 - 12
5V
1
2
8
7
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
U6
2803
VEE
+VS
ULN
11
12
13
14
15
16
17
18
I0
I1
I2
I3
I4
I5
I6
I7
O0
O1
O2
O3
O4
O5
O6
O7
10
1
2
3
6
7
8
4
5
9
U5
2803
VEE
+VS
ULN
11
12
13
14
15
16
17
18
I0
I1
I2
I3
I4
I5
I6
I7
O0
O1
O2
O3
O4
O5
O6
O7
10
1
2
3
6
7
8
4
5
9
ULN2803
OUT 1
OUT 0
OUT 2
OUT 3
OUT 4
OUT 5
OUT 6
OUT 7
IN 0
IN 1
IN 2
IN 3
IN 4
IN 5
IN 6
IN 7
VEE
+VS
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
Bild 2. Maximal 16 dieser I/O-Module können eingesetzt werden.
Bild 3. Der innere Aufbau des 82C43: ein Controller, der über fünf 4-bit-Ports verfügt.
Module erfolgt über die übrigen
Ausgänge D4...D7. Letztendlich erfüllt
auch das Strobe-Signale eine
Funktion: Es sorgt dafür, daß Paraport
die Daten oder Befehle auf den
Leitungen D0...D3 im richtigen
Moment liest.
I/O-Module
Die I/O-Module, deren Aufbau in Bild
2 zu erkennen ist, werden an der Bus-
Platine angeschlossen. Am Eingang
jedes I/O-Moduls befindet sich ein
82C43, ein sogenannter Port-
Expander, der von Intel speziell ent-
wickelt wurde, um die I/O-
Möglichkeiten des 8048 (des
Vorgängers der berühmten 8031/51-
Mikrocontroller) zu erweitern. Hier ein
kurzer Blick ins Innere dieses Bausteins:
Der Chip wird in einem 24poligen
Gehäuse geliefert und umfaßt fünf
bidirektionale 4-bit-Ports (P2, P4...P7)
X-14 - 2/99 Elektor
EXTRA
———————————————————— PC-P
LUS
Bild 4. Das Platinenlayout der Bus-Einheit samt Bestückungsplan stammt vom Autor.
Bild 5. Layout und Bestückungsplan des I/O-Moduls.
Stückliste Bus-Einheit
Widerstände:
R1 = 47 k
RA = 9
⋅47 k Widerstandsarray SIL
Kondensatoren:
C1,C2 = 100 n
C3 = 100
µ/25 V
C4 = 47
µ/25 V
Halbleiter:
U1 = 7805
U2 = 74LS04
U3 = 74LS05
Außerdem:
K1 = 25poliger Sub-D-Verbinder, männ-
lich, gewinkelt für Platinenmontage
K2 = 2polige Platinenanschlußklemme
RM5
K3 = 2
⋅8poliger Pfostenverbinder,
gewinkelt, mit Schutzkragen und
Auswerfern mit Gegenstück für Aufpreß-
Kabelmontage
20 cm 16poliges Flachbandkabel
Stückliste I/O-Einheit
(maximal 16 Stück)
Widerstände:
RA1,RA2 = 8
⋅47 k Widerstandsarray SIL
U5,U6 = 8
⋅330 Ω Widerstandsarray
(DIL)
*
Kondensator:
C5 = 10
µ/25 V
Halbleiter:
U4 = 82C43 oder 8243
U5,U6 = ULN2803 U7 = 74LS688
Außerdem:
K4 = 2
⋅8poliger Pfostenverbinder,
gewinkelt, mit Schutzkragen und
Auswerfern mit Gegenstück für Aufpreß-
Kabelmontage
K3 = 2
⋅10poliger Pfostenverbinder,
gewinkelt, mit Schutzkragen und
Auswerfern
SW1 = 4facher DIL-Schalter
*: siehe Text
sowie die beiden Steuereingänge
prog und cs. Die Innenblockschaltung
des 82C43 zeigt Bild 3. Die
Portnumerierung mag auf den ersten
Blick seltsam erscheinen, ergänzt aber
die Bezeichnungen der Ports des 8048.
Einer der 4-bit-Ports (P2) wird genutzt,
um mit der Druckerschnittstelle zu kom-
munizieren und ist darum direkt mit
den Ausgangsleitungen D0...D3 ver-
bunden. So bleiben 16 Leitungen frei
für die I/O-Funktionen. Das Strobe-
Signal der Druckerschnittstelle ist an
den Prog-Eingang des 82C43 gekop-
pelt und deshalb für das Lesen der
Daten direkt verantwortlich. Der letzte
Steuereingang dieses Chips ist mit
einem Adreßdekoder verbunden, der
mit einem 74LS688 aufgebaut ist.
Dieses IC ist ein alter Bekannter und
wird häufig als Adreßdekoder einge-
setzt. Mit einem vierfachen DIP-
Schalter (SW1) läßt sich die Modul-
Adresse zwischen 0 und 15 einstellen.
Stimmt diese mit der Adresse auf dem
Adreßbus überein, wird der Ausgang
des 74LS688 Low: Die I/O-Einheit ist
selektiert.
Wie im Schaltbild zu sehen, sind alle
I/O-Leitungen in gleicher Weise konfi-
guriert. Dies bedeutet, daß im Prinzip
jede Leitung wahlweise als Ein- oder
Ausgang betrieben werden kann. Da
die verwendeten Puffer immer zu acht
auf einem Chip sitzen, muß man aller-
dings immer Achtergruppen als Ein-
oder Ausgänge festlegen.
Fällt die Wahl auf Eingänge, entfällt
der Leistungstreiber ULN2803 und wird
durch ein 8faches Widerstandsarray (á
330
Ω) ersetzt. Achten Sie darauf, daß
das Widerstandsarray die Eingänge
mit den korrespondierenden
Ausgängen verbindet. Richtig ist, wenn
die IC-Anschlußpunkte 9 und 10 frei
bleiben. Die Widerstände haben die
Aufgabe, die Eingänge vor zu hohen
Eingangsströmen zu schützen. Das
Array mit den Pull-up-Widerständen
sorgt dafür, daß offene Eingänge auf
einem definierten logischen Niveau
bleiben. Da die Eingänge nur für TTL-
Pegel geeignet sind, müssen die
Eingangssignale natürlich diese
Vorbedingung erfüllen.
Konfiguriert man die Leitungen dage-
gen als Ausgänge, setzt man den
ULN2803 ein. Die acht Ausgangstreiber
dieses ICs weisen offene Kollektoren
auf, die von je einer Freilaufdiode
geschützt werden. Die Kathoden die-
ser Dioden sind gemeinsam an V
P
angeschlossen und können über K5
auf ein höheres (als TTL-) Potential
gelegt werden. Der Masseanschluß an
K5 ist mit der Systemmasse verbunden.
Der ULN2803 kann Spannungen bis 50
V und Ströme von maximal 500 mA
schalten. Dies erlaubt ein weites
Einsatzgebiet des Paraport-Systems.
Kompakte Hardware
Die Layouts und die Bestückungspläne
der Platinen von Bus- und I/O-Einheit
sind in Bild 4 respektive Bild 5 zu
sehen. Beide Platinen sind einseitig
und deshalb einfach anzufertigen. Der
Preis für die Einseitigkeit ist allerdings
eine Anzahl von Drahtbrücken auf der
Busplatine. Da diese aber nur einmal
aufzubauen ist, scheint der Aufwand
vertretbar.
Um einen möglichst kompakten
Aufbau von Paraport zu ermöglichen,
verlaufen die Verbindungen zwischen
Bus- und I/O-Platine über
Pfostenverbinder mit Auswerfern und
ein Flachbandkabel. Stellt man die
PC-P
LUS
———————————————————
Elektor
EXTRA
X-15 - 2/99
´ REM PARAPORT Programmierbeispiel
´ Verfasst von : Vincent Himpe
´ Initialisierung der Druckerschnittstelle
´ LPT1= &h378 &h379 &h37A
´ LPT2= &h278 &h279 &h27A
´ PRN = &h3BC &h3BD &h3BE
´ Controller Befehlssatz
´ Read
= 0
´ Write
= 4
´ Write_or
= 8
´ Write_and
= 12
´ Ports sind von 0 bis 3 numeriert
´ entsprechend den Chip-Portbezeichnungen 4 bis 7
´***** Initialisierung *****
OUT &378,255
´ alles auf 1 setzen
OUT &h37A,0
´ Strobe auf High setzen
´***** Schreiben *****
´ Formel, um das Befehlswort zu berechnen, ist:
´ (I/O-Einheit-Adresse * 16)+Befehl+Port
´ Beispiel: Schreiben zu Port 2 von Einheit 1
´ (1*16)+4+1 = 21
OUT &h378,21
´ Einheit-Adresse + Portadresse + Befehl
OUT &h37A,1
´ Strobe auf Low setzen
´ Formel, um Daten zu berechnen, ist:
´ (I/O-Einheit-Adresse * 16)+Daten
´ in diesem Beispiel (1*16)+Daten
´ Für einen Test werden die beiden letzten Bits High (HHLL = 12),
´ so daß das Resultat (1*16)+12 = 28 ist.
OUT &h378,28
´ Daten sind bereit
OUT &h37A,0
´ Strobe auf High setzen
´ Die Daten stehen nun am gewünschten Port
´***** Lesen *****
´ Befehlsformel wie beim Schreiben,
´ nur der Befehl ist unterschiedlich
´ (1*16)+0+1 = 17
OUT &h378,17
´ Einheit-Adresse + Portadresse + Befehl
OUT &37A,1
´ Strobe auf Low setzen
OUT &378,255
´ Die Controllerausgänge werden hochimpedant
WERT = inp(&h379)
´ Lesen
WERT = ((WERT and &hF0)/16)
´ höchstes Nibble extrahieren
OUT &h37A,0
´ Strobe auf High setzen
´***** Ende *****
Bild 6. Dieses kurze BASIC-Programm steuert Paraport.
Platinen mit 10-mm-Abstandsbolzen zu
einem “Super-Sandwich” zusammen,
reicht ein höchstens 20 cm langes
Kabel aus. Bei jeder I/O-Einheit stellt
man an den DIP-Schaltern eine indivi-
duelle Adresse ein.
Zur Stromversorgung eignet sich ein
gewöhnliches Steckernetzteil, daß
eine Ausgangsgleichspannung von 12
V liefern kann. Über den Bus wird die
von einem Festspannungsregler stabili-
sierte +5-V-Betriebsspannung an die
I/O-Einheiten weitergereicht.
Stufen in BASIC
Die Hardware ist natürlich funktionslos,
solange nicht eine geeignete
Software die Steuerung übernimmt.
Um das BASIC-Listing zu verstehen, sind
ein paar Anmerkungen zum 8243 not-
wendig. Dieses IC, das ja speziell für
die Zusammenarbeit mit dem 8048-
Mikrocontroller entwickelt wurde,
kennt besondere Prozeduren für den
Schreib- und den Lesevorgang. Diese
sollen dem 8048 ermöglichen, mit je
einem Befehl Daten zu lesen oder zu
schreiben. Ein Ansatz, den wir uns
zunutze machen.
Der 4-bit-Bus kann sowohl Befehls- als
auch Datenbus sein. Um einen Befehl
zum Expander zu leiten, muß er auf
den Bus gesetzt werden und der Pegel
auf der Strobe-Leitung von High nach
Low wechseln. Die Daten können nun
auf den Bus gelegt werden. Der
Lesevorgang wird durch einen erneu-
ten Wechsel der Strobe-Leitung (auf
High) eingeleitet.
Der 8243 kennt die vier Basisbefehle
READ, WRITE, WRITE_AND sowie
WRIT_OR. Mit READ werden Daten
gelesen, mit WRITE geschrieben, logi-
sche Funktionen, die keiner weiteren
Erläuterung bedürfen. Bei WRITE_AND
werden neu gelesene Daten mit
denen AND-verknüpft, die schon am
Port liegen. Das Resultat dieser
Verknüpfung erscheint am Port. Bei
WRITE_OR geschieht ähnliches, nur
haben wir es mit einer logischen
ODER-Verknüpfung zu tun.
Tabelle 1 und Tabelle 2 zeigen, wie
die Ports selektiert und die verschiede-
nen Funktionen aktiviert werden. Daß
der praktische Umgang mit Paraport
nicht allzu kompliziert ist, beweist das
gut kommentierte BASIC-Listing in Bild
6. Dieses einfache Programm steuert
sämtliche Funktionen des I/O-Systems.
(990025)rg
X-16 - 2/99 Elektor
EXTRA
———————————————————— PC-P
LUS
Tabelle 1. Portselektion
Ein/Ausgang
selektierter
Adreßkode Ein/Ausgang
P21 (D1)
P20 (D0)
0
0
4
0
1
5
1
0
6
1
1
7
Tabelle 2. Befehlsselektion
Befehl
Funktion
P23 (D3)
P22 (D2)
0
0
Read
0
1
Write
1
0
ORLD
1
1
ANLD
Die Geschichte der Elektronik (2)
Volta und die Batterie
Schon lange vor Anbruch des 19. Jahrhunderts hatten sich ver-
schiedene Gelehrte eingehend mit dem Phänomen der Elektrizi-
tät beschäftigt. Die Versuche, die Ursachen zu ergründen und eine
naturwissenschaftliche Basis zu schaffen, führten jedoch nicht
zum Erfolg. Zwar konnte man schon seit längerer Zeit mit soge-
nannten Elektrisiermaschinen hohe Gleichspannungen erzeugen,
deren Existenz im Experimentierlabor durch gewaltige Entla-
dungsblitze nachgewiesen wurde. Die Elektrisiermaschinen lie-
ferten jedoch nur sehr geringe Ströme, so daß die Möglichkeiten
der experimentellen Forschung begrenzt waren. Ein Fortschritt
zeichnete sich ab, als um 1700 die “Leidener Flasche”, ein Vor-
läufer des modernen Elektrolytkondensators erfunden wurde.
Damit konnte man zum ersten Mal die von der Elektrisierma-
schine gelieferte elektrische Energie sammeln und für einige Zeit
speichern. Den Durchbruch brachte jedoch, pünktlich zur näch-
sten Jahrhundertwende, eine Erfindung des italienischen Hoch-
schullehrers Alessandro Volta. Er hatte schon im Jahr 1780 die
nach ihm benannte “Voltaische Säule” konstruiert, ein Stapel
aus Kupfer- und Zinkplatten, zwischen denen feuchte Filzschei-
ben eingefügt waren. Die Voltaische Säule konnte bereits, wenn
auch in recht bescheidenem Maß, einen Strom während einer län-
geren Zeit liefern. Die wichtigste Erfindung gelang Volta jedoch
im Jahr 1800, als er die erste elektrochemische Zelle baute. Sie
bestand aus einem gläsernen Becher, gefüllt mit verdünnter
Schwefelsäure, in die voneinander getrennt eine kupferne Platte
und eine Platte aus Zink eintauchte. Die elektrochemischen Vor-
gänge hatten eine Potentialdifferenz zwischen den beiden Platten
zur Folge, die ungefähr ein Volt betrug. Durch Hintereinander-
schalten von mehreren derartigen Zellen konnte Volta unter-
schiedliche Spannungen erzeugen, durch Parallelschalten wurden
die entnehmbaren Ströme vervielfacht. Volta
nannte eine solche aus mehreren Zellen beste-
hende Anordnung “Batterie”.
Die Volta’sche Batterie war die Stromquelle, auf
die die Wissenschaft schon lange gewartet hatte,
denn nun waren endlich ausreichend reproduzier-
bare Spannungen und genügend hohe Ströme ver-
fügbar. Deshalb dauerte es nicht mehr lange, bis
wichtige weitere Entdeckungen und Erfindungen
folgten. Schon zwei Jahre später, im Jahr 1802,
versetzte der englische Physiker Humphrey Davy
die Welt mit dem ersten elektrisch erzeugten Licht
in Erstaunen. Er schickte einen so hohen Strom durch einen Pla-
tindraht, daß der Draht deutlich sichtbar glühte und die nähere
Umgebung kurzzeitig in schwaches Licht tauchte. Eine brauchbare
Lichtquelle war der Platindraht noch nicht, denn
die Lichtausbeute war äußerst gering, und außer-
dem brannte der Platindraht nach kurzer Zeit
durch, so daß das Licht schnell wieder erlosch.
Davy gab sich jedoch mit diesem ersten Erfolg
nicht zufrieden. Er setzte seine Experimente fort,
so daß er der Öffentlichkeit im Jahr 1813 die erste
elektrische Bogenlampe vorstellen konnte. Ein hel-
ler Lichtbogen sprang zwischen zwei Holzkohle-
stiften über, die dafür nötige Energie lieferten nicht
weniger als 2000 Volta-Zellen. Auch die elektri-
sche Bogenlampe hatte noch zahlreiche Mängel
und Unzulänglichkeiten, sie war jedoch ein deut-
lich sichtbares Zeichen dafür, daß der Siegeszug
der elektrischen Beleuchtung nicht mehr aufzu-
halten war.
995016gd
R
ÜCK
-K
OPPLUNG
Volta-Zelle
Alessandro Volta (1745...1827)