Messen und Steuern mit dem PC unter MS-DOS

Die Bussysteme
Die serielle Schnittstelle
Die parallele Schnittstelle
Bidirektionale Druckerschnittstelle
Programmtechnische Erläuterungen in BASIC
Die Programmierung des 8-Bit-Datenregisters
Die Programmierung des STATUS-Registers
Die Programmierung des Steuer-Registers (Kontroll-Registers)
Aufbau einer Experimentierplatine für den PC
Messen von Zeiten mit dem PC
Gefahrloses Messen und Steuern durch Optokoppler
Messen und Steuern mit dem PC - Literaturliste
 
 
 
Startseite: Messen-Steuern - Regeln
zurück zur vorhergenden Seite

Bekanntlich erfolgt der gesamte Datenaustausch beim PC über drei Bussysteme:

- dem Datenbus
- dem Adreßbus
- dem Kontroll- oder Steuerbus.
Will man den Computer zum Messen, Regeln und Steuern benutzen, muß man "Verbindung" mit diesen Bussen aufnehmen. Dies ist auf die einfachste Weise über die nach außen geführten Steckverbindungen möglich. Jeder PC verfügt in der Regel über mindestens zwei solcher geeigneter Steckverbindungen. Diese "Stecker" bezeichnet man als Schnittstellen. Man sollte annehmen, daß beim hohen Stand der Technik hier eine genaue Normung vorhanden ist. Dies ist zwar der Fall, aber leider gibt es hier mehrere verschiedenartige Normungen, die dem Benutzer das Leben schwer machen können. Grundsätzlich gibt es zwei Arten der Datenübertragung:

Seriell und parallel. Dementsprechend haben wir es mit zwei Arten von Schnittstellen zu tun.
 
 
 

Die serielle Schnittstelle

Hier müssen die zu sendenden Daten erst von einer parallelen Struktur in einen seriellen Datenstrom umgesetzt werden. Hierzu wird ein USART (Universal Synchron/Asynchrom Receiver/Transmitter) verwendet. Dieser Baustein erhält vom Mikroprozessor parallel die Informationen und setzt diese in einen seriellen Datenstrom um, wenn der Baustein als Sender arbeitet. Die Datenübertragung erfolgt nur über eine einzige Datenleitung. Arbeitet der USART als Empfänger, so wird der serielle Datenstrom empfangen und in einem Schieberegister in eine paralleles Datenwort umgesetzt.

Diese Schnittstelle wird auch RS232C- oder V.24-Schnittstelle genannt. Man erkennt sie normalerweise durch eine 25polige Mini-Buchse. Bei den AT`s ist allerdings meist nur noch eine 9polige Stiftleiste vorhanden. Bei vielen Geräten wird dadurch ein Adapter nötig oder man ist gezwungen die Anschlüsse auf die 9polige SUB-D-Buchse umzulöten. Nicht nur deshalb gibt es mit der seriellen Schnittstelle mehr Probleme. Die RS232-Schnittstelle ist vielseitiger als die Centronics-Parallel-Schnittstelle. So ermöglicht die serielle Schnittstelle den Datenausstausch in beiden Richtungen. Damit der Ausstausch klappt, muß festgelegt werden, auf welcher Leitung gesendet und auf welcher empfangen wird. Wenn beide auf der jeweils gleichen Leitung senden und empfangen wollen, kommt es natürlich zu keinem Datentransfer. Aus Kostengründen sind die meisten Drucker mit einer Centronic-Schnittstelle ausgerüstet, so daß bei Verwendung von Druckerweichen peinlich darauf geachtet werden muß, daß die Leitungen nicht zu lang werden. Die serielle Schnittstelle läßt sich wahlweise als "COM1", "COM2" konfigurieren, wobei folgender Adreßbereich benutzt wird:

COM1: 0000:03F8 bis 0000:03FF hex
COM2: 0000:02F8 bis 0000:02FF hex
Die parallele Schnittstelle

Die parallele Datenübertragung ist sehr schnell. Bis zu ein MByte können in der Sekunde durch die acht Datenleitungen geschickt werden.

Pin Funktion

1 STROBE
2 Datenleitung 1
3 Datenleitung 2
4 Datenleitung 3
5 Datenleitung 4
6 Datenleitung 5
7 Datenleitung 6
8 Datenleitung 7
9 Datenleitung 8
10 ACKNLG (Acknowledge (Eingang)
11 BUSY (Eingang)
12 PE (Papier-Ende Eingang)
13 SLCT (Drucker anwählen)
14 AUTO-FEEDXT
15  frei
16 0V
17 Masse des Chassis
18 +5V vom Drucker oder ohne Funktion
19 Masse, verdrillt mit STROBE-Leitung von Pin 1
20 Masse, verdrillt mit DATEN-Leitung 1 von Pin 2
21 Masse, verdrillt mit DATEN-Leitung 2 von Pin 3
22 Masse, verdrillt mit DATEN-Leitung 3 von Pin 4
23 Masse, verdrillt mit DATEN-Leitung 4 von Pin 5
24 Masse, verdrillt mit DATEN-Leitung 5 von Pin 6
25 Masse, verdrillt mit DATEN-Leitung 6 von Pin 7
26 Masse, verdrillt mit DATEN-Leitung 7 von Pin 8
27 Masse, verdrillt mit DATEN-Leitung 8 von Pin 9
28 Masse, verdrillt mit ACKNLG-Leitung von Pin 10
29 Masse, verdrillt mit BUSY-Leitung von Pin 11
30 Masse
31 INIT, mit einem 0-Signal wird der Buffer gelöscht
32 ERROR (Eingang)
33 Masse
34 frei
35 Pin ist über einen 4,7 kOhm mit +5V verbunden
36  SLCT für Dateneingabe an den Drucker

In der Computertechnik unterscheidet man zwischen

- der Schnittstelle nach Centronics
- der Schnittstelle nach dem IBM-Format

Druckeranschluss

PC-Anschluss

Den Unterschied erkennt man bereits an den Steckern. Arbeitet man nach Centronics, hat man einen Stecker mit 36 Anschlüssen (druckerseitig), während der IBM-Stecker (meist rechnerseitig) identisch ist mit den 25poligen Anschlüssen nach RS232C.

Mit den acht Datenleitungen überträgt der Computer gleichzeitig die Informationen mit TTL-Pegeln (Transistor-Transistor-Logik), also mit den üblichen Computersignalen. Die Übertragungsmethode erfolgt durch die Steuerleitung STROBE und ACKNLG oder STROBE und BUSY. Diese Verfahren bezeichnet man als Handshaking. Mit dem STROBE-Signal zeigt der Computer an, daß sich auf den acht Datenleitungen die Informationen für den Drucker befinden. Der Drucker meldet über die beiden anderen Leitungen ACKNLG und BUSY den Empfang und die Quittierung, je nach Anwendungsfall.

Aus der Pin-Belegung der Centronic-Schnittstelle erkennt man, daß diese Schnittstelle für den Drucker optimal geeignet ist. Sie wird deshalb auch einfach als "Druckeranschluß" bezeichnet. Die Möglichkeiten mit der parallelen Schnittstelle sind jedoch sehr vielseitig. Es lassen sich nicht nur Daten ausgeben, sondern mit einem Trick auch einlesen. Dadurch ist wie bei der seriellen Schnittstelle ein echter bidirektionaler Betrieb, d. h. ein Datenaustausch möglich. Dabei bietet die parallele Schnittstelle den Vorteil, daß ihre Handhabung unkomplizierter ist, weil keine Datenübertragungsgeschwindigkeiten und -formate eingestellt werden müssen.

Deshalb ist die parallele Schnittstelle ideal, wenn es darum geht, selbstgebaute Schaltungen an den PC anzuschließen und über den Computer zu steuern. In der Regel ist die Parallelschnittstelle aber bereits durch den Drucker belegt. Diese Problem läßt sich durch den Kauf einer preisgünstigen Steckkarte mit einer zweiten parallelen Schnittstelle umgehen. Bekanntlich kann MS-DOS bis zu drei Parallelschnittstellen problemlos verwalten.

Eine parallele Schnittstelle wird im PC über sogenannte Portadressen angesprochen. Die Portadressen liegen in folgenden Speicherbereichen: LPT1 003BC bis 003BE hex
LPT2 00378 bis 0037A hex
LPT3 00278 bis 0027A hex
Für das BIOS sind hierbei einige Speicherstellen im systemeigenen Arbeitsspeicher-Bereich wichtig. Im Segment 40H (64 dezimal) sind dies die Adressen 08H bis 0FH. Also: 0040:0008 - 0040:0009 hex - LPT1
0040:000A - 0040:000B hex - LPT2
0040:000C - 0040:0007 hex - LPT3
0040:000E - 0040:000F hex - LPT4
Jeweils zwei Byte (ein Wort) werden für die Anfangsadresse der Schnittstelle benötigt. Wenn man zwei Schnittstellen funktionell gegeneinander austauschen möchte, hilft folgendes Maschinenprogramm weiter. Am besten geht man bei der Eingabe so vor:
Mit Hilfe eines Editors (z. B. Edit wird untenstehender Programmtext z. B. unter dem Namen LPT1LPT2.ASM eingegeben. Anschließend genügt der Aufruf des Debuggers:
DEBUG < LPT1LPT2.ASM und das direkt ausführbare Programm LPT1LPT2.COM wird generiert.  
a
mov ax,0000
mov ds,ax
mov ax,[0408]
mov bx,[040a]
mov [0408],bx
mov [040a],ax
pop ds
mov ah,09
mov dx,0117
int 21
mov ah,4c
mov ax,4c
int 21
e117 d a"Druckerports wurden vertauscht!"d a a 24
n lpt1lpt2.com
r cx
60
w
q
Die genaue Aufteilung der Einzeladressen sieht so aus:
 
 
Signal Pin Lpt1 Lpt2 Lpt3 Bit
Error 32 3BDhex 379hex 279hex  3
Select 13 3BDhex 379hex 279hex  4
Paper Out 12 3BDhex 379hex 279hex  5
Acknowledge 10 3BDhex 379hex 279hex  6
Busy 11 3BDhex 379hex 279hex  7

 
Signal Pin Lpt1 Lpt2 Lpt3 Bit
Data 0 2 3bChex 378hex 278hex 0
Data 1 3 3bChex 378hex 278hex 1
Data 2 4 3bChex 378hex 278hex 2
Data 3 5 3bChex 378hex 278hex 3
Data 4 6 3bChex 378hex 278hex 4
Data 5 7 3bChex 378hex 278hex 5
Data 6 8 3bChex 378hex 278hex 6
Data 7 9 3bChex 378hex 278hex 7
Über die erste Portadresse (z. B: für LPT2) 378hex läßt sich das Datenregister, über die zweite 379hex das Statusregister und über die dritte 37Ahex das Steuerregister der parallen Schnittstelle ansprechen. Das Datenregister der Parallelschnittstelle wird dazu benutzt werden um 8-Bit-Werte auszugeben. Diese Funktion kann man auch zur Datenübergabe an selbstgebaute Schaltungen nutzen. Über das Statusregister wird beim Druckerbetrieb der Zustand der fünf Statussignale "Error", "Select", Paper Out", "Acknowledge" und "Busy" abgefragt. Diese Signale lassen sich über Bit 3 bis Bit 7 einlesen (die Werte von Bit 0 bis Bit 2 sind konstant) und haben bei Druckerbetrieb folgende Bedeutung: Bit 3 = 0 - Fehler beim Drucken aufgetreten (Error)
Bit 4 = 1 - Drucker per "Online" ausgewählt (Select)
Bit 5 = 1 - Kein Papier vorhanden (Paper Out)
Bit 6 = 0 - Für nächstes Zeichen druckbereit (Acknowledge)
Bit 7 = 0 - Drucker ist beschäftigt (Busy)
Diese fünf Bit können zum Einlesen von Daten benutzt werden, wenn kein Drucker angeschlossen ist. So ist es möglich Werte bis zur Breite von 8 Bit über das Datenregister auszulesen und über das Statusregister Werte bis zur Breite von fünf Bit einzulesen. Über das Steuerregister der Centronic-Schnittstelle lassen sich weiterhin die vier Steuersignale "Data Strobe", Auto Feed", "Initial" und "Select Input" aktivieren. Diese Signale werden über Bit 0 bis Bit 4 angesteuert und haben beim Druckerbetrieb folgende Bedeutung:
Bit 0 = 0 - Nächstes Zeichen einlesen (Data Strobe)
Bit 1 = 0 - Automat. Zeilenvorschub ausführen (Auto Feed)
Bit 2 = 0 - Drucker initialisieren (Initial)
Bit 3 = 1 - Drucker auswählen (Select Input)
Auch diese vier Bits kann man für eigene Schaltungen nutzen, wenn kein Drucker angeschlossen ist.

Alternativ zur parallelen Datenein- und Ausgabe ist mit der parallelen Schnittstelle aber auch eine serielle Übertragung möglich. Dies hat den großen Vorteil, daß nicht so viele Leitungen erforderlich sind. Prinzipiell genügt je eine Datenleitung pro Übertragungsrichtung. Wie bei der echten seriellen Übertragung ist auch in diesem Fall noch ein Taktsignal zur Synchronisation von Sender und Empfänger pro Übertragungsrichtung nötig, und ein drittes (optionales) Signal zeigt jeweils dem Empfänger die Verfügbarkeit eines neuen Datenbit auf der Datenleitung an (Strobesignal). Es genügen also je zwei bis drei Signalleitungen: eine Leitung für die Daten, eine für den Takt und eventuelle eine weitere für das Strobesignal.

Bei der seriellen Ausgabe über die Parallel-Schnittstelle müssen die Daten natürlich per Software in die serielle Form gebracht, und über das Datenregister auf eine Datenleitung gelegt werden. Mittels Schieberegister können die Daten dann wieder in paralle Form übergeführt werden.

Soll der PC zum Messen von analogen Größen eingesetzt werden, gibt es mit dem Binärsystem der Computerlogik das nur die digitalen Werte 0 und 1 kennt, Schwierigkeiten. Physikalische Meßgrößen können schließlich unendliche viele Zustände annehmen. Damit der PC den analogen Ist-Wert, den ein Meßgerät durch Erfassen einer physikalischen Größe liefert, verstehen und interpretieren kann, ist eine Umsetzung des analogen Signals in eine digitales Signal erforderlich. Diese geschieht durch einen Analog/Digital-Wandler (A/D-Wandler z.B. ZN 427). Oft ist aber zur Meßwerterfassung mit dem PC gar keine A/D-Wandler nötig, weil der Computer nur erkennen muß, ob ein bestimmter Schwellenwert oder Grenzwert erreicht wurde. In diesen Fällen reicht des Einsatz eines Komparators (z. B. CA 3140). Ein Komparator vergleicht die an seinen beiden Eingängen liegenden analogen Signale (Sollwert und Istwert) miteinander und gibt je nach Ergebnis des Vergleichs das binäre Signal 1 (Spannung) oder 0 (keine Spannung) zurück. Der Sollwert wird in der Regel über ein Potentiometer fest eingestellt, während ein Meßfühler das Signal für den Istwert liefert.

Beim Einsatz des PC zum Steuern müssen die digitalen Signale des Rechners in analoge Steuergrößen umgewandelt werden. Diese Umformung nimmt ein Digital / Analog-Wandler (D/A-Wandler z. B. ZN 426) vor, der einen analogen Signalpegel erzeugt, dessen Amplitude dem Wert des vom PC kommenden binären Bitmusters entspricht. Doch auch hier genügt es für Steuerungszwecke oft, eine Gerät nur ein- oder auszuschalten. Das kann der PC mit seinen binären Signalen direkt erledigen. Für die Schule ist besonders das Ansteuern von Leuchtdioden, Optokopplern, Relais, Thyristoren und Schrittmotoren interessant.

Bidirektionale Druckerschnittstelle

Im Normalfall können auf der Druckerschnittstelle Daten nur in eine Richtung ausgegeben werden - vom PC an den Drucker. Eine bidirektionale Druckerschnittstelle ermöglicht es, Rückmeldungen vom Drucker zu empfangen. Diese können dann z.B. von einem entsprechenden Programm in eine akustische Warnung (»Kein Papier mehr«) umgewandelt werden.
 

Programmtechnische Erläuterungen in BASIC
 

In der Regel verfügen die in den Schulen vorhandenen PC nur über eine nach außen geführte Druckerschnittstelle (LPT1). Ob tatsächlich diese Schnittstelle vorhanden ist, läßt sich leicht mit folgendem kleinen Programm ermitteln.

10 DEF SEG = 0
20 CLS: A=PEEK(&H408):B=PEEK(&H409)
30 C=A+256*B: PRINT C : DEF SEG

C gibt an, ob PORT 888 (Schnittstelle 1) oder PORT 956 (Schnittstelle 2) als Drucker-Schnittstelle installiert ist. LPT2 ist meist nur bei Rechnern mit Monochrom-Karten vorhanden.

Erläuterungen zum Porgramm:

Der Speicher beim PC ist in sogenannte Segmente aufgeteilt. Ein Segment hat in der Regel 64 kB Größe. Da GWBASIC auf ein anderes Segment zugreift muß zunächst Segment 0 angewählt werden. In Zeile 20 wird dann der Inhalt der Speicherzellen 408hex und 409hex gelesen und den Variablen A und B zugewiesen. Aus den Daten in diesen Speicherzellen wird dann die Adresse der Schnittstelle ermittelt. Im Folgenden wird davon ausgegangen, daß dies PORT 888 ist.
 

Die Programme DEZHEX.BAS, DEZBIN.BAS und HEXDEZ.BAS sollen helfen, Dezimalzahlen in Hexagesimalzahlen und in Binärzahlen umzurechnen.

 
100 REM *********************** DEZHEX.BAS **************
110 REM * Umwandlung von Dezimalzahlen in Hex-Zahlen *
120 REM *************************************************
130 CLS
135 A$="0123456789ABCDEF"
140 PRINT "Von Dezimal zu Binär"
150 INPUT "DEZ = ";D
155 D$=""
170 M=D:D=INT(D/16)
180 M=M-D*16+1
190 D$=MID$(A$,M,1)+D$
200 IF D > 0 THEN 170
210 IF LEN (D$) < 4 THEN D$ = "0" + D$: GOTO 210
220 PRINT "Hex = ";D$

100 REM *********************** DEZBIN.BAS *******************
110 REM * Umwandlung von Dezimalzahlen in Binärzahlen *
120 REM ******************************************************
130 CLS
140 PRINT "Von Dezimal zu Binär"
150 INPUT "DEZ = ";D:B$=""
160 D = D/2
170 IF D = INT(D) THEN B$ = "0" + B$
180 IF D <>INT(D) THEN B$ = "1" + B$
190 D = INT(D)
200 IF D > 0 THEN 160
210 IF LEN (B$) < 8 THEN B$ = "0" + B$: GOTO 210
220 PRINT "BIN = ";B$
 

100 REM *********************** HEXDEZ.BAS *******************
110 REM * Umwandlung von Hex-Zahlen in Dezimalzahlen *
120 REM ******************************************************
125 A$ = "0123456789abcdef"
130 CLS
140 PRINT "Hex zu Dezimal"
150 INPUT "Hex = ";H$
160 L=LEN(H$):Y =-1:D=0
170 FOR I = L TO 1 STEP -1:X=0:Y=Y+1
180 X=X+1:IF MID$(A$,X,1)<>MID$(H$,I,1) THEN 180
190 D = D +(X - 1)*16^Y:NEXT I
200 PRINT "Dez = ";D

Die Programmierung des 8-Bit-Datenregisters
 
 
 
Die Datenkanäle D0 bis D7 können sowohl als Eingänge als auch als Ausgänge benutzt werden. Dies bedeutet, daß die Anschlüsse auf Masse (GND) gelegt werden können, ohne den Rechner zu gefährden, (der Strom wird dabei auf ca. 100 mA begrenzt). Das Datenregister ist also wesentlicher robuster als beim C64, wo man sogar Leuchtdioden besser über einen Treiber ansprechen sollte. Zur experimentellen Untersuchung der Datenkanäle empfiehlt sich der Anschluß von Leuchtdioden oder einem Voltmeter zwischen dem jeweiligen Daten-Kanal und Masse (GND). Sehr hilfreich sind hierbei die Basicbefehle OUT und INP. Mit OUT n,m wird ein Byte über die Rechnerschnittstelle mit der Ein-/Ausgabeadresse n ausgegeben. Mit INP(n) wird der Inhalt des entsprechenden Registers n gelesen.
 
 

Benutzung als Ausgänge
 

OUT 888,0 setzt alle Kanäle D0...D7 auf 0 Volt (=Low).

OUT 888,2^N (0 <= N <=7) läßt die an Kanal DN angeschlossene Leuchtdiode aufleuchten. Sollen zwei Leuchtdioden oder andere Verbraucher mit I < ca. 100 mA an den Kanälen D2 und D5 betrieben werden, so lauten die entsprechenden Befehle:
OUT 888,0  REM Beide LED's aus
OUT 888,2^2+2^5 REM Beide LED's an
OUT 888,4 REM Nur LED an D2 leuchtet
Mit den Befehl OUT 888,255 liegen somit alle 8 Kanäle auf "High" (+ 5V). Ohne Schaden für den Rechner können 8 LED's gleichzeitig betrieben werden.
 

Benutzung als Eingänge
Jeder der auf 5 V (High) gelegten Datenkanäle D0...D7 kann durch Verbindung mit GND auf Low gezogen werden; dieser Kurzschluß ist völlig unschädlich für den Rechner. Werden zunächst durch den Befehl OUT 888,255 alle Datenkanäle auf High (5V) gelegt und wird dann gemäß Skizze
 
 

zwischen DN (N = 0 ... 7) und Masse der Taster geschlossen, so wird nach Eingabe des Befehls

PRINT INP(888)

durch den ausgegebenen Wert 255 - 2N der jeweilige Zustand des Datenregisters angezeigt.

Werden zum Beispiel die Taster D2 und D5 gedrückt, so wird nach Eingabe des obigen PRINT-Befehls der Wert 255 - (22 - 25) = 219 angezeigt. Werden die Eingangskanäle nicht durch einen Taster (= Kurzschluß), sondern mit einen Widerstand mit GND verbunden, so ist zu beachten, daß der Wechsel von "High" nach "Low" des jeweiligen Kanals nur bei Widerständen < ca. 10 Ohm erreicht wird. Die Datenkanäle können also nicht durch Photowiderstände oder Phototransistoren auf "Low" gezogen werden. Wesentlich besser geeignet sind dazu die Eingänge SELECT, PE (Papier aus) und ACKNLO.
 

Die Programmierung des STATUS-Registers

Für LPT1 handelt es sich hierbei um die Register-Adresse 379 Hex bzw. 889 Dez.
 

Wir beschränken uns hier auf die Eingänge:

SELECT - Bit 4 = 1 (Drucker per "Online" ausgewählt
PE - Bit 5 = 1 (Kein Papier vorhanden)
ACKNLO - Bit 6 = 0 (Für nächstes Byte bereit [Acknowledge]
Diese Kanäle können bereits durch Widerstände < ca. 6 k-Ohm auf "Low" gezogen werden. Selbstverständlich kann man sie auch kurzschließen R = 0, also auf Masse (GND) legen. Durch den Befehl PRINT INP(889) AND 16: REM bzw. AND 32
bzw. AND 64
kann der Zustand der Eingänge SELECT, PE und ACKNLO ermittelt werden.
Die Programmierung des Steuer-Registers (Kontroll-Registers)

Für LPT1 handelt es sich hierbei um die Register-Adresse 37A Hex bzw. 890 Dez.
 

Es sollen hier nur die Ausgänge

STROBE Bit 0 = 0 (Nächstes Zeichen einlesen)
INIT Bit 2 = 0 (Drucker initialisieren)
betrachtet werden.

Diese Beiden Kanäle gehören zum Steuer-Register. Es sollte beachtet werden, daß nach dem Einschalten des PC's beide Ausgänge "High" sind. Soll nach dem Experimentieren wieder gedruckt werden, muß durch den Befehl

OUT 890,4

die Schnittstelle wieder für den Druckerbetrieb initialisiert werden.

Wichtig: Anders als bei INIT wird bei STROBE das zugehörige Bit durch OUT 890,0 auf "High" geschaltet. Entsprechend wird mit OUT 890,1 auf "Low" geschaltet. Bei INIT ist es genau umgekehrt (normal).

 
Übersicht - STROBE - INIT  
Einschaltzustand Beide Ausgänge High (5 V)
Beide Low (= 0 V) OUT 890,1
Beide High (= 5 V) OUT 890,4
STROBE High - INIT Low OUT 890,0
INIT Low - STROBE High OUT 890,5
Die beiden Ausgänge STROBE und INIT sind kurzschlußfest, können also ohne Schaden für den Rechner mit GND verbunden werden (z. B. bei Schaltungsfehlern). Dabei wird der Strom auf ca. 0,4 - 0,8 mA (je nach Rechner) begrenzt. Die Ausgänge können sogar mit Fremdspannungen bis 5 V beschaltet werden.
 
 
 
Aufbau einer Experimentierplatine für den PC
 Um problemlos experimentieren zu können empfiehlt es sich, die oben besprochenen Ein- und Ausgänge auf einer Experimentierplatine mittels Telephon-Buchsen (Bananenstecker-Buchse) zur Verfügung zu stellen. Folgende Bauteile werden benötigt: (im Elektronikhandel erhältlich - hier Bestellnummern Fa. Conrad Hirschau).
1 Einbaubuchse Cen. 36-polig 491276-55
1 Buchse rot 734012-55
8 Buchsen schwarz  8 734020-55
2 Buchsen blau  734047-55
1 Buchse grün 734055-55
3 Buchsen gelb  734039-55 
1 Europlatine (Lötpunkt)  527785-55

Die Buchsen können wie dargestellt, eingebaut werden. Es empfiehlt sich, die Platine auf einen Holzrahmen zu befestigen und die Centronic-Einbaubuchse nach dem Verlöten in einer der Form entsprechenden Öffnung im Rahmen fest zu verschrauben.

Zur experimentellen Untersuchung der Datenkanäle D0 ... D7 empfiehlt sich die Herstellung folgender einfacher Schaltung. 8 Leuchtdioden wird jeweils ein Schutzwiderstand vorgeschaltet (Vorsichtsmaßnahme). Jede der Dioden wird mit je einem Datenkanal verbunden.

Folgende Bauteile werden benötigt: (im Elektronikhandel erhältlich - hier Bestellnummern Fa. Conrad Hirschau).
1 Leiterplatte (Lötpunkt) 527564-55
8 LEDs rot 5mm  184586-55
8 Bananenstecker schwarz  730211-55
8 Widerstände 220 Ohm 403164-55
1 Bananenstecker grün 730246-55

Achtung wichtig!

Mit dem Befehl OUT 888,255 werden alle Ausggänge auf "High" gesetzt. Die LED's müßten leuchten. Tun sie das nicht, ist die Rechner-Masse (GND) nicht auf Pin 16 des Centronics-Steckers gelegt. In diesem Fall den Centronics-Stecker (in der Regel einfache Klinken-Verriegelung) - nicht jedoch den 25-poligen, rechnerseitigen SUB-D-Stecker - öffnen und überprüfen, ob PIN 16 angeschlossen ist. Ist dies nicht der Fall, muß Pin 16 mit einem der Anschlüsse 19 - 30 (alle GND) verbunden werden. Es empfiehlt sich beim Löten den Stecker auch rechnerseitig abzuziehen.
 

Nun steht einer Programmierung der Datenleitungen nichts mehr im Wege. z. B:
Programm Lauflicht 1

10 REM ****************** LAUFLI1.BAS ***********************
20 OUT 888,0:REM Alle LED's aus
30 FOR X = 0 TO 7
50 OUT 888,2^X: REM LED Nummer X einschalten
52 FOR S = 1 TO 1000:NEXT:REM Warteschleife
55 NEXT
60 GOTO 20


Programm Lauflicht 2 - mit Rücklauf

10 REM ****************** LAUFLI2.BAS ***********************
20 OUT 888,0:REM Alle LED's aus
30 FOR X = 0 TO 7
50 OUT 888,2^X: REM LED Nummer X einschalten
52 FOR S = 1 TO 1000:NEXT:REM Warteschleife
55 NEXT
60 FOR Y = 7 TO 0 STEP -1
70 OUT 888,2^Y
80 FOR S = 1 TO 1000:NEXT
90 NEXT
95 GOTO 20
 
 

Programm Ampelschaltung:

100 REM ******************** AMPEL.BAS ******************
110 REM * LED's an D0 ... D5 *
120 REM * *
130 REM ****************************************************
140 CLS: WIDTH 40: LOCATE 10,12,0:PRINT "Ampel in Betrieb"
150 KEY OFF: LOCATE 23,8,0:PRINT"(Ende: Beliebige Taste)"
160 REM -------------------------------------------------
170 REM Definition der Schaltzustände
180 :
190 ROT1=1:GELB1=2:GRUEN1=4:ROT2=8:GELB2=16:GRUEN2=32
200 DR=888:SR =889:OUT DR,0
210 IF INKEY$<>"" THEN 450
220 REM -------------------------------------------------
230 REM Auf Dunkelheit überprüfen
240 :
250 REM if (inp(sr)and 16)=16 then 150:REM SELECT
260 REM -------------------------------------------------
270 REM Normal-Schaltung
280 :
290 OUT DR, ROT1+ROT2 :FOR I = 0 TO 2000:NEXT
300 OUT DR, ROT1+GELB1+ROT2 :FOR I = 0 TO 4000:NEXT
310 OUT DR, GRUEN1+ROT2 :FOR I = 0 TO 36000!:NEXT
320 OUT DR, GELB1+ROT2 :FOR I = 0 TO 4000:NEXT
330 OUT DR, ROT2+ROT1 :FOR I = 0 TO 2000:NEXT
340 OUT DR, ROT2+GELB2+ROT1 :FOR I = 0 TO 4000:NEXT
350 OUT DR, GRUEN2+ROT1 :FOR I = 0 TO 36000!:NEXT
360 OUT DR, ROT2+GELB2 :FOR I = 0 TO 4000:NEXT
380 GOTO 210
390 REM -------------------------------------------------
400 REM Blinkschaltung (Nachtschaltung)
410 :
420 OUT DR,GELB1 + GELB2:FOR I= 0 TO 4000:NEXT
430 OUT DR,0: FOR I= 0 TO 4000:NEXT: GOTO 210
440 REM -------------------------------------------------
450 OUT DR,0: KEY ON: WIDTH 80

Durch Entfernen des REM-Befehls in Zeile 250 und Zwischenschalten eines Photowiderstands (Cds) oder eines Phototransistors zwischen SELECT und GROUND geht das Programm bei "Nacht" in eine Blinkschaltung der als gelb definierten LED's über.

Hinweis: Die Warteschleifen müssen an die Taktgeschwindigkeit des Rechners angepasst werden.
 

Messen von Zeiten mit dem PC

Die Grundlage für alle Zeitmessungen mit dem PC stellt der Timer-Baustein 8253 dar. Die von diesem Baustein gesteuerten Zeit-Intervalle können auf drei verschiedene Arten für Meßvorgänge benutzt werden.

Die einfachste Möglichkeit besteht software-mäßig über die TIMER - bzw. TIME$ - Befehle. Hier ist die Genauigkeit nicht besonders groß, da nur Zeitintervalle in Vielfachen einer Sekunde zur Verfügung stehen. Eine Stoppuhr läßt sich leicht programmieren wobei mit SELECT ein- bzw. ausgeschaltet wird. Dies ist auch direkt mit dem Drucker möglich (Select-Taste - Drucker muß natürlich eingeschaltet sein).

5 REM ******************** STOPUHR1.BAS *******************
10 CLS:TIME$ = "00:00:00"
20 IF (INP(889) AND 16) = 16 THEN 20
40 LOCATE 10,40:PRINT TIME$
50 GOTO 20
Eine genauere Zeitmessung ist durch Auslesen des 32-Bit-Wertes der Systemuhr möglich. Die 4 Bytes liegen an den Adressen 0040:006C bis 0040:006F. Das niederwertigste Byte (6C) ändert sich alle 1/18,2 s um den Wert 1. Entsprechend "zählen die anderen Bytes weiter".  
10 REM ******************** STOPUHR2.BAS *******************
20 CLS
30 DEF SEG = &H40
40 IF (INP(889) AND 16) = 16 THEN 40 :REM Beginn der Messung?
50 TIME$ ="00:00:00":REM Uhr auf Null stellen
60 IF (INP(889) AND 16) = 16 THEN 60 :REM Ende der Messung?
70 T1=PEEK(&H6C)*.054945:T2=PEEK(&H6D)*14.06592:REM 6CHex und 6DHex lesen
80 LOCATE 14,35,0:PRINT T1+T2
90 GOTO 60
Die genaueste Zeitmessung besteht darin, die E/A-Adressen 40 - 43 Hex und das Systemstatusregister 62 Hex zu benutzen (040 Counter0, 041 Counter1, 042 Counter2, 043 Mode Register). Mit einem entsprechendem Maschinenprogramm können Zeiten als Vielfache des Intervall 1/1,193 µs gemessen werden. Allerdings müssen auch die Taktzyklen des Maschinenprogramms sowie die Schaltzeiten der Meß-Sensoren berücksichtig werden. (vgl. H. Schmitt / W. Weber, Messen und Experimentieren)
 

Beispiel: Die Momentangeschwindigkeit von Spielzeugloks soll ermittelt werden.

Auf der Lok (Anhänger) wird ein Streifen aus dunklem Karton angebracht. Eine Gabellichtschranke wird so justiert, daß der Streifen genau durch die Öffnung der Lichtschranke "fährt". Aus der Länge des Streifens und der Verdunklungsdauer kann die Geschwindigkeit ermittelt werden.

Als Gabellichtschranke verwendet man den Baustein CNY 37. Bei diesem Bauteil handelt es sich um einen besonders geformten Optokoppler, bei dem die (IR)-Lichtstrecke zwischen LED und Phototransistor herausgeführt ist und damit durch Papierfähnchen oder Zahnräder unterbrochen werden kann.

Es empfiehlt sich die Lichtschranke fest auf einer Platine anzubringen. (Anlage 4c)
1 Gabellichtschranke CNY 37 184250 
2 Buchsen, teilisoliert rot 733814
1 Buchsen, teilisoliert grün 733857 
1 Buchsen, teilisoliert schwarz  730661
4 Bananen- u. Laborstecker rot 733822
2 Bananen- u. Laborstecker schw. 731196 
Büschelstecker grün 730670
1 Experimentierplatte Lötpunkt 495204 
1 Widerstand 56 Ohm  402397

Mit folgendem Programm wird die jeweilige Geschwindigkeit der Loks ermittelt:.

100 REM *********************** GESCHWIN.BAS *********************
110 REM * Messung der Geschwindigkeit - mit Gabellichtschranke *
120 REM **********************************************************
130 DEF SEG = &H40
140 CLS:KEY OFF:WIDTH 40:LOCATE 3,1,0
150 PRINT"Breite des Verdunklungsstreifens (in cm) "
160 LOCATE 5,35,0:INPUT BR
170 LOCATE 10,15,0:PRINT "Fertig!!!"
180 REM ********************** STOPUHR2.BAS **********************
190 REM Anschluß an ACKNLG
200 IF (INP(889) AND 64) = 0 THEN 200
210 TIME$ ="00:00:00"
220 IF (INP(889) AND 64) = 0 THEN 260
230 T1=PEEK(&H6C)*.054945:T2=PEEK(&H6D)*14.06592
240 LOCATE 14,10,0:PRINT T1+T2
250 GOTO 220
260 REM ********************** Berechnung ************************
270 LOCATE 14,20,0:PRINT "Sekunden"
280 LET T = T1 + T2
290 LET V = BR/T :REM Geschwindigkeit in cm/s
300 LET VM = V/100 :REM Geschwindigkeit in m/s
310 LET VK=VM*3.6 :REM Geschwindigkeit in km/h
315 REM ********************** Ausgabe *************************
320 LOCATE 15,12,0:PRINT USING "####.##";V;:PRINT" cm/s"
330 LOCATE 16,12,0:PRINT USING "####.##";VM;:PRINT" m/s"
340 LOCATE 17,12,0:PRINT USING "####.##";VK;:PRINT" km/h"
350 IF INKEY$ = "" THEN 350
360 WIDTH 80
Gefahrloses Messen und Steuern durch Optokoppler

Optokoppler bieten die größte Sicherheit bei Schaltungen mit der prallelen Schnittstelle. Der Zweifach-Optokopler ILD 74 erlaubt den Anschuß von 2 getrennten Steuerkreisen an die Daten-Kanäle D0...D7. Er kostet ca.4,50 DM (z. B. Firma Conrad - Bestellnummer 183610). Der Anschluß der Optokoppler-LED an die Datenkanäle D0...D7 ist ohne Schutzwiderstand möglich.

Die Schaltung des Optokopplers bei Verwendung der Eingänge SELECT, PE und ACKNLG zeigt die Abbildung.


Mit PRINT INP(889) AND 2^4 (bzw. 2^5 bzw. 2^6) kann geprüft werden, ob SELECT (bzw. PE bzw. ACKNLG) durch den durchgeschalteten Phototransistor bereits auf "Low" gezogen wurden. (Vergleiche Zeile 220 GESCHWIN.BAS - Gabellichtschranke). Messen und Steuern mit dem PC - Literaturliste
 Herbert Bernstein, Hardware-Handbuch PC-XT-AT und Kompatible, München
J. W. Coffron, Programmierung des 8086/8088, Düsseldorf
Dieter Smode, MS-DOS für Insider, München
H. Schmidt/ W. Weber, Messen und Experimentieren, Bonn
Rüdeger Baumann, Strukturiertes Programmieren mit Basic, Stuttgart
Gerd Graf, Der mc-modular-AT, mc 11/1987
Michael Seyler, Der PC - glasklar, DOS International, 8/87-1/88
N. N., Messen, Steuern, Regeln, DOS International, 4/88
Dieter Adam/Hans-Peter Kröber, Parallel-Schnittstelle als Ein-/Ausgabeport, DOS International, 4/88
N. N., Damit die Verbindung klappt, Chip 5/86
Jochen Ruhland, Die parallel Schnittstelle, Chip 3/89
 
Startseite: Messen-Steuern - Regeln
zurück zur vorhergenden Seite