15.02.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN
  • 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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!