Vor vielen Jahren hatte ich bei der Firma Knobloch ein Interface mit der Bezeichnung Multiface-74 DA erworben (Abb. 1). Es besitzt 8 digitale Ausgänge (rechts), 8 digitale Eingänge (links) und jeweils 2 analoge Ein- bzw. Ausgänge (unten in der Mitte). An den PC wurde es über die Centronics-Schnittstelle angeschlossen.
Leider sind heutige Computer nur noch selten mit einer solchen parallelen Schnittstelle ausgestattet. Man kann sie zwar nachrüsten, aber das hilft auch kaum: die heutigen Windows-Systeme lassen einen direkten Zugriff auf die LPT-Ports nicht mehr zu. Spezielle Treiber für neuere Windows-Versionen gibt es nicht; die Firma Knobloch hat den Support für diese Interfaces schon vor ca. 10 Jahren eingestellt.
Um dieses Interface dennoch von meinem PC (Windows 10) über Delphi-Programme ansteuern zu können, habe ich mir folgenden Trick ausgedacht: Das Delphi-Programm benutzt die Prozedur outport und die Funktion inport. Diese funktionieren ganz ähnlich den Port-Befehlen, wie sie im Handbuch des Knobloch-Interfaces beschrieben werden. Allerdings greifen sie nicht auf eine Druckerschnittstelle zu; vielmehr setzen wir als Mittler unsere Attiny-Platine ein. Auf diese Weise kann das Multiface über den USB-Port des Rechners betrieben werden.
Dazu wurde auf die Attiny-Platine eine Zusatzplatine gesteckt; diese erlaubt es, die Anschlüsse der Ports A, B und D durch Patch-Kabel mit den Leitungen des Centronics-Kabels zu verbinden. In unserem Fall haben wir uns für folgende Zuordnung entschieden:
Centronics - Attiny
Datenregister
DA0 - B0
DA1 - B1
DA2 - B2
... ...
DA7 - B7
Statusregister
Error - D3
PE - D4
ACK - D5
Busy - D6
Steuerregister
Strobe - A0
AutoFeed - A1
In das Datenregister und in das Steuerregister können Daten geschrieben und aus dem Statusregister Daten gelesen werden. Dies geschieht mit den Befehlen
outport(0, b) schreibt den Wert b in das Datenregister.
outport(2, b) schreibt den Wert b in das Steuerregister.
inport() liest den Inhalt des Statusregisters.
Die Kommunikation zwischen dem Delphi-Programm und dem Attiny erfolgt über ein Zwei-Byte-Protokoll: Die Prozedur outport sendet die beiden oben angegebenen Parameter. Die inport-Funktion sendet als erstes Byte die Zahl 1 und als zweites Byte einen beliebigen Dummywert. Als Rückgabewert erhält sie den Inhalt des Statusregisters (mehr dazu s. u.).
Die Belegung der drei Register kann man der Abbildung 3 (nach Kainka: PC-Schnittstellen unter Windows) entnehmen. Die angegebenen Invertierungen beziehen sich auf den PC-Anschluss. Bemerkenswert ist, dass dazu in der Literatur widersprüchliche Angaben zu finden sind.
Bei den angeschlossenen Geräten (Drucker, Interface...) gibt es keine solche Invertierung. Die Ports am Attiny weisen ebenfalls keine Invertierung auf. Deswegen müssen - wenn man die vom Hersteller des Interfaces angegebenen Steuercodes unverändert benutzen möchte - die Strobe- und AutoFeed-Signale invertiert werden. Die vom Interface erhaltenen Status-Codes bleiben hingegen unverändert.
Eine Besonderheit muss noch erwähnt werden: Das Statusregister wird vom Multiface dazu benutzt, um die 8 Digitaleingänge abzufragen. Dies geschieht, indem über die Signalleitungen Error, PE, ACK und Busy erst das höherwertige Halb-Byte und dann das niederwertige Halb-Byte übertragen werden. Die Attiny-Software fasst jeweils die Bits 7, 6, 5 und 3 zu einem Nibble zusammen; das macht die anschließende Verarbeitung im Delphi-Programm leichter.
Um das Knobloch-Interface zu aktivieren, muss nach Angaben des Herstellers als erstes der Steuercode 142 an das Steuerregister gesendet werden (vgl. Handbuch S. 27, Turbo-Pascal-Beispiel). Da dieses jedoch nur 4 Bit besitzt, kann man genauso gut den Code 14 senden. Zum Deaktivieren benutzen wir den Code 12. Weil wir tatsächlich nur die Bits 0 und 1 des Steuerregisters angeschlossen haben, kann man auch die Werte 2 bzw. 0 benutzen.
Um beim Lesen der Digitaleingänge zwischen dem oberen und dem unteren Halb-Byte hin und her zu schalten, benutzt man das Strobe-Signal. Die beiden Werte werden mit der inport-Funktion ausgelesen und müssen dann nur noch zu einem Byte zusammengesetzt werden.
Das Lesen der Analog-Eingänge ist deutlich komplizierter; hier werden letztlich die einzelnen Bits des analogen Spannungswerte Bit für Bit über das Bit 4 von x := inport aus dem Interface getaktet. Einzelheiten kann man dem Quellcode des Delphi-Programms entnehmen (s. Dateianhänge).
.
Knobloch Multiface-74 reaktivieren
Knobloch Multiface-74 reaktivieren
- Dateianhänge
-
- com_multiface.zip
- (540.39 KiB) 2371-mal heruntergeladen