Nicht immer muß es ein hochgenauer
und superschneller A/D-
Wandler sein, wenn analoge Meß-
größen von digitalen Systemen weiter-
verarbeitet werden sollen. Für viele
Anwendungen reicht eine mittlere
Genauigkeit (z. B. 256 Schritte im
Bereich 0...5 V) bei mäßiger Geschwin-
digkeit vollkommen aus. Weshalb also
kompliziert, wenn es auch einfacher
geht...? Unser hier vorgestellter
A/D-Wandler beweist, daß zufrieden-
stellende Ergebnisse auch ohne teure
Spezialbauteile machbar sind. Im ein-
zelnen: die Auflösung des Eingangssig-
nals beträgt 20 mV, die Genauigkeit des
X-2 - 6/98 Elektor
EXTRA
———————————————————— PC-P
LUS
Hier wird gezeigt, wie man analoge Eingangssignale
mit verhältnismäßig wenig Aufwand für die Weiterver-
arbeitung im PC aufbereiten kann. An den Computer
werden keine besonderen Anforderungen gestellt, so
daß auch Oldtimer bis hinunter zum XT zur Meßaus-
wertung dienen können.
Entwurf: J. F. Verrij
A/D-Wandler
Für die serielle PC-Schnittstelle
Technische Spezifikationen
Meßbereich:
0-5 V
Auflösung:
8 bit
Schrittgröße:
20 mV
Meßfehler:
± 1bit
Wandlungszeit:
150 µs
Betriebsspannung:
5 V
Aufgenommener Strom:
5 mA
Schnittstelle:
RS232
Software:
z.B. QBASIC
Meßergebnisses ist 1 Bit bzw. 20 mV, und
steuern läßt sich die Schaltung mit Hilfe
eines kurzen, leicht überschaubaren
Programms, das zum Beispiel in Basic
geschrieben sein kann. Ein weiteres Plus
ist der geringe Strombedarf (ca. 5 mA
bei 5 V), der eine eigene Stromversor-
gung vollständig überflüssig macht. Die
gesamte Schaltung wird direkt aus der
seriellen Computer-Schnittstelle versorgt!
Einfach gewandelt
Die A/D-Wandler-Schaltung arbeitet mit
dem Baustein ADC 0804, einem recht
preisgünstigen und seit vielen Jahren
bewährten “Zugpferd” von National
Semiconductor. Dazu kommen noch
einige Buffer aus der
4000er-CMOS-Familie, ein integrierter
Spannungsregler sowie einige passive
Bauelemente. Die Umsetzung des par-
allelen 8-Bit-Wandler-Ausgangssignals
in ein 2-mal-4-Bit-Format wurde durch
Hardware realisiert, wobei die Hands-
hake-Leitungen der seriellen Schnitt-
stelle Hilfestellung leisten. Wegen der
begrenzten Anzahl der Schnittstellen-
Leitungen muß nämlich das Wand-
ler-Ausgangssignal in zwei Schritten in
den Computer eingelesen werden;
hierzu dienen die beiden CMOS-ICs.
Schaltung
In der Schaltung (Bild 1) ist links der Ein-
gang des analogen Meßsignals und
rechts der RS232-Konnektor für die Ver-
bindung mit der seriellen PC-Schnitt-
stelle zu sehen. Die Betriebsspannung
der gesamten Schaltung (5 V) wird mit
Hilfe der drei Dioden D1...D3, dem
Glättungskondensator C8 und dem
Low-Drop-Spannungsregler IC4 aus
PC-P
LUS
————————————————————
Elektor
EXTRA
X-3 - 6/98
K1
1
2
3
4
5
6
7
8
9
R1
10k
C1
150p
ADC0804
IC1
CLKR
AGND
INTR
VREF
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
CLK
VI+
VI–
20
10
18
17
16
15
14
13
12
11
19
CS
RD
WR
4
6
8
1
2
3
5
9
7
C2
100n
D6
1N4148
JP1
C3
100n
R2
4k7
20k
P1
C5
100n
R9
47K
R3
47K
R8
47K
D5
1N4148
D4
IC3a
3
2
1
IC3d
9
10
1
IC3e
11
12
1
R5
47k
R6
47k
R4
47k
R7
47k
T1
BC547B
IC2
4019
A1
B1
A2
B2
A3
B3
15
A4
B4
SA
14
SB
10
D1
11
D2
12
D3
13
D4
6
7
4
5
2
3
1
9
D1
D3
1N4148
D2
C8
100n
LP2950-CZ5.0
IC4
C4
100
µ
25V
IC2
16
8
1
8
IC3
C6
100n
C7
100n
IC3b
5
4
1
IC3c
7
6
1
IC3f
14
15
1
5V
5V
5V
5V
5V
5V
2x
3x
DCD
DSR
TxD
CTS
DTR
RI
RTS
TxD
DTR
RTS
IC3 = 4050
980055 - 11
Bild 1: Der A/D-Wandler arbeitet ohne eigene Stromversorgung. Die serielle Schnittstelle wird hier als 4-Bit-Parallelport genutzt.
A/D conversion busy
read data 0 - 3
read data 4 - 7
980055 - 12
WR
INTR
RD
S
A
= DTR
S
B
= DTR
Bild 2: Das Diagramm zeigt den zeitlichen Ablauf der verschiedenen Signale.
den RS232-Signalen DTR, RTS und TxD
gewonnen. Ein einfacher Spannungtei-
ler (Trimmpoti P1) leitet aus der Betriebs-
spannung die Referenzspannung für
den Wandler-Baustein IC1 ab. Der aus
R2 und C3 gebildete Tiefpaß dient
dabei zur Unterdrückung von hochfre-
quenten Störspitzen beim Wechsel der
RS232-Signale. Aus dem gleichen
Grund wurden auch die 5-V-Anschlüsse
der drei ICs sorgfältig voneinander ent-
koppelt (C4...C7). Natürlich kann diese
unkonventionelle Art der Stromversor-
gung nur mit Erfolg arbeiten, wenn
ständig mindestens eine der drei
RS232-Leitungen DTR, RTS und TxD auf
+12 V liegt. Das Steuerprogramm, das
auch die digitalen Meßdaten auf der
PC-Seite in Empfang nimmt, muß dies
in jedem Fall sicherstellen.
Frequenzbestimmend für den Taktoszil-
lator, der im A/D-
Wandlerbaustein (IC1) integriert ist, sind
die externen Komponenten R1 und C1.
Mit der gewählten Dimensionierung
beträgt die Taktfrequenz ca. 400 kHz,
die Wandeldauer liegt bei 150
µs. Das
analoge Meßsignal gelangt von den
mit “+” und “-” bezeichneten Pins zu
den Eingängen VI+ bzw. VI- von IC1.
Der Eingang ist asymmetrisch geschal-
tet (“-” liegt an Masse); bei Bedarf erhält
man durch einfaches Entfernen von
Brücke JP1 einen “schwebenden” (mas-
sefreien) Eingang. Der zulässige Ein-
gangsspannungsbereich von IC1 liegt
zwischen -0,3 V und der Betriebsspan-
nung zuzüglich 0,3 V. Diode D6 schützt
den Eingang vor Beschädigung infolge
Verpolung der Eingangsspannung, und
Kondensator C2 unterdrückt eventuelle
hochfrequente Störüberlagerungen.
Der restliche Teil der Schaltung wird
benötigt, um das digitale, aus acht Bit
bestehende Meßergebnis in den PC
einzulesen. Wie schon erwähnt,
geschieht dies in zwei Schritten: Die Bits
Data0...Data3 bilden das erste Nibble,
die Bits Data4...Data7 das zweite. Die
beiden Nibbles gelangen nacheinan-
der über die RS232-Leitungen CTS, DSR,
RI und DCD in den Computer; die seri-
elle Schnittstelle wird damit zum 4-Bit-
Pseudo-Parallelport. In umgekehrter
Richtung steuern die RS232-Signale die
Eingänge WR und RD des Wandler-Bau-
steins IC1 sowie die Steuereingänge SA
und SB von Demultiplexer IC2. Transistor
T1 arbeitet als Inverter, so daß abhän-
gig vom DTR-
Signal entweder SA oder SB aktiv ist. Für
Schreibsignal WR und Lesesignal RD
sind die RS232-Leitungen RTS bzw. TxD
zuständig. Die Dioden D4 und D5 bil-
den zusammen mit Widerstand R3 ein
ODER-Gatter. Die Daten-Ausgangssig-
nale von IC1 sind während des Wan-
delintervalls nicht definiert. Da Eingang
A1 des Demultiplexers IC2 von Wider-
stand R9 auf +5 V gehalten wird, liefert
auch Ausgang D1 hohe Spannung.
Dabei muß natürlich das Selektionssig-
nal SA aktiv sein. Das Signal auf der
DCD-Leitung ist folglich identisch mit
dem Signal, das der INTR-Ausgang des
A/D-Wandlers IC1 liefert.
Der Wandlerzyklus startet, sobald das
WR-Signal auf hohe Spannung gesetzt
wird. Nach ca. 150
µs ist der Wandel-
prozeß beendet; der Computer erkennt
diesen Zustand an dem auf niedrige
Spannung wechselnden DCD-Signal.
Ein Lesebefehl (niedrige Spannung an
Eingang RD) veranlaßt den A/D-Wand-
ler, das Meßergebnis an seine Aus-
gänge DB0...DB7 zu legen. Dabei kehrt
das vom INTR-Ausgang gelieferte Sig-
nal automatisch auf hohe Spannung
zurück. Zur Verdeutlichung der relativ
komplexen Zusammenhänge soll das
Zeitdiagramm in Bild 2 dienen.
Bei genauer Schaltungsbetrachtung
fällt auf, daß die Eingänge der Buffer
IC3D und IC3E unmittelbar von den
RS232-Signalen (±12 V) gesteuert wer-
den. Auf den ersten Blick scheint das
gefährlich zu sein, denn negative Ein-
gangsspannungen sind bei CMOS-ICs
der 4000er-Familie verboten, und auch
positive Eingangsspannungen, die die
Betriebsspannung (hier 5 V) wesentlich
übersteigen, sind nicht erlaubt. Ein
Anlaß zur Sorge besteht trotzdem nicht,
weil die integrierten Schutzdioden
zusammen mit den externen
X-4 - 6/98 Elektor
EXTRA
———————————————————— PC-P
LUS
980055-1
(C) ELEKTOR
C1
C2
C3
C4
C5
C6
C7
C8
D1
D2
D3
D4
D5
D6
H1
H2
H3
H4
IC1
IC2
IC3
IC4
JP1
K1
P1
R1
R2
R3
R4
R5
R6
R7
R8
R9
T1
980055-1
T
-
+
980055-1
(C) ELEKTOR
Bild 3: Platinenlayout und Bestückungsplan für die Schaltung in Bild 1.
Stückliste
Widerstände:
R1 = 10 k
R2 = 4k7
R3...R9 = 47 k
P1 = 20 k Spindeltrimmer
Kondensatoren:
C1 = 150 p
C2,C3,C5...C8 = 100 n
C4 = 100
µ/25 V stehend
Halbleiter:
D1...D6 = 1N4148
T1 = BC547
IC1 = 1ADC0804LJN
IC2 = 4019
IC3 = 4050
IC4 = LP2950-CZ5.0
Außerdem:
JP1 = 1
× Jumper
K1 = 1
× 9-polige D- Buchse für Plati-
nenmontage
47-k-Widerständen (R5 bzw. R6) die
“überschüssigen” Spannungen
unschädlich machen. Unter normalen
Betriebsbedingungen dürfen über die
Schutzdioden Ströme bis ca. 10 mA
fließen; hier liegen diese Ströme weit
unter dem genannten Wert.
Platine
Das Platinenlayout für die Schaltung
aus Bild 1 ist in Bild 3 wiedergegeben.
Bei der Bestückung beginnt man am
zweckmäßigsten mit dem Einlöten der
vier Drahtbrücken. Die ICs können zwar
in Fassungen gesteckt werden, doch
der erfahrene Hobby-Elektroniker wird
die direkte Lötmontage wegen des
geringeren Platzbedarfs bevorzugen.
Die Komponenten nehmen keinen
Schaden, wenn die Lötdauer im übli-
chen Rahmen bleibt. Selbstverständ-
lich müssen die ICs, die Dioden und
der Elko (C4) in der richtigen Lage auf
die Platine gesetzt und eingelötet wer-
den, wenn die Schaltung später funk-
tionieren soll.
Für den analogen Eingang sind auf
der Platine drei Lötpins vorgesehen.
Wenn der Eingang asymmetrisch
betrieben wird, was zu empfehlen ist,
kann der mit “–” bezeichnete Pin ent-
fallen. Brücke JP1 muß dann natürlich
vorhanden sein.
Die Verbindung zum Computer stellt
eine 9-polige SUB-D-Buchsenleiste her.
Da beim Einstecken und Herausziehen
des zugehörigen Kabelsteckers hohe
mechanische Kräfte auftreten können,
muß die SUB-D-Buchsenleiste unbedingt
mit der Platine verschraubt werden. Das
muß geschehen, bevor die Pins der
SUB-D-Buchsenleiste mit den Kupferin-
seln auf der Platine verlötet werden.
Anderenfalls besteht die Gefahr, daß
mechanische Spannungen entstehen,
die zum Abreißen der Kupferbahnen
führen.
Software
Ohne ein geeignetes Programm, das
den A/D-Wandler steuert und die
Meßwerte in den Computer holt, wäre
alle bisherige Mühe vergeblich. Glück-
licherweise genügen wenige Instruktio-
nen, zum Beispiel in der Programmier-
sprache Basic, um den A/D-Wandler
zum Leben zu erwecken. Die Routinen
können leicht in eigene Programme
eingefügt werden, so daß die Anwen-
dungsmöglichkeiten praktisch unbe-
grenzt sind.
In Bild 4 ist das Listing eines Demo-Pro-
gramms zu finden, das im Basic-Dialekt
QBASIC geschrieben wurde. Die im
Listing enthaltenen Kommentare und
die Informationen zu den Registern der
seriellen PC-Schnittstelle machen das
Programm leicht durchschaubar. Stan-
dardmäßig ist in jedem PC ein Control-
ler vom Typ 8250 (oder ein kompatibler
Typ) pro serielle Schnittstelle vorhanden.
Generelle Informationen zu diesem
Controller enthält eine Datenkarte an
anderer Stelle in diesem Heft.
Einstellung
Die Eichung des A/D-Wandlers ist völlig
unkompliziert: Man legt eine geeignete
Spannungsquelle an den Eingang, zum
Beispiel eine Knopfzelle, deren Span-
nung zuvor mit einem genauen Digital-
multimeter gemessen wurde. Das Pro-
gramm wird gestartet, und der ausge-
gebene Spannungswert wird mit
Trimmpoti P1 so eingestellt, daß er mit
der tatsächlichen Eingangsspannung
möglichst exakt (±20 mV) überein-
stimmt.
980055
PC-P
LUS
————————————————————
Elektor
EXTRA
X-5 - 6/98
COMadres = &H3F8
LOOP1:
‘First switch on power supply by making DTR and TxD high
‘read (TxD) not active, write (RTS) active
OUT COMadres + 4, INP(COMadres + 4) OR 1 ‘DTR=SA=H, SB=L
OUT COMadres + 4, INP(COMadres + 4) AND &HFD ‘RTS=WRnot=L
OUT COMadres + 3, INP(COMadres + 3) OR 64 ‘TxD=RDnot=H
‘Wait 50 ms until circuit is stable before starting a conversion
Start = TIMER
DO
TIME = TIMER
LOOP UNTIL TIME >= Start + .05
‘Start conversion by making Write not active
OUT COMadres + 4, INP(COMadres + 4) OR 2 ‘RTS=WRnot=H
‘Wait for interrupt (DCD), signalling end of conversion
DO
intr = INP(COMadres + 6) AND 128
LOOP UNTIL intr = 0 ‘wait until DCD=L
‘Reset interrupt by making read active
OUT COMadres + 3, INP(COMadres + 3) AND 0 ‘TxD=RDnot=L
‘Now the result can be read in 2 nibbles
READDATAL:
Datalow = (INP(COMadres + 6)) AND 240 ‘read low nibble
‘Switch multiplexer input
OUT COMadres + 4, INP(COMadres + 4) AND &HFE ‘DTR=SA=L, SB=H
READDATAH:
Datahigh = (INP(COMadres + 6)) AND 240 ‘read high nibble
‘Optimize power supply and return circuit to standby
‘by making DTR and TxD high
OUT COMadres + 3, INP(COMadres + 3) OR 64 ‘TxD=RDnot=H
OUT COMadres + 4, INP(COMadres + 4) OR 1 ‘DTR=SA=H, SB=L
‘Now the two nibbles are combined into the original byte
DATAHL = Datahigh + Datalow / 16
‘Convert the result to the measured input voltage
Range = 4.998
Voltage = Range * DATAHL / 255
‘Rounding the result to 3 digits
Voltage = INT(Voltage * 1000 + .5) / 1000
‘Display the result
PRINT counter; “Voltage=”; Voltage; “Volt”
Counter = Counter + 1
GOTO LOOP1:
END
Bild 4: Aus diesem in QBASIC geschriebenen Programmbeispiel wird deutlich, wie der
A/D-Wandler gesteuert werden muß.