Knobloch Multiface-74 reaktivieren

Hier können Sie ihre eigenen Projekte vorstellen
Antworten
Heinrichs
Beiträge: 185
Registriert: Do 21. Okt 2010, 18:31

Knobloch Multiface-74 reaktivieren

Beitrag von Heinrichs » So 18. Sep 2016, 13:45

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.

forum_multiface_Abb_1_klein.jpg
Multiface-74 DA
forum_multiface_Abb_1_klein.jpg (27.7 KiB) 22605 mal betrachtet

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.

pc_attiny_multiface.jpg
Vom PC über den Attiny zum Multiface
pc_attiny_multiface.jpg (27.35 KiB) 22605 mal betrachtet

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.

lpt_register_klein.jpg
lpt_register_klein.jpg (28.96 KiB) 22564 mal betrachtet

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).

muliface_tester.jpg
Delphi-Programm: Multiface-Tester
muliface_tester.jpg (16.27 KiB) 22604 mal betrachtet

.
Dateianhänge
com_multiface.zip
(540.39 KiB) 2371-mal heruntergeladen

Antworten