Das Magazin für Funk Elektronik · Computer - FTP Directory Listing
Das Magazin für Funk Elektronik · Computer - FTP Directory Listing
Das Magazin für Funk Elektronik · Computer - FTP Directory Listing
- Keine Tags gefunden...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
etrachtet werden. Weitere Hinweise zum<br />
8253 bzw. 8254 findet der Interessierte in<br />
[2]. Kennzeichnend <strong>für</strong> Mode 0 ist eine Unterbrechungsanforderung<br />
beim Nulldurchgang<br />
des Zählers. Nach Ausgabe des Steuerwortes<br />
liegt der Ausgang des Zählers zunächst<br />
auf Low-Potential. Wird die Zeitkonstante<br />
in den betreffenden Zähler geschrieben<br />
und der Zählvorgang gestartet,<br />
bleibt der Ausgang des Zählers weiterhin<br />
auf Low. Der Zähler zählt jetzt mit der Frequenz<br />
des Signals am CLK-Eingang gegen<br />
Null. Sobald dieser Wert erreicht ist, schaltet<br />
der Ausgang des betreffenden Kanals<br />
auf High. <strong>Das</strong> Highpotential am Zählerausgang<br />
bleibt bis zu einem neuen Start erhalten.<br />
Mit der Flanke von Low nach High<br />
kann der 8253 am Eingang Bit 5 des Portes<br />
C des Parallelinterfaceschaltkreises 8255<br />
einen Interrupt auslösen.<br />
Getaktet wird der 8253 im PC mit einer<br />
Frequenz von 1,19 MHz. Die kleinste mögliche<br />
Zeitauflösung beträgt somit rund 833<br />
ns. Der Zählumfang beträgt 65 536 Perioden<br />
der Schwingung. Dieses sind 54,613<br />
ms. <strong>Das</strong> entspricht genau jenen 18,2 Hz,<br />
mit denen auch die interne Uhr des PC<br />
weitergestellt wird.<br />
■ Zeitmessung<br />
Wie weiter oben schon erwähnt, sollten die<br />
einzelnen Kanäle des Zählers nicht wild<br />
umprogrammiert werden. Insbesondere<br />
der einfache Weg, zwei Zähler hintereinanderzuschalten,<br />
scheidet aus, da die Kanäle<br />
0 und 1 des 8253 schon feste Aufgaben<br />
im PC haben. Ein anderer Weg zur<br />
Erhöhung des Zählumfanges besteht in der<br />
Nutzung eines Prozessorregisters, das die<br />
Anzahl der Nulldurchgänge zählt. Ein Doppelregister<br />
kann ebenfalls 65536 Werte repräsentieren.<br />
Damit ergibt sich zeitlich ein<br />
Gesamtzählumfang von ungefähr 59,65<br />
min. Diese knappe Stunde dürfte <strong>für</strong> die<br />
meisten „Kurzzeitmessungen“ eigentlich<br />
ausreichen.<br />
Der Zustand der zu überwachenden Einrichtung<br />
muß über einen Port überwacht<br />
werden. Da die Ein- und Ausgabeoperationen<br />
gewöhnlich nur in mehreren Prozessortakten<br />
abgearbeitet werden, kann dies<br />
dazu führen, daß eine Änderung des Portzustandes<br />
erst nach „längerer“ Zeit erkannt<br />
wird. Auf jeden Fall muß da<strong>für</strong> gesorgt<br />
werden, daß die Zeitmessung nicht durch<br />
andere Programme gestört wird. Insbesondere<br />
die Echtzeituhr kann hier viel Ärger<br />
bereiten. Aus diesem Grund werden gleich<br />
zu Anfang des Maschinenprogramms die<br />
Interrupts gesperrt. Der Zeitzähler <strong>für</strong> den<br />
höherwertigen Teil, das BX-Register, wird<br />
mit dem Wert Null initialisiert. <strong>Das</strong> Register<br />
DX adressiert den Gameport, über den<br />
die Eingangszustände ermittelt werden. Der<br />
Zählerkanal 2 wird als nächstes program-<br />
miert. Wie oben erwähnt, wird Mode 0 als<br />
Betriebsart gewählt. Um den höchstmöglichen<br />
Zeitbereich nutzen zu können, wird<br />
die Zeitkonstante 65535 in zwei Schritten<br />
geladen. Die duale Zählweise erhöht ebenfalls<br />
den Zählumfang.<br />
Der nächste Schritt besteht in der Registrierung<br />
des Pegelwechsels am Gameport.<br />
Diese drei Schritte (bei Marke M1 im Maschinenprogrammteil)<br />
benötigen „relativ“<br />
viel Zeit und begrenzen damit die kleinste<br />
meßbare Zeit. Wird ein Pegelwechsel registriert,<br />
startet der Zähler mit der Rückwärtszählung.<br />
Der Programmteil an Marke<br />
M3 kontrolliert, ob schon 55 ms abgelaufen<br />
sind. Ist dies nicht der Fall, erfolgt<br />
eine Kontrolle, ob die gesamte Meßzeit<br />
vielleicht schon abgelaufen ist.<br />
Sollte dies der Fall sein, werden der Lowund<br />
Highwert des Zählers ausgelesen und<br />
in zwei Speicherzellen zur weiteren Verarbeitung<br />
abgelegt. Bei einer längeren Meßzeit<br />
wird ständig der Nulldurchgang des<br />
Zählers und der Portzustand überwacht.<br />
Ist die Zeit länger als 55 ms, so erfolgt irgendwann<br />
der Nulldurchgang des Zählers.<br />
In diesem Fall wird der Zähler neu geladen<br />
und wieder gestartet. Da die Zeit 55 ms<br />
überschreitet, wird das Register BX erhöht.<br />
Aus dem Stand von BX kann die Anzahl<br />
der 55-ms-Schritte zurückgewonnen<br />
werden.<br />
Diese Zahl wird ebenfalls in zwei weiteren<br />
Speicherzellen abgelegt. Ansonsten bewegt<br />
sich das Programm bis zum Ende der Zeitdauer<br />
in einer fortlaufenden Abfrage von<br />
Zählernull und Portzustand. Die maximal<br />
erfaßbare Zeit beträgt 59,65 min, also rund<br />
eine Stunde. Danach läuft das BX-Register<br />
PC<br />
über und die gemessene Zeit ist nicht mehr<br />
eindeutig feststellbar. Für längere Zeiten<br />
kann behelfsweise mit dem TIME-Befehl<br />
des BASIC-Interpreters die Start- und<br />
Stoppzeit bestimmt werden. Aus der Differenz<br />
und dem Inhalt des BX-Registers<br />
lassen sich dann auch Zeiten, die größer als<br />
eine Stunde sind, bestimmen.<br />
<strong>Das</strong> BASIC-Programm übernimmt die Verarbeitung<br />
der vom Maschinenprogramm gelieferten<br />
Werte. Hier wird berücksichtigt,<br />
daß der 8253 rückwärts zählt und die Werte<br />
von BX etwa 55 ms entsprechen. Je nach errechnetem<br />
Wert erfolgt die Ausgabe in µs,<br />
ms oder s.<br />
■ Programme<br />
Um eine Anpassung an eigene Problemstellungen<br />
zu ermöglichen, ist in den <strong>Listing</strong>s<br />
der Quellcode des Programms angegeben.<br />
Der Maschinenprogrammteil wurde auf das<br />
zum Verständnis nötige Maß gekürzt.<br />
Insbesondere die Marke M1 und M2 sind<br />
<strong>für</strong> mögliche Anpassungen interessant. Hier<br />
wird festgelegt, welcher Pegelwechsel den<br />
Anfang oder das Ende des Zeitabschnittes<br />
auslöst.<br />
<strong>Das</strong> BASIC-Programm ist lediglich zur Testung<br />
der Maschinenroutine gedacht. Nach<br />
dem Start mit RUN wird eine Messung der<br />
Zeitdauer eines Low-Signals am Gameport<br />
Bit 4 (erster digitaler Eingang) durchgeführt.<br />
Die gemessene Zeit wird auf dem Bildschirm<br />
ausgegeben.<br />
Literatur<br />
[1] Köhler, A.: Tonerzeugung mit dem PC. FUNK-<br />
AMATEUR 42 (1993), H. 2, S. 98<br />
[2] CMOS DIGITAL DATA BOOK. Firmenschrift<br />
Harris Corporation 1986<br />
BASIC-Programmteil <strong>für</strong> das Laden und den Start des Maschinenprogramms<br />
10 REM Programm zur Kurzzeitmessung mit dem Gameport<br />
20 REM Es kann max. eine Stunde mit 833 ns Aufloesung gemessen<br />
30 REM werden. Eingang ist der erste digitale Eingang Bit 4<br />
40 CLEAR, &H9000: MROUT = &H9000<br />
50 FOR I = 0 TO 79<br />
60 READ A<br />
70 POKE &H9000 + I,A<br />
80 NEXT I<br />
90 DATA &HFA,&H55,&HBA,&H01,&H02,&HBB,&H00,&H00,&HB0,&H40<br />
100 DATA &HE6,&H61,&HB0,&HB0,&HE6,&H43,&HB0,&HFF,&HE6,&H42<br />
110 DATA &HE6,&H42,&HEC,&H24,&H10,&H75,&HFB,&HB0,&H41,&HE6<br />
120 DATA &H61,&HE4,&H42,&HE4,&H42,&H24,&H80,&H75,&H0F,&HB0<br />
130 DATA &H40,&HE6,&H61,&HB0,&HFF,&HE6,&H42,&HE6,&H42,&HB0<br />
140 DATA &H41,&HE6,&H61,&H43,&HEC,&H24,&H10,&H74,&HE4,&HB0<br />
150 DATA &H40,&HE6,&H61,&HE4,&H42,&HA2,&H80,&H90,&HE4,&H42<br />
160 DATA &HA2,&H81,&H90,&H89,&H1E,&H82,&H90,&H5D,&HFB,&HCB<br />
170 CALL MROUT<br />
180 NT = (PEEK(&H9080)+256*PEEK(&H9081))<br />
190 ZL = 65535!-NT<br />
200 HT = (PEEK(&H9082)+256*PEEK(&H9083))<br />
205 PRINT HT,ZL : REM fuer die Testphase<br />
210 ZT = (ZL * .833333) +(HT * 54613.3333#)<br />
220 IF ZT > 1000000! THEN ZT = ZT/1000000! : GOTO 260<br />
230 IF ZT > 1000 THEN ZT = ZT/1000 : GOTO 250<br />
240 PRINT „Zeit : „;ZT;“us“ : GOTO 270<br />
250 PRINT „Zeit : „;ZT;“ms“ : GOTO 270<br />
260 PRINT „Zeit : „;ZT;“ s“<br />
270 END<br />
FA 11/95 • 1183