Der Inter-IC-Bus, kurz I
2
C-Bus, ist ein von
Philips entwickeltes Interface, über das
ICs miteinander kommunizieren kön-
nen. Viele moderne Geräte wie Tuner,
Fernsehgeräte oder Videorekorder nut-
zen dieses Interface. Auch Mitglieder
der großen Mikrocontroller-Familien
unterstützen das Interface, dessen Pro-
grammierung nicht allzu schwierig ist.
Wird allerdings das I
2
C-Interface
genutzt, um Hardware mit einem PC zu
steuern, gestaltet sich die Programmie-
rung ein wenig komplizierter. Schon
häufig haben wir in Elektor beschrie-
ben, wie mit einer besonderen Inter-
face-Karte Hardware angesteuert wer-
den kann. Die Software beschränkte
sich dabei auf einfache Device-Treiber
auf DOS-Ebene. Dies scheint in einer
Zeit, in der fast jeder
Computer Windows
gebraucht, ein wenig
antiquiert.
Es geht auch
anders
Viele Programmierer
nutzen zur Zeit Visual
BASIC, eine grafische
Entwicklungsumge-
bung zur Program-
mierung in BASIC
unter Windows. Die
w e s e n t l i c h s t e
Beschränkung von
Visual BASIC ist, daß
die Speicherplätze
nicht direkt ange-
sprochen werden
können. Die Program-
mierung von Registern in speziellen ICs
ist deshalb ausgeschlossen. Glückli-
cherweise gibt es eine Möglichkeit, das
Problem zwar nicht zu lösen, aber
geschickt zu umschiffen. Dazu nutzt
man eine besondere DLL.
Die DLLs, die wir hier vorstellen, erfüllen
eine Anzahl bestimmter Funktionen wie
Startkondition generieren
Stoppkondition generieren
Ein Byte senden
Ein Byte empfangen
Es gibt zwei Varianten der DLL. Die 16-
bit-Version IIC.DLL ist für Visual BASIC 3
unter Windows 3.1x, die 32-bit-Variante
IIC_32.dll für Visual BASIC 4 und höher
unter Windows 95/98 geeignet. Diese
DLLs müssen in den Windows-System-
ordner respektive Windows/System32
kopiert werden. Wer unter Windows NT
arbeitet, könnte die DLLs auch gebrau-
chen, stößt allerdings auf das Problem,
daß NT dem Anwender keinen Raum
gibt, um direkt zu Hardwareadressen zu
schreiben. Doch auch dafür gibt es in
Form des Programms TotalIO, das über
das Internet verbreitet wird, eine
Lösung. Interessierte finden es unter
www.ise.ufl.edu/esi4161/files/dir/ect_io/
Installiert man diesen Treiber, läßt sich
die I/O-Hardware problemlos über die
Software steuern.
Konzept Komplett
Die DLLs unterstützen von Haus aus den
PCF8591. Dieses IC umfaßt einen A/D-
und einen D/A-Wandler und wird in vie-
len Applikationen eingesetzt. Im Bei-
spielprogramm IIC.BAS (das zusammen
mit den Treibern auf der Diskette zu fin-
den ist) wird gezeigt, wie über das Inter-
face dieses Projekts mit Hilfe von Visual
BASIC sowohl der PCF8591 (ADC und
DAC) als auch der PCF8582 (EEPROM)
gesteuert werden kann. Diese Beispiele
zeigen, wie leicht der Gebrauch des
I
2
C-Interfaces ist. Der gewählte Ansatz
besitzt nur eine Beschränkung: Es kann
nur ein Master, nämlich der PC, im
System eingesetzt werden.
Ein wenig Hardware
Ausgangspunkt für das DLL-Modul ist ein
spezielles I
2
C-Interface, das an der
Druckerschnittstelle angeschlossen wird.
In Bild 1 ist die kleine Schaltung zu
sehen. An den Centronics-Port des PCs
werden fünf Puffer/Inverter eines 74LS05
X-10 - 3/99 Elektor
EXTRA
———————————————————— PC-P
LUS
Viele computerisierte Elektroniker nutzen den PC, um
Schaltungen über ein I
2
C-Interface zu steuern. Mit
einer kleinen Interface-Platine und speziellen Visual-
BASIC-DLLs wird dies besonders einfach: Sämtliche
I
2
C-Hardware läßt sich aus Visual BASIC unter
Windows steuern.
Entwurf von R. van Lier
I
2
C-Interface für
Druckerschnittstelle
Einfach in VisualBasic zu programmieren
angeschlossen. Das I
2
C-Interface nutzt
die Eingänge ERROR und BUSY sowie
die Ausgänge PAPER EMPTY und AUTO
FEED des Centronics-Ports. Diese vier
Anschlüsse sind notwendig, um die bei-
den Steuersignale SCL und SDA für den
I
2
C-Bus zu erzeugen. Beide Signale sind
auf einem kombinierten Ein/Ausgang zu
finden, da die Busleitungen bidirektio-
nal sind. An Verbinder K2 liegen zusätz-
lich zu den Busleitungen die Versor-
gungsspannung von +5 V sowie
Masse. Eine Applikation kann über ein
Kabel mit einem kompakten Mini-DIN-
Stecker einfach am Interface ange-
schlossen werden.
Aufmerksame Leser dürften die Schal-
tung wiedererkennen, wir haben sie mit
marginalen Änderungen schon im
Halbleiterheft 1993 publiziert. Die Pull-
up-Widerstände sind notwendig, da
Puffer und I
2
C-Treiber eine Open-
collector-Struktur aufweisen. Sind R5
und R6 die einzigen Pull-up-Wider-
stände auf der I
2
C-Seite, sollte man
ihren Wert auf 3,3 k
Ω verringern.
Das Platinenlayout samt Bestückungs-
plan ist in Bild 2 zu sehen. Die Platine ist
nicht beim Verlag erhältlich, muß also
selbst geätzt werden. Das sollte (genau
wie die Bestückung) kein Problem sein.
Notfalls läßt sich die Schaltung auch
auf einem Stückchen Lochraster auf-
bauen.
(990034)rg
DLL-Funktionen
InitPCF8591
: PCF8591 initialisieren
ReadPCF8591
: Byte lesen von ADC
ReadbufPCF8591 : n Byte lesen von ADC
WritePCF8591
: n Byte schreiben zum
DAC
StartCon
: Startbedingung
generieren
RepStartCon
: wiederholende
Startbedingung
generieren
Transmit
: ein Byte senden
Receive
: ein Byte empfangen
TestFree
: Test: Bus frei?
TestConnected
: Test: Interface und
Netzteil
angeschlossen?
Fehlermeldungen
0
Error 0000
: No errors
1
Error 0001
: The IIC bus is not free
2
Error 0002
: No acknowledge
received
3
Error 0003
: Could not generate a
stop condition
4
Error 0004
: The IIC interface has
no power supply
5
Error 0005
: The IIC interface has
not been connected
6
Error 0006
: Some undefined error
occurred
PC-P
LUS
———————————————————
Elektor
EXTRA
X-11 - 3/99
K1
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
35
36
1
2
3
4
5
6
7
8
9
K2
2
5
4
3
1
6
R1
10k
R2
10k
R3
10k
R4
10k
R5
10k
R6
10k
1
2
1
IC1a
9
8
1
IC1d
5
6
1
IC1c
11
10
1
IC1e
3
4
1
IC1b
ERROR
C1
10
µ
63V
13
14
1
IC1f
P. EMPTY
AUTO FEED
SELECT
BUSY
IC1
14
7
IC1 = 74LS05
SCL
SDA
SDA
SCL
5V
990034 - 11
Bild 1. Die Schaltung des I
2
C-Interfaces, das am Centronics-Port angeschlossen wird.
(C) ELEKTOR
990034-1
C1
IC1
K1
K2
R1
R2
R3
R4
R5
R6
SDA
SCL
+
T
990034-1
(C) ELEKTOR
990034-1
Bild 2. Die Platine des Interfaces ist kaum größer als die Centronics-Buchse.
Stückliste
Widerstände:
R1...R6 = 10 k
Kondensator:
C1 = 10
µ/63 V
Halbleiter:
IC1 = 74LS05
Außerdem:
K1 = Centronics-Buchse für
Platinenmontage, gewinkelt
K2 = 6polige Mini-DIN-Buchse für
Platinenmontage, gewinkelt
PC1...PC4 = Lötnägel
Software (Disk) EPS 996004-1 (DLLs und
Beispiel)