Schnittstelle

Bitte lesen:
Auf dieser Seite stelle ich Möglichkeiten vor, mit der Centronicsschnittstelle (Parallelschnittstelle) des PC´s etwas zu steuern bzw. zu messen. Die Durchführung aller hier vorgestellten Techniken geschieht auf eigene Gefahr. Durch unsachgemäße Beschaltung der Centronicsschnittstelle kann der Computer beschädigt werden. Wenden Sie daher die nachfolgenden Techniken nur an, wenn Sie wissen, was Sie machen. Das Interface sollten Sie nur nachbauen, wenn Sie etwas Erfahrung im Bau elektronischer Schaltungen haben. Alle Schaltungen sollten nur dann mit dem Computer verbunden werden, wenn sie spannungsfrei sind und der Computer ausgeschaltet ist.

Falls Sie Ideen, Anregungen oder Kritik haben, so können Sie mich unter webmaster@patrick-lenger.de erreichen. Aus Sicherheitsgründen werden nur EMails ohne Anhang akzeptiert. Ich würde mich über Feedback sehr freuen.

Ich wünsche Ihnen viel Spaß beim Experimentieren und Nachbauen!

Inhalt:

Centronicsinterface (Hardware: Schaltplan und Erklärung)


Damit Sie überhaupt etwas Steuern oder Messen können, ist eine Schaltung (siehe PDF- Datei unten) vonnöten, die Sie zwischen Ihren Computer (Parallelschnittstelle) und der Elektronik anschließen. Dieses sogenannte "Interface" verschafft Ihnen fünf digitale Eingänge und 8 digitale Ausgänge, die Sie alle gleichzeitig benutzen können. Im Prinzip sind die Ein- bzw. Ausgänge der Parallelschnittstelle direkt beschaltbar, jedoch ist die Computerhardware sehr empfindlich. Das bedeutet, dass schon etwas zu hohe Ströme bzw. Spannungen die Schnittstelle beschädigen könnten. Genau aus diesem Grund sollten Sie das Interface benutzen. Es schützt einerseits die Computerhardware und sorgt andererseits für mehr Power der Ausgänge. Ohne Interface kann man nur ein paar Milliampere (mA) schalten, was einem keine großen Sprünge erlaubt. Doch mit dem Interface, vorausgesetzt Sie verwenden alle Bauteile wie in der Schaltung unten angegeben, können Sie bis zu 3A schalten (an ausreichende Kühlung der BD679 denken!). Die zu steuernde Last muss zwischen dem jeweiligen Kollektor des Transistors und dem Pluspol einer externen Spannungsquelle (max. 60V) angeschlossen werden. Wahlweise können Sie mit den Transistoren des Interfaces Leistungstransistoren wie den "2N 3055" ansteuern, um den Schaltstrom noch weiter zu vergrößern. Wenn Sie induktive Lasten (z.B. ein Relais) schalten, dann dürfen Sie die Freilaufdiode nicht vergessen, damit der Transistor vor der Gegen-EMK geschützt wird!
Auch für die fünf Eingänge bietet das Interface Schutz. Durch einen Widerstand wird einerseits der Strom begrenzt und durch eine Zehnerdiode wird die Spannung auf 5,1V begrenzt (TTL- Signal = 5V). Als Eingangsspannungen sind nur 0V (logische "0") und 5V (logische "1") zulässig, wobei kleine Toleranzen auftreten dürfen. Alle zu messenden Eingänge müssen wirklich angeschlossen sein. 0V bedeutet, dass dieser Eingang mit Masse verbunden ist, und nicht dass er nicht angeschlossen ist!
Die Pinnummerierung des Steckers bezieht sich auf den 25-poligen Sub-D- Stecker. Falls Sie nähere Angaben zur Pinnummerierung haben möchten, so kann ich Ihnen das Hardwarebook ( www.hardwarebook.net ) von Joakim Ögren empfehlen. Dort finden Sie die Anschlussbelegungen vieler Stecker und Verbindungen.
Die unten angegebene Schaltung ist eine PDF- Datei und benötigt den Acrobat Reader von Adobe. Downloaden Sie die Schaltung und drucken Sie sie am besten aus, damit Sie sie beim Löten immer vor Augen haben. Bevor Sie die Schaltung an Ihren Computer anschließen, sollte sie auf korrekten Aufbau überprüft werden. Viel Spaß!

Schaltung: Centronicsinterface.pdf


Softwareansteuerung (Erklärung in Turbo Pascal)


Nachdem Sie die Hardware (das Interface) hergestellt haben, müssen Sie sich um die Software kümmern. Schließlich muss der Computer wissen, was er schalten bzw. messen soll. Die Softwarebeispiele, die ich an dieser Stelle anführe, sind in Turbo Pascal für DOS angegeben. Falls Sie eine andere Programmiersprache verwenden, so dürfte es trotzdem kein Problem sein, die Ein- und Ausgabe des Interfaces zu übertragen, da sich dieser Vorgang bei mehreren Programmiersprachen ähnlich gestaltet. Unter BASIC (qbasic liegt DOS bei) verwendet man z.B. die Befehle OUT (für die Ausgänge) und INP (für die Eingänge). Es ist zu empfehlen, dass Sie die Software unter DOS laufen lassen, da dort einfacher auf die Hardware zugegriffen werden kann. Unter Windows ist es für Anfänger schwieriger, Zugriff auf die Schnittstelle zu haben.
Grundsätzlich wird die Parallelschnittstelle über sogenannte Ports angesteuert. Das bedeutet, dass Sie die Ausgabeinformationen (1 Byte) an eine Portadresse schicken und die Eingabeinformationen (1 Byte) von einer anderen Portadresse lesen. Für die acht Datenbits (die acht Ausgänge) müssen Sie den Port mit der Nummer 888 (dezimal) bzw. $378 (hexadezimal) und für die fünf Eingänge den Port 889 (dezimal) bzw. $379 (hexadezimal) verwenden. Unter Turbo Pascal haben Sie über das Port- Array lesenden und schreibenden Zugriff auf die Schnittstelle. Als Index müssen Sie immer die Portnummer angeben: entweder in dezimal (z.B. 888) oder in hexadezimal mit einem vorangestellten Dollarsymbol (z.B. $378).

Ausgänge:

Der Wert, den Sie dem Portarray zuweisen, wird an die Schnittstelle weitergeleitet. Als Wert ist der Zahlenbereich von 0 bis 255 zulässig, da nur ein Byte übertragen wird. Der Wert 0 schaltet alle acht Datenleitungen aus und der Wert 255 alle Datenleitungen ein. Die acht Datenleitungen (D0 bis D7: siehe Schaltplan ) besitzen einen Wert von 2 hoch 0 (=1) bis 2 hoch 7 (=128). Möchten Sie beispielsweise nur den Ausgang D3 einschalten, so verwenden Sie den Wert 8 (2 hoch 3 = 8). Möchten Sie jedoch eine Kombination von mehreren Ausgängen einschalten, so müssen Sie die jeweiligen Werte mit der Rechenvorschrift Addition kombinieren. Zum Beispiel schalten Sie mit dem Wert 13 die Datenleitungen D0, D2 und D3 ein (1+4+8=13). Alle anderen Datenleitungen werden sofort ausgeschaltet, falls sie vorher eingeschaltet war.

Der Port $378
D0 Bit 0 Pin 2
D1 Bit 1 Pin 3
D2 Bit 2 Pin 4
D3 Bit 3 Pin 5
D4 Bit 4 Pin 6
D5 Bit 5 Pin 7
D6 Bit 6 Pin 8
D7 Bit 7 Pin 9


Beispiele:
port[$378]:= 32; {D5 ein: 2 hoch 5 = 32}
port[$378]:= 0; {alles aus}
port[$378]:= 255; {alles ein}
port[$378]:= 85; {D0, D2, D4, D6 ein, andere aus: 1 + 4 + 16 + 64 = 85}


Wahlweise können Sie aber auch eine einzelne Datenleitung ein- bzw. ausschalten. Die anderen Zustände der anderen Datenleitungen bleiben unverändert. Dazu benutzen Sie den logischen Operator XOR:

Beispiele:
port[$378]:= port[$378] xor 16; {invertiert D4: aus "1" wird "0" und umgekehrt}
port[$378]:= port[$378] xor 128; {invertiert D7}


Möchten den Zustand einer bestimmten Datenleitung lesen, dann verwenden Sie hierzu den logischen Operator AND:

Beispiele:
if (port[$378] AND 16) = 16 then ... {Ausgang D4 ist "1", andere egal}
if (port[$378] AND 16) = 0 then ... {Ausgang D4 ist "0", andere egal}
if (port[$378] AND 4) = 4 then ... {Ausgang D2 ist "1", andere egal}
if (port[$378] AND 4) = 0 then ... {Ausgang D2 ist "0", andere egal}


Eingänge:

Um die Eingänge auszulesen, müssen Sie vom Port- Array lesen. Als Portnummer verwenden Sie wie oben beschrieben 889 (dezimal) oder $379 (hexadezimal). Für die Eingabe sind nur die 5 oberen Bits relevant (Bit 3 bis 7), die anderen drei Bits sollten Sie nicht beachten. Wichtig ist, dass Bit 7 (BUSY) invertiert (umgedreht) ist, d.h. bei 0V ist es "1" und bei 5V ist es "0". Welches Bit für welchen Eingang zuständig ist, entnehmen Sie bitte der unten stehenden Tabelle. Die zu messenden Eingänge müssen immer eine definierte Spannung haben. Entweder Sie legen sie auf 0V oder auf 5V. Die Spannung 0V bedeutet nicht, dass dieser Eingang nicht angeschlossen ist, sondern dass er wirklich mit Masse verbunden ist. Nicht verbundene (offene) Eingänge können einen undefinierten Wert haben. Meist sind sie jedoch "1".

Der Port $379
BUSY (invertiert) Bit 7 Pin 11
ACK Bit 6 Pin 10
PE Bit 5 Pin 12
SCT Bit 4 Pin 13
ERROR Bit 3 Pin 15
Bits 2-0 reserviert    


Um einen bestimmten Eingang zu testen, sollten Sie das Port- Array nicht auf einen bestimmten Wert hin überprüfen, da einerseits die Bits 0 bis 2 und andererseits die anderen Eingänge auch noch eine Rolle spielen würden. Besser ist es, jeden Eingang getrennt abzufragen. Dies können Sie mit dem logischen Operator AND erledigen:

Beispiele:
var input: byte;
input:= port[$379]; {Daten der Eingänge holen}
if (input and 16) = 16 then ... {Eingang SCT ist "1", andere egal}
if (input and 64) = 0 then ... {Eingang ACK ist "0", d.h. 0V, andere egal}
if (input and 128) = 0 then ... {Eingang BUSY ist "0", d.h. 5V da invertiert, andere egal}



Beispielprogramme für das Interface


Hier biete ich Ihnen Beispielprogramme zum Download an, die den Umgang mit der parallelen Schnittstelle verdeutlichen. In dem jeweiligen Ziparchiv befindet sich das ausführbare Programm, der Quellcode und eine Liesmichdatei. Den Quellcode dürfen Sie nach Belieben ändern, solange dies für private Zwecke geschieht. Die Programme sind alle in Turbo Pascal 5.0 (DOS) geschrieben.

Programmname
Beschreibung
Centroni.zip Gibt die Zustände ("1" oder "0") der acht Datenleitungen der Centronicsschnittstelle (Parallelschnittstelle) aus und verfügt über eine Lauflichtfunktion. Desweiteren können Sie die Zustände der einzelnen Datenleitungen auch ändern.
Licht.zip Simuliert einen Lichtcomputer. Es enthält die Funktionen Lauflicht, Blinklicht, manuelle Bedienung und einen programmierbaren Teil.
Readlpt.zip Gibt die Zustände ("1" oder "0") der fünf Eingangsleitungen der Centronicsschnittstelle (Parallelschnittstelle) aus.