Letztes Update 10.09.2003
Bei dieser Schaltung ging es darum, den Rechner mal eben, ohne größeren Aufwand, mit vier Tasten auszustatten. Die Hardware sollte so gering wie möglich gehalten werden.
Wenn man sich die serielle Schnittstelle und die Windows API Funktionen etwas genauer ansieht, erkannt man, das die Leitungen RTS und DTR separat angesteuert werden können. Die Leitungen DSR und CTS können genauso abgefragt werden. Das bietet eine ideale Möglichkeit, eine 2 mal 2 Tastaturmatrix aufzubauen.
Der Schaltplan dazu sieht folgendermaßen aus.
Es wird lediglich ein SUB-D-9 Stecker, vier Tasten und zwei Widerstände dafür benötigt.
Der Rest dazu ist dann nur noch geschickte Programmierung.
Für die API Zugriffe werden die Level-1 Funktionen für I2C-Bus Bausteine genommen.
Das Kernstück des Programms ist ein Timer mit folgender Funktion:
Das TxD Signal wird nicht bedient. Es sorgt nur dafür das die Eingänge DSR und und CTS immer einen definierten Pegel haben und nicht offen in der Landschaft rumhängen und eventuell Störungen empfangen. Wenn nichts auf der TxD Leitung los ist, kann man dort eine Spannung von -10 bis -12Volt messen.
Im Ruhezustand haben die Ausgänge RTS und DTR auch -10 bis -10Volt. RTS wird jetzt auf High-Pegel gesetzt. Ist S2 geschlossen, wird dieser High-Pegel auch an DSR gemessen. Ist S4 geschlossen, wird der High-Pegel an CTS gemessen. Das gleiche gilt für die DTR Leitung. Es ergibt sich also eine eindeutige Matrix:
| DSR=Low CTS=High |
DSR=High CTS=Low |
|
| RTS=High DTR=Low |
S4 |
S2 |
| RTS=Low DTR=High |
S3 |
S1 |
Die Abfrage sieht folgendermaßen aus:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
DTR(false);
RTS(true);
S2.Checked := DSR;
S4.Checked := CTS;
RTS(false);
DTR(true);
S1.Checked := DSR;
S3.Checked := CTS;
end;
Und hier das Ganze als Download.
Stückliste |
|||
| Pos | Artikel | Best Nr (Reichelt) | Preis |
1 |
R1 - 10k | Metall 10,0k | 0,08 |
2 |
R2 - 10k | Metall 10,0k | 0,08 |
3 |
Taster oder Schalter | ||
4 |
Taster oder Schalter | ||
5 |
Taster oder Schalter | ||
6 |
Taster oder Schalter | ||