Aber da ihr ja Daten nicht nur ausgeben sondern auch einlesen wollt, müsst ihr sowieso ein klein wenig Aufwand treiben.
So eignen sich Buspuffer mit tristate-Ausgang hervorragend für einfache Zwecke:
z.B.
74 LS 244 oder
74 LS 245
Schaut in die Datenblätter und überlegt, was euch mehr nutzt. Ich glaub, der 245 invertiert die Signale. Diese Bausteine beherbergen 8 tristate Buffer in einem 20 poligen Gehäuse. Die Buffer sind jeweils zu 4 Stk in 2 Gruppen selektierbar. Und damit bin ich beim CS Signal. Oft ist über der Signalbezeichnung ein Strich. Dieser bedeutet, das ein Low-Signal die Funktion auslöst. (Low-aktiv)
CS ist in vielen Fällen eines dieser Signale, die einen Datenübertrag vom Eingang (Dn) zum Ausgang (Qn) bei Low-Pegel (0-Signal) freigeben.
Um den Parallelport von der Eingabe und Ausgabe zu trennen, braucht man für alle 8 Bit 2 Bausteine, wobei die Struktur des
74 LS 244 genau diese Funktion unterstützt.
Nun wollen wir ein CS-Signal erzeugen.
Sinnvoll ist es, ein Bit zu nehmen und festzulegen: bei '1' will ich lesen, bei '0' schreiben. Da ich dafür nicht den Datenbus benutzen möchte, bietet mir die parallele Schnittstelle ein paar weitere Signale, die sie sonst zum Handshaking mit dem Drucker benutzt.
Ein Signal ist Strobe auf Pin 1. Dieses Signal bedeutet, es liegen Daten zur Ausgabe an z.B. Drucker bereit. Dieses Strobe-Signal kann über die Portadresse 37Ah zum Parallelport Pin 1 ausgegeben werden.
Das zugehörige Registerbit ist Bit 0. Und genau dieses benutzen wir zur Selection der Ein- oder Ausgabe (Bit 0 = 0 -> Daten zur Ausgabe bereit).
Hinweis: Dieses Bit wird Invers zum logischen Zustand geschaltet, d.h. wenn Bit = 0 dann Leitung (Pin) = 5V und wenn Bit = 1 dann Leitung (Pin) = 0V!
Schließe ich nun CS1 direkt und CS2 über einen Inverter an Pin 1 vom Parallelport, habe ich schon einmal ein Richtungsbit.
Mit
WriteLPTPort(37Ah, Str_To_Byte('xxxxxxx1')); // 'xx1xxxx1' Bit 5 ist Steuerbit für Bidirektional
wird Pin 1 vom Parallelport auf '0' gelegt.
Somit wird CS1 = '0' und dadurch der Eingabekanal durchgeschaltet.
Mit
WriteLPTPort(37Ah, Str_To_Byte('xxxxxxx0')); // 'xx0xxxx0'
wird Pin 1 vom Parallelport auf '1' gelegt.
CS1 bekommt High-Pegel und durch den Inverter CS2 Low-Pegel.
Der Ausgabekanal wird durchgeschaltet.
Es lassen sich nun mit den ersten 3 Bits der Portadresse bis zu weiteren 8 CS Signale erzeugen, die sowohl Ein- oder Ausgabekanäle freigeben können.
Das heißt im Klartext: ich kann eine Schaltung entwerfen, die mir 8 Kanäle mit jeweils 8 Bit also 64 Ein- und 64 Ausgänge bietet.
Ein wenig beachten sollte man die Signallage zu Potentiallage. Dies ist beim Steuerregister nicht immer gleich und deshalb werde ich jetzt Pin 1 und 14 mit Invertern Beschalten. Damit habe ich wieder Bit = Signallage.
(siehe Hinweis !)
Nun Kann ich wirklich sagen:
Code:
'00000000' schreibt Kanal 0
'00000010' schreibt Kanal 1
'00000100' schreibt Kanal 2
'00000110' schreibt Kanal 3
'00001000' schreibt Kanal 4
'00001010' schreibt Kanal 5
'00001100' schreibt Kanal 6
'00001110' schreibt Kanal 7
und:
Code:
'00010001' liest Kanal 0
'00010011' liest Kanal 1
'00010101' liest Kanal 2
'00010111' liest Kanal 3
'00011001' liest Kanal 4
'00011011' liest Kanal 5
'00011101' liest Kanal 6
'00011111' liest Kanal 7