4.5 Zeitgeber-/Zähler-Bausteine
Durch ihren Namen wird bereits auf die Doppelfunktion der Zeitgeber-/Zähler-Bausteine in Mikrorechner-Systemen hingewiesen: Einerseits dienen sie zur Erzeugung bzw. zur Messung von Zeitfunktionen unterschiedlichster Art, andererseits werden sie zum Zählen bestimmter Ereignisse verwendet. Sie werden im englischen Sprachgebrauch als Programmable Interval Timer (PIT) oder Programmable Timer/Counter Module (PTM) bezeichnet. Genauer betrachtet, werden diese Bausteine z.B. eingesetzt als:
- Impulsgenerator, der Einzelimpulse programmierbarer, konstanter Länge ausgibt. Als Spezialfall gehört dazu die Ausgabe von Einzelimpulsen, deren Dauer derjenigen einer Systemtakt-Schwingung entspricht. Diese Impulse werden insbesondere als Übernahmesignale (Strobe) zur Triggerung von Registern verwendet.
- Taktgenerator, der digitale Schwingungen mit beliebig programmierbarem Impuls-Pause-Verhältnis erzeugt. Dazu gehören insbesondere:
- Rechtecksignale mit gleich langer Impuls- und Pausendauer (Square Wave), die als Taktsignale für andere Systemkomponenten gebraucht werden.
- kurze periodische Interrupt- bzw. Trigger-Impulse mit einer programmierbaren Rate, die z.B. als Schaltimpulse einer Echtzeit-Uhr oder als Zeitscheiben-Signal in Multitasking-Betriebssystemen verwendet werden.
- Ereigniszähler, der externe, asynchron oder synchron auftretende Signale zählt.
- Zeit-Meßschaltung zur Ermittlung der Schwingungsdauer oder der Impulsdauer externer digitaler Signale, insbesondere auch zur Messung der Dauer eines abgelaufenen Zeitintervalls.
Auf weitere, komplexere Funktionen von Zeitgeber-/Zähler-Einheiten, wie sie insbesondere in Mikrocontrollern implementiert sind, können wir im Rahmen dieses Kurses nicht eingehen.
4.5.1 Prinzipieller Aufbau eines Zeitgeber-/Zähler-Bausteins
Bevor auf die Ausführung dieser vielfältigen Funktionen näher eingegangen wird, soll zunächst der Aufbau eines Zeitgeber-/Zähler-Bausteins beschrieben werden. Dieser ist im Bild 4.5-1 schematisch dargestellt. Dabei wurde der Einfachheit halber nur eine Ausführungseinheit gezeichnet, die wir abkürzend als Timer bezeichnen wollen. Technisch realisierte Bausteine enthalten in der Regel 3 bis 5 unabhängig voneinander zu betreibende Timer.
Die Funktion der Bausteinsteuerung, des (nicht gezeichneten) internen Steuerbusses, des Datenbuspuffers sowie der Anschlüsse zum Prozessor wurde bereits bei anderen Bausteinen beschrieben, so daß hier nicht mehr darauf eingegangen werden muß. Zu erwähnen ist lediglich, daß einige Bausteine sowohl mit dem Systemtakt als auch mit einem eigenen, Quarz-stabilisierten Takt angesteuert werden können.
Die Hauptkomponente des Timers wird von einem synchronen Binärzähler gebildet, dessen Länge typischerweise zwischen 16 und 32 bit liegt. Der Zähler reduziert die oben beschriebene Erzeugung von Zeitfunktionen im wesentlichen auf die Erzeugung eines Zeitintervalls bestimmter Länge. Dazu wird er zunächst mit einem Anfangswert (AW) geladen, der proportional zur gewünschten Intervallänge ist. Der Proportionalitätsfaktor wird durch die Dauer eines Zählertaktimpulses vorgegeben. Der Zählvorgang wird softwaremäßig durch ein spezielles Steuerwort des Prozessors oder hardwaremäßig durch andere Bedingungen gestartet, die weiter unten dargestellt werden. Dabei steht während des ersten Zähltaktes im Zähler üblicherweise noch der vorgegebene Anfangswert. Mit jedem weiteren Taktimpuls wird danach sein Wert um 1 dekrementiert, bis er den Zustand '0' erreicht. (Auf die Erzeugung des Zählertaktes werden wir weiter unten eingehen.) Wenn dieser Zustand erreicht ist, wird ein Meldesignal zur Bausteinsteuerung generiert. Als Reaktion darauf setzt die Steuerung ein bestimmtes Bit im Statusregister. Wahlweise kann sie zusätzlich eine Interruptanforderung an den Prozessor stellen oder nicht. Der Zählvorgang vom Anfangswert AW bis zum Endwert 0 wird im weiteren Zählzyklus genannt.

Bild 4.5-1: Aufbau eines Zeitgeber-/Zähler-Bausteins
Komplexere Timer bieten die Möglichkeit, wahlweise den Zähler zu inkrementieren oder zu dekrementieren. Außerdem kann bei ihnen der Vergleich des Zählerzustandes nicht nur mit dem Nullzustand, sondern mit einem beliebigen, in einem besonderen Register abgespeicherten Wert durchgeführt werden.
Der Anfangswert AW wird vom µP durch einen Schreibbefehl über den Datenbus in ein Auffangregister übertragen. Zu Beginn jedes Zählzyklus wird er daraus in den Zähler geladen. Dieser Vorgang wird
Initialisierung des Zählers genannt. Für mehrfach sich wiederholende Zählzyklen mit gleichem Anfangswert muß der Prozessor diesen Wert daher nur ein einziges Mal in das Auffangregister einschreiben. Nach jedem Zählzyklus wird dann die erforderliche erneute Initialisierung des Zählers entweder automatisch bei Erreichen des Endstandes '0' oder durch das Vorliegen einer der zum Schluß des Abschnittes beschriebenen Startbedingungen ausgelöst.
Zu jedem Zeitpunkt kann der Prozessor den aktuellen Zählerstand abfragen. Prinzipiell könnte dies z.B. dadurch geschehen, daß durch einen Lesebefehl die Ausgänge des Zählers direkt auf den internen Datenbus geschaltet werden. Natürlich besteht dabei die Gefahr, daß sich während des Lesevorgangs der Zustand des Zählers ändert und deshalb ungültige Übergangsinformation ermittelt werden. Um dies zu vermeiden, kann zwar der Zählertakt kurzzeitig angehalten werden (vgl. die unten beschriebene Funktion des Gate-Einganges). Jedoch kommt es dann durch die dabei auftretende Verzögerung zu einer Verfälschung des Zählvorganges. Die meisten Timer besitzen deshalb ein Pufferregister, in das der augenblickliche Zählerstand zunächst transferiert wird. Je nach Realisierung des Timers kann dieser Transfer automatisch durch den Lesebefehl oder aber durch einen speziellen Befehl des Prozessors verursacht werden. Im letztgenannten Fall kann der Prozessor den Inhalt des Pufferregisters erst zu einem beliebigen späteren Zeitpunkt lesen.
Nun zur Erklärung der Zählertakt-Steuerung: Die Zähler
der meisten Timer-Bausteine können wahlweise durch den Systemtakt oder
einen externen Takt angesteuert werden. Durch einen Frequenzteiler (1:n) kann
der externe Takt häufig auf eine kleinere Taktrate heruntergesetzt werden.
Diese ist entweder fest vorgegeben oder sie kann (über das Steuerregister)
aus einer Palette von Frequenzen ausgewählt werden. Der Gate-Eingang
G besitzt eine doppelte Funktion. Einerseits wird durch ihn der Zähler
aktiviert bzw. deaktiviert, wenn der Baustein als Ereigniszähler oder zur
Erzeugung der oben beschriebenen Zeitfunktionen eingesetzt wird. Im letztgenannten
Fall wird das vom Baustein erzeugte digitale Zeitsignal über den Ausgang
OUT ausgegeben. Wird der Baustein jedoch als Zeit-Meßschaltung betrieben,
so muß an den Eingang Gate das auszumessende Signal angelegt werden.
4.5.2 Die verschiedenen Zählmodi
Die gestrichelte Linie, die im Bild 4.5-1 den Zähler und seine Register in zwei Hälften teilt, soll auf eine Besonderheit von 16-bit-Timern in Bausteinen mit einem 8-bit-Datenbus hinweisen. Bei diesen Bausteinen sind beide Timer-Register unerläßlich, da jedes 16-bit-Datum, also Anfangswert und aktueller Zählerstand, byteweise transportiert werden muß. Ohne Zwischenspeicherung bestünde bei beiden erwähnten Datentypen die Gefahr, daß sich zwischen den sequentiell ausgeführten Bytezugriffen der Zählerstand u.U. wesentlich ändert.
Timerdes eben beschriebenen Typs besitzen häufig neben dem oben beschriebenen
"normalen" 16-bit-Zählmodus noch eine weitere Zählart. Im
2 x 8-bit-Zählmodus werden das niederwertige Byte (LSB) sowie das höherwertige
Byte (MSB) des Zählers als zwei getrennte 8-bit-Zähler betrieben.
Der Zählertakt wird nur dem LSB-Zähler zugeführt. Immer dann,
wenn der zyklisch umlaufende LSB-Zähler den Zustand '0' erreicht, wird
er aus dem LSB-Byte des Auffangregisters neu initialisiert. Gleichzeitig wird
ein Übertragssignal erzeugt, durch das auch der MSB-Zähler um 1 dekrementiert
wird. Erst wenn beide Zähler den Wert 0 besitzen, ist ein Zählzyklus
beendet. Eine weitere Differenzierung der Zählmodi ergibt sich dadurch,
daß die Zähler einiger Bausteine wahlweise als Dualzähler oder
aber als BCD-Zähler (Binary Coded Decimal)
arbeiten können.
| Selbsttestaufgabe 4.5-1: (–>Lösungsvorschlag) |
|
Berechnen Sie für den Anfangswert $4749 die Länge des Zählzyklus für alle vier eben beschriebenen Zählmodi. Beachten Sie dabei, daß jeder Zählzyklus erst mit dem Ende des Nullzustandes abgeschlossen ist.
|
4.5.3 Das Programmiermodell
Zur Überwachung und Programmierung werden in der Regel für jeden Timer des Bausteins nur ein Statusregister sowie ein Steuerregister benötigt. Beide Register sind im Bild 4.5-2 skizziert. Ihre Bedeutung wird nun kurz beschrieben. Zum Programmiermodell gehören weiterhin die Auffangregister und Pufferregister des Timers, auf die hier aber nicht mehr eingegangen werden muß.

Bild 4.5-2: Die Register des Timers
Das Steuerregister
Um alle beschriebenen Arbeitsweisen zu berücksichtigen, hat das gezeichnete Steuerregister 10 Bits. Reale Bausteine bieten in der Regel nicht alle Möglichkeiten, so daß sie meist mit einem 8-bit-Steuerregister auskommen.
- Das RE-Bit (Reset) dient dem Prozessor zum Zurücksetzen des Zählers auf den im Auffangregister gespeicherten Anfangswert, also zur softwaremäßigen Initialisierung des Zählers.
- Das IE-Bit ist das Interrupt Enable Bit, das festlegt, ob ein Nulldurchgang des Zählers zu einer Interruptanforderung an den Prozessor führen soll oder nicht.
- Das OE-Bit (Output Enable) bestimmt, ob der Ausgang OUT des Timers aktiviert ist, d.h. ob er eine intern erzeugte Zeitfunktion ausgeben soll oder nicht.
- Die Bits M2, M1, M0 (Mode) wählen eine bestimmte Funktion aus dem am Anfang des Abschnitts aufgeführten möglichen Repertoire des Timers sowie die verschiedenen Möglichkeiten der Zähler-Initialisierung aus. Im folgenden werden diese Wahlmöglichkeiten noch ausführlich dargestellt.
- Durch die Bits CM1, CM0 (Counter Mode) wird eine der oben beschriebenen vier Zählvarianten selektiert: z.B. durch CM1 der 16- oder 2x8-bit-Zählmodus, durch CM0 der duale oder der BCD-Modus.
- Das CL-Bit (Clock) wählt zwischen dem Systemtakt und einem externen Takt als Zähltakt.
- Durch das PR-Bit (Prescaled) wird der Frequenzteiler des externen Taktes aktiviert oder ausgeschaltet. Durch weitere Bits kann häufig ein bestimmter Teilerfaktor (1:n) ausgewählt werden.
Das Statusregister
- Das IF-Bit ist das Interrupt Flag, das anzeigt, ob vom Timer eine Interruptanforderung gestellt wird. Bei mehreren Timern in einem Baustein erlaubt dieses Bit dem Prozessor, im Polling-Verfahren die Quelle des Unterbrechungswunsches festzustellen.
- Das OUT-Bit spiegelt zu jedem Zeitpunkt den aktuellen Zustand des "Ausgangssignals"
OUT wider, und zwar in der Form, wie er in der Ausgangssteuerung noch vor
dem eventuell nachfolgenden Tristate-Treiber vorliegt. Auch bei abgeschaltetem
Ausgang OUT kann der Prozessor somit softwaremäßig den augenblicklichen
Zustand des erzeugten digitalen Zeitsignals feststellen.
- Das IN-Bit zeigt an, ob der Zähler bereits mit dem Anfangswert initialisiert wurde, der als letzter vom Prozessor in das Auffangregister geschrieben wurde. Bei hardwaremäßiger Initialisierung, z.B. durch die Aktivierung des Gate-Eingangs, (wie sie weiter unten beschrieben wird,) kann der Prozessor an diesem Bit feststellen, ob der gewünschte Zählzyklus bereits begonnen wurde oder nicht.
- Die restlichen Bits 4 - 0 können z.B. einige Bits des Steuerregisters wiedergeben und vereinfachen so die Feststellung der Arbeitsweise des Bausteins durch den Prozessor.
4.5.4 Die Timer-Funktionen
Anhand von Diagrammen wollen wir nun zunächst die Erzeugung der oben angesprochenen Zeitfunktionen genauer beschreiben. Der jeweils in der ersten Zeile der Diagramme gezeichnete Takt kann, wie oben beschrieben, entweder der (interne) Systemtakt oder aber ein extern angelegter Takt sein. Der Zählerstand ist als Treppenfunktion über der Zeitachse dargestellt, wobei die Stufenhöhe gerade einem um 1 verminderten Zählerwert entspricht. Der Zählzyklus beginnt, wie oben beschrieben, mit der Initialisierung des Zählers. In den Bildern sind zwei von drei Möglichkeiten dazu angedeutet:
- Im ersten Fall, der als Hardware-Triggerung bezeichnet wird, wird die Initialisierung durch die ansteigende Flanke des Steuersignals am Eingang Gate ausgelöst. Diese Flanke kann asynchron zum Takt auftreten. Mit der ersten negativen Flanke des Taktes wird der Anfangswert AW aus dem Auffangregister in den Zähler geladen. Mit jedem Taktsignal wird der Zähler um 1 dekrementiert, was sich jeweils als Stufe in der Treppenfunktion des Zählerstandes darstellt.
- Im zweiten Fall, der Software-Triggerung genannt wird, wird die Initialisierung des Zählers durch einen Schreibzugriff auf das Auffangregister verursacht.
- Der dritte, im Bild nicht dargestellte Fall liegt vor, wenn der Zähler durch das Setzen des RE-Bits im Steuerregister initialisiert wird.
Nun kann es natürlich passieren, daß noch während des Ablaufes eines Zählzyklus eine erneute Initialisierung des Zählers durch eines der eben beschriebenen Verfahren veranlaßt wird. Dies ist im Bild 4.5-3 durch den gestrichelten Bereich des Gate-Signals angedeutet. Im letztgenannten Verfahren wird sich die Initialisierungsanforderung auf jeden Fall durchsetzen. Bei den beiden ersten Verfahren werden zwei Reaktionsmöglichkeiten realisiert:
- Wird der neuen Initialisierungsanforderung augenblicklich stattgegeben, so beginnt der Zählzyklus von neuem mit dem Anfangswert AW. In diesem Fall spricht man von einer retriggerbaren Signalerzeugung (retriggerable).
- Im anderen Fall wird auf jeden Fall zunächst der augenblickliche Zählzyklus beendet, bevor die erneute Anforderung berücksichtigt wird (non-retriggerable).
4.5.4.1 Der Timer als Impulsgenerator
Im Bild 4.5-3 sind drei verschiedene Einzelimpulsformen dargestellt, die durch einen Timer erzeugt werden können.

Bild 4.5-3: Der Timer als Impulsgenerator
Fall a)
Hier wird das Ausgangssignal OUT mit der Initialisierung des Zählers auf H-Potential gelegt. Dieser Zustand wird solange beibehalten, bis der Zähler den Wert 0 erreicht, also während des gesamten Zählzyklus T. Am Ausgang OUT erscheint somit ein positiver Impuls, dessen Länge IL durch den Anfangswert AW vorgegeben ist.
Fall b)
In diesem Fall wird der Einzelimpuls erst mit einer gewissen Verzögerung ausgegeben.
- Im Bild ist die Realisierung im 2´ 8-bit-Zählmodus
skizziert. Der Impuls erscheint genau dann am Ausgang OUT, wenn der LSB-Zähler
(s. Bild 4.5-1) seinen letzten Zyklus durchläuft. Daher bestimmt der
Anfangswert des LSB-Zählers die Länge IL des ausgegebenen positiven
Impulses. Die Länge V der Verzögerungszeit wird durch das Produkt
aus MSB- und LSB-Anfangswert bestimmt: IL = (AWLSB + 1) × T, V
= (AWMSB + 1) × IL.
- Einige Timer-Bausteine besitzen für jeden Zähler zwei Auffangregister. In diesem Fall kann sowohl der Wert der Impulsverzögerung V als auch die Impulslänge IL als Anfangswert in je ein Auffangregister geschrieben werden. Nach der Initialisierung wird nun zunächst der Zählzyklus mit dem ersten Anfangswert, danach automatisch ein weiterer Zyklus mit dem zweiten Anfangswert ausgeführt.
In den beschriebenen Fällen a) und b) spricht man vom Monoflop-Betrieb oder Single-Shot-Betrieb.
Fall c)
In diesem Fall wird dann, wenn der Zähler den Wert 0 erreicht, für genau eine Taktlänge ein positiver Impuls ausgegeben. Wie bereits gesagt, werden Impulse dieser Form typischerweise als Triggersignale (Strobe) benutzt, z.B. zur Aktivierung eines Pufferregisters.
Im Bild wurde unterstellt, daß nach Erreichen des Zählerstandes '0' der Zählvorgang gestoppt wird. Bei alternativen Realisierungen wird der Zählzyklus periodisch (bis zur nächsten Initialisierung) wiederholt. Wesentlich ist jedoch, daß auch in diesem Fall der Ausgangsimpuls nur ein einziges Mal während des ersten Zählzyklus erzeugt, der Ausgang OUT also während aller anderen Zyklen auf L-Potential gehalten wird.
Anwendungsbeispiel
Als Beispiel wollen wir zeigen, wie man einen Timer zur Überwachung der
zeitgerechten Abarbeitung eines Programmes durch den Prozessor einsetzen kann.
Schaltungen dieses Typs werden als Watch Dogs ("Wachhund")
bezeichnet. Der zeitliche Verlauf der Überwachung ist im Bild 4.5-4 dargestellt.
Zur Überwachung muß der Timer im retriggerbaren Strobe-Modus betrieben werden. Als Takt kann wahlweise der Systemtakt oder ein periodischer, externer Takt benutzt werden. Das Steuersignal am Gate-Eingang muß dauernd aktiv sein. Die Triggerung wird vom Prozessor entweder durch einen Schreibzugriff auf das Auffangregister oder durch das Setzen des Bits RE im Steuerregister (s.o.) vorgenommen. Der Programmierer muß dafür sorgen, daß diese Triggerbefehle möglichst gleichmäßig über die Laufzeit des Programms verteilt sind. Als Anfangswert (AW) wird ein Wert in das Auffangregister geschrieben, dessen zugeordneter Zählerzyklus den maximalen zeitlichen Abstand zwischen zwei Triggerbefehlen (etwas) übersteigt.
Im Bild ist gezeigt, wie der Zählzyklus durch jeden neuen Schreibbefehl
unterbrochen wird und unmittelbar danach ein neuer Zählzyklus gestartet
wird. Erst wenn der Abstand zwischen zwei Schreibbefehlen zu groß wird
oder kein weiterer Schreibbefehl folgt, kann der Zähler den Nullzustand
erreichen. Dies ist zum Beispiel dann der Fall, wenn der Prozessor, durch einen
Störimpuls verursacht, seinen Programmbereich verlassen hat, also "in
den Wald gelaufen ist".

Bild 4.5-4: Der Timer als Watch Dog
Im Augenblick des Nulldurchgangs wird am Ausgang OUT des Timers ein Strobe-Impuls erzeugt. Dieser wird üblicherweise auf den nicht maskierbaren Interrupteingang NMI des Prozessors gelegt. Er sorgt z.B. dafür, daß der µP eine Initialisierungsroutine zur geordneten Wiederaufnahme des abgebrochenen Programms ausführt.
Analog zum eben beschriebenen Einsatz kann der Timer natürlich auch zur Überwachung von externen Geräten eingesetzt werden. In diesem Fall müssen diese Geräte in regelmäßigen Abständen die (Re-)Triggerung des Zählers über den Steuereingang Gate vornehmen.
4.5.4.2 Der Timer als Taktgenerator
Kennzeichnend für die Funktion eines Timers als Taktgenerator ist, daß er periodische digitale Zeitsignale erzeugt. Dies wird dadurch erreicht, daß der Timer nach jedem Nulldurchgang des Zählers automatisch erneut initialisiert (getriggert) und dadurch der Zählvorgang kontinuierlich wiederholt wird (Continuous Mode). Im Bild 4.5-5 sind drei Möglichkeiten skizziert.
Fall a)
Hier erscheint nach der Triggerung am Ausgang OUT ein Signal mit variablem Impuls-Pausen-Verhältnis (Variable Duty Cycle). Die Erzeugung einer einzelnen Schwingung dieses Ausgangstaktes geschieht analog zu der oben beschriebenen Erzeugung eines Einzelimpulses. Der Unterschied besteht nun darin, daß mit jedem neuen Zählvorgang derselbe Impuls erzeugt wird.

Bild 4.5-5: Der Timer als Taktgenerator
Fall b)
Hier besitzt jede Taktschwingung gleich große Impuls- und Pausenlängen. Zur Erzeugung dieser Schwingung werden zwei Alternativen realisiert:
- Beim ersten Verfahren, das im Bild dargestellt ist, geht der Ausgang OUT mit jeder Initialisierung zunächst auf den L-Pegel. Er wechselt genau dann in den H-Zustand, wenn der Zählerstand den halben Anfangswert AW/2 erreicht hat.
- Beim zweiten Verfahren, das nicht dargestellt ist, wechselt der Ausgang mit jeder Initialisierung des Zählers seinen Zustand, so daß in jedem zweiten Zählzyklus der gleiche Ausgangszustand vorliegt.
Fall c)
In diesem Fall wird periodisch immer dann ein kurzer (negativer) Impuls ausgegeben,
wenn der Zähler im Nullzustand ist. Die Länge dieses Impulses stimmt
daher mit der Schwingungsdauer des Zähltaktes überein.
Die oben erwähnten Timer mit zwei Auffangregistern bieten häufig die
Möglichkeit, in Abhängigkeit vom Zustand ('0' bzw. '1') des Steuereingangs
Gate zwischen zwei Anfangswerten zu wählen. Dadurch ist die Erzeugung
von Ausgangssignalen möglich, die informationsabhängig zwischen zwei
verschiedenen Frequenzen umschalten. Dieses Verfahren wird mit Frequency Shift
Keying bezeichnet. Es wurde (früher) z.B. bei den Heimcomputern häufig
für die Aufzeichnung digitaler Daten auf einem Magnetbandgerät benutzt.
4.5.4.3 Der Timer als Ereigniszähler
Im Bild 4.5-6 ist der Einsatz eines Timers als Ereigniszähler
skizziert.

Bild 4.5-6: Der Timer als Ereigniszähler
In vielen Anwendungen treten die zu zählenden Ereignisse sporadisch und
aperiodisch auf. Deshalb ist im Bild 4.5-6 ein externes
Taktsignal mit willkürlicher Impulslage skizziert. (Natürlich können
in dieser Betriebsart aber auch der Systemtakt oder ein periodischer externer
Takt benutzt werden.)
Im Unterschied zu den bisher beschriebenen Einsatzarten wird hier durch die
ansteigende Flanke des Gate-Signals der Timer nicht getriggert. Dies
muß statt dessen irgendwann vorher durch Einschreiben eines Anfangswertes
in das Auffangregister oder durch das Setzen des RE-Bits im Steuerregister geschehen.
Das Gate-Signal dient nur zur Aktivierung bzw. Sperrung des Zählertaktes.
Daher kann es sich bei dem Wert AW im Bild 4.5-6 sowohl
um den Anfangswert des Zählzyklus als auch um den Endwert eines bereits
vorher durchgeführten Zählzyklus handeln, der vor Erreichen des Nullzustandes
durch das Rücksetzen des Gate-Signals abgebrochen wurde. Das heißt,
daß ohne erneute Triggerung des Timers jeder neue Zählzyklus mit
dem Zähler-Endstand des vorhergehenden fortgesetzt wird. Im Bild
4.5-6 wurde der Endwert, der vor der Rücknahme
des Gate-Signals erreicht wurde, mit EW bezeichnet. Die Differenz (AW-EW) gibt
die Anzahl der Ereignisse an, die während der aktiven Phase des Gate-Signals
aufgetreten sind. Nach Erreichen des Nullzustandes wird der Zähler deaktiviert
(disarmed) und über den Ausgang OUT bis zur nächsten Triggerung
ein H-Pegel ausgegeben. Dieser kann z.B. als Interruptsignal verwendet werden.
Der Prozessor kann dieses Signal als Übertragssignal benutzen, wenn mehr
Ereignisse gezählt werden sollen, als in einem Zählzyklus (maximaler
Länge) erfaßt werden können.
4.5.4.4 Der Timer als Zeitmesser
Nun soll beschrieben werden, wie man mit einem Timer die Dauer einer Vollschwingung
oder eines Impulses messen kann. Das zu vermessende Signal muß dazu an
den Steuereingang Gate angelegt werden.
Vorausgesetzt wird in beiden Fällen, daß der Zählzyklus des
Timers länger dauert als die zu ermittelnde Zeit. Bei Verwendung eines
externen Zähltaktes ist das relativ einfach dadurch zu erreichen, daß
man durch die Benutzung des Frequenzteilers (1:n) oder eines sehr niederfrequenten
Taktsignals die Dauer des Zählzyklus "in die Länge zieht".
Nur wenige Timer-Bausteine bieten jedoch auch einen Frequenzteiler für
den (internen) Systemtakt. Dessen Benutzung zur Zeitmessung verlangt deshalb
ein Programm, das zunächst zählt, wie viele vollständige Zählzyklen
maximal in die zu messende Schwingungs- bzw. Impulsdauer passen und dann das
eventuell übrig bleibende Restintervall nach den nun beschriebenen Verfahren
ausmißt.
4.5.4.4.1 Frequenzvergleich
Im Bild 4.5-7 ist zunächst die Bestimmung einer Schwingungsdauer
(TS) skizziert. Zunächst wird der Timer durch einen Schreibzugriff
auf sein Auffangregister initialisiert. Geeigneterweise wird dabei der größtmögliche
Zählerstand als Anfangswert gewählt: AW = $FF...FF. Mit der ersten
positiven Flanke des zu vermessenden digitalen Signals am Gate-Eingang
wird nun der Zählzyklus (im Zeitpunkt 0) gestartet. Die nächste positive
Flanke des Eingangssignals (im Zeitpunkt TS) stoppt den Zähler
und zeigt dadurch das Ende des Zählzyklus an. Der Zählerstand Z(TS)
zu diesem Zeitpunkt wird vom Prozessor zur Bestimmung der Schwingungsdauer nach
der folgenden Formel benutzt:
TS = [AW - Z(TS)] Taktzyklus .
Durch einen Interrupt kann der Prozessor über das Ende des Zählzyklus
unterrichtet werden. Durch die oben erwähnten Mode-Bits im Steuerwort
kann wahlweise ein Interrupt ausgelöst werden, wenn der Zählzyklus
größer oder kleiner als die Schwingungsdauer ist. Deshalb wird diese
Betriebsart als Frequenz-Vergleichsmodus (Frequency Comparison Mode)
bezeichnet.

Bild 4.5-7: Messung einer Schwingungsdauer
Anwendungsbeispiel
Auf die beschriebene Weise kann z.B. durch den Einsatz zweier Timer die Frequenz
eines gemeinsamen Signals an ihren Gate-Eingängen überprüft
werden, d.h. festgestellt werden, ob seine Schwingungsdauer zwischen zwei vorgegebenen
Grenzwerten liegt. Dies ist im Bild 4.5-7 gestrichelt
skizziert. Dazu wird der Timer 1 mit einem Anfangswert AW1 geladen,
der eine Zyklusdauer T1 > TS nach sich zieht, der Timer 2
hingegen mit einem Anfangswert AW2, für dessen Zykluszeit T2
< TS gilt. Nun programmiert man die Timer so, daß
Timer 1 einen Interrupt abgibt, wenn T1 < TS ist,
und Timer 2, wenn T2 > TS ist. Der Prozessor wird
dadurch stets dann unterbrochen, wenn die Schwingungsdauer außerhalb des
zulässigen Bereichs liegt. Für eine lückenlose Überwachung
der Eingangsfrequenz ist es natürlich unerläßlich, daß
durch jede positive Flanke am Gate-Eingang beide Timer erneut getriggert
werden.
4.5.4.4.2 Impulsbreitenvergleich
Im Bild 4.5-8 ist skizziert, wie mit Hilfe eines Timers die Dauer eines Impulses gemessen werden kann. Dabei kann es sich sowohl um den Impuls eines periodisch auftretenden Signals wie auch um ein einzelnes Zeitintervall handeln.
Von der Schwingungsdauermessung unterscheidet sich dieses Verfahren nur dadurch, daß das Stoppen des Zählers hier durch die negative Flanke des Eingangsimpulses hervorgerufen wird. Auch hier sind wieder zwei Möglichkeiten für die Auslösung eines Interrupts programmierbar: Dies kann wahlweise geschehen, wenn die Impulslänge TI größer bzw. kleiner als die Zyklusdauer T ist. Völlig analog zur Schwingungsdauermessung kann auch hier durch den Einsatz zweier Timer festgestellt werden, ob die Impulsdauer innerhalb vorgegebener Grenzen liegt. Dies ist im Bild 4.5-8 gestrichelt angedeutet.

Bild 4.5-8: Messung einer Impulsdauer
4.5.5 Fallstudie: Der Echtzeit-Uhren-Baustein HD146818
Einige universell einsetzbare Zeitgeber-/Zähler-Bausteine besitzen neben den beschriebenen Funktionen noch die Möglichkeit, sie als Echtzeit-Uhren zu verwenden. Dazu übernehmen sie insbesondere die folgenden Zusatzfunktionen:
- Erzeugung eines 1-Hz-Taktsignales,
- Umrechnung der Uhrzeit in Stunden, Minuten und Sekunden,
- Vergleich der aktuellen Uhrzeit mit einer einprogrammierten "Weckzeit"
und Auslösung eines "Alarms" bei festgestellter Übereinstimmung.
Echtzeit-Uhren-Bausteine übernehmen dazu noch die Fortschreibung des Datums (inklusive der Schaltjahr-Berücksichtigung). Im Bild 4.5-9 ist der Aufbau des Bausteins HD146818 der Firma Motorola in starker Vereinfachung skizziert, der millionenfach in älteren PCs zum Einsatz kam.
Der Baustein kann mit einer ganzen Reihe unterschiedlicher Quarzfrequenzen oder extern angelegter Systemtakte betrieben werden. Zur Steuerung anderer Bausteine wird die angelegte Frequenz über einen Taktausgang ausgegeben. Außerdem wird sie durch den programmierbaren Teiler (1:n) auf die 1-Hz-Frequenz heruntergesetzt, die der eigentlichen Ausführungseinheit, der Uhr, zugeführt wird.
Diese Uhr enthält in ihrem 10-stelligen Registersatz die aktuelle Uhrzeit
in Stunden (h), Minuten (min) und Sekunden (s), die programmierte Weckzeit in
den gleichen Einheiten, die Nummer (1 - 7) des Wochentages sowie das
Datum, bestehend aus Tag, Monat und Jahr. Der Prozessor hat über den Datenbus
Zugang zu diesem Registersatz und kann so jederzeit die Uhrzeit und das Datum
auslesen, andererseits aber auch andere Daten eintragen und so "die Uhr
oder den Wecker stellen". Das Weiterschalten der Uhrzeit und des Datums
wird durch die Schaltlogik vorgenommen. Diese liest im Sekundentakt die Uhrzeit
im Registersatz und erhöht sie jeweils um eine Sekunde. Dabei kann die
Uhrzeit wahlweise
- im Dualsystem oder dem BCD-System sowie
- im 24-Stunden- oder 12-Stunden-Modus verarbeitet werden.

Bild 4.5-9: Aufbau eines Echtzeit-Uhren-Bausteins
Die neu berechnete Uhrzeit wird dann mit der einprogrammierten Weckzeit verglichen. Stimmen beide überein, so kann ein Interrupt an den Prozessor ausgegeben werden, wenn dies in einem bestimmten Bit des Steuerregisters festgelegt wurde. Durch den Eintrag spezieller Bitkombinationen kann jede Komponente der Weckzeit zu einem don't care erklärt und dadurch beim Vergleich nicht berücksichtigt werden. Auf diese Weise sind z.B. Alarmauslösungen zu jeder Sekunde, zu jeder Minute oder zu jeder Stunde möglich.
Falls die Fortschreibung der Uhrzeit eine Datumsänderung zur Folge hat, wird auch diese von der Schaltlogik vorgenommen. Dabei werden Schaltjahre und die unterschiedliche Anzahl von Tagen pro Monat berücksichtigt. Auf das Programmiermodell dieses Bausteins soll hier nicht näher eingegangen werden.