Um das serielle Interface als auch die parallele Version anzusteuern, stehen
diverse Softwareschnittstellen zur Verfügung.
Im Einzelnen sind dies:
I2C_SER.DLL
I2C_PAR.DLL Win95/98
i2c_ser.pm
i2c_lpt.pm Perl Module für Linux
Sowie die einzelnen Header Files für C unter Linux.
Da diese Funktionen "C"-Funktionen "outp" und
"inp" basieren, die direkt auf die Hardware zugreifen,
funktionieren die DLL's nur unter den Betriebssystemen Windows 95
& Windows 98. Unter Windows NT/ME/2000 geht dies nicht, da
hier der direkte Zugriff auf die Hardware mit diesen Funktionen
verweigert wird.
Unter Linux ist der Zugriff über die Funktion "ioperm"
möglich, was aber root Rechte voraussetzt.
Eine genaue Beschreibung der Funktionen, Windows / Linux, sowie
deren Einsatz und einige Beispiele, findet sich in der Datei i2c_funcs.html
2.1 Installation
Windows (95/98)
Legen Sie als erstes einen neuen Ordner I2C an. Kopieren Sie nun
die Datei i2c-01.zip in diesen Ordner und enpacken sie dort. Die
DLL's befinden sich im Verzeichnis \LIB. Um sie einsetzen zu können,
ist es erforderlich das die DLL's auch zur Laufzeit gefunden
werden. Kopieren Sie daher die DLL's in das Windows System
Verzeichnis.
Die DLL's wurden mit Microsoft Visual C 4.2 erstellt. Die
entsprechenden Workspaces sind unter \LIB\i2c_ser und \LIB\i2c_par
zu finden. Die Quellen dazu unter \i2c_ser , \i2c_par, \src ,
\lcd und \pcf8574.
Windows NT / 2000 (Ohne Gewähr ! :))
Ich hatte hier von jemanden einen Link
(http://www.zealsoftstudio.com/ntport/)
bekommen, wie auch unter NT und W2K der Zugiff erfolgen kann, daher habe ich die Lib etwas umgestellt. Da ich hier aber
weder NT noch W2K habe, konnte ich es selber nicht testen. Es soll aber funktioniert haben.
Wer es selber probieren möchte, lade sich i2c-01_nt.zip herunter.
Unter dem oben genannten Link muss man sich aber vorher die Software holen und installieren.
Linux
Legen Sie als erstes einen neuen Ordner /opt/i2c an. Kopieren Sie nun die Datei
i2c-0.2.tar.gz in diesen Ordner und enpacken sie dort
folgendermassen:
gzip -d i2c-0.1.tar.gz
tar -xvf i2c-0.1.tar
Anschliessend noch INSTALL eingeben um die
Sourcen zu kompilieren und die Perl-Module zu erstellen. Die man-Pages
zu den Perl-Modulen können mit "man i2c_ser" bzw.
"man i2c_par" angezeigt werden. Sollte ein anderes
Verzeichnis als /opt/i2c verwendet werden, ist es erforderlich
den Eintrag "HDIR= /opt/i2c/" im Makefile unter /src
anzupassen. Ein funktionsfähiges Perl muss allerdings auf dem
Rechner installiert sein !
3.0 Anwendungsbeispiel
Als kleines Anwendungsbeispiel soll hier kurz die Ansteuerung eines LC Displays dargestellt werden.
Diese Schaltung entspricht der ursprünglich im Elektor Buch "I2C Bus angewandt"
vorgestellten Idee, allerdings mit einer geringfügig geänderten Beschaltung.
C
#include "i2c_lpt.h" // i2c Funktionen für par. Schnittstelle
int LPT = 0;
int test;
set_port_delay(5); // Portdelay 1-25 25 ..langsam
iport = init_iic(LPT); // Init ii2c , Interface automatisch suchen an LPTx
if (iport>0)
{
printf(" gefunden an Port 0x%03xh! \n",iport);
} else {
printf("Interface nicht gefunden.\n");
exit (2);
}
test=lcd_init();
lcd_backlight(0); // Ausschalten (gibt 1 zurück wenn, OK)
lcd_wchar('H'); // Einzelnes Zeichen schreiben
lcd_wchar('a');
lcd_wchar('l');
lcd_wchar('l');
lcd_wchar('o');
lcd_instr(LCD_CLR); // Display Anzeige löschen
lcd_write_str("Hallo DISPLAY!!"); // String schreiben
Perl (Ansteuerung seriell Schnittstelle)
use i2c_ser;
my $iport = i2c_ser::init_iic(0); # Interface automatisch suchen
print "Suche Interface...\n";
if ($iport > 0) {
print "I2C-Interface gefunden an $iport; }
else { print "I2C-Interface nicht gefunden. \n";
exit 1;
}
print "LCD : Display Initialisieren..\n";
i2c_ser::lcd_init();
$licht = i2c_ser::lcd_backlight(1);
print "LCD : Licht an \n";
i2c_ser::lcd_instr(0x0c);
print "LCD : Cursor Off \n";
$lcdadr=i2c_ser::lcd_get_adress();
print "LCD : Der Cursor ist jetzt an Adresse $lcdadr \n";
i2c_ser::lcd_wchar(ord(H));
i2c_ser::lcd_wchar(ord(a));
i2c_ser::lcd_wchar(ord(l));
i2c_ser::lcd_wchar(ord(l));
i2c_ser::lcd_wchar(ord(o));
$lcdadr=i2c_ser::lcd_get_adress();
print "LCD : Der Cursor ist jetzt an Adresse $lcdadr \n";
i2c_ser::lcd_instr(0x01);
i2c_ser::lcd_write_str("Hallo Display");
print "LCD : Ausgabe mit lcd_write_str \n";
Visual Basic
Private Sub Init_Click()
Dim Port As Integer
set_port_delay (5)
Port = init_iic(0)
Call lcd_init
lcd_backlight (1)
lcd_write_str ("Hallo LCD!")
txt = Space(25)
End Sub
Verwendete Literatur:
- I2C Bus angewandt, Elektor Verlag, ISBN 3-928051-71-7
- Paralell Port Complete , Jan Axelson , Lakeview Research, ISBN 0-9650819-1-5
- div. Linux FAQ's
- CMOS , Datenlexikon
- TTL, Datenlexikon
© Ingo Gerlach, DH1AAD, 15.02.2002
E-Mail bitte an:Ingo Gerlach