Hier wird eine Stopphr mit folgenden Features beschrieben:
interner Taktgeber mit 10% Genauigkeit, auf höhere
Genauigkeit justierbar, keine externen Komponenten,
vierzeilige LCD zur Anzeige von Laufzeit und drei
gespeicherten Zeiten,
vier Tasten (Reset, Start, Stop, Store),
einstellbare Software-Prellunterdrückung,
arbeitet mit der ATtiny24-LCD-Standardplatine
tn24_lcd und
der zugehörigen LCD-Include-Datei,
Auflösung Timer 10 ms.
1 Hardware
Der Schaltungsaufwand ist minimal: an die Standardplatine
tn24_lcd werden
über die Breadboard-Schnittstelle einfach die vier Tasten
angeschlossen.
Die Stromversorgung für die Schaltung erfolgt entweder
aus drei 1,5V Batterien oder aus vier 1,2V-Akkuzellen, um mit
einer Standard-LCD mit 5V Versorgungsspannung arbeiten zu
können.
2 Software-Struktur
Zwei verschiedene Versionen der Software sind möglich:
10 ms-Version: Zeitmessung im 10 ms-Rhytmus,
die Zeit wird in vier Registern gebildet,
1 ms-Version: Messung im 1 ms-Rhytmus, die
Zeit wird in fünf Registern verwaltet.
Die folgenden Eigenschaften bestimmen das Software-Design:
Takt: Umstellung des internen RC-Taktes auf 4 MHz
durch Umstellung von CLKPR auf zwei,
Zeittakt: Teilen des Prozessortakts mit dem Timer
TC1 durch 40.000 (10 ms) bzw. durch 4.000
(1 ms) und CTC-Betrieb mit Compare A und Compare
Match Interrupt.
Tasten: Einlesen und Auswerten der Tasten alle 10 bzw.
1 ms, Prellunterdrückung nach jedem erkannten
Tastendruck.
Zeitmessung: Wenn die Stoppuhr gestartet ist,
Erhöhung der Zeit in vier bzw. fünf Registern,
Anzeige der geänderten Zeiten auf der LCD,
Speicherung: Schreiben des Zeitstandes in das SRAM,
Verschieben um vier bzw. fünf Stellen nach unten
("Shift"), Anzeige der gespeicherten Zeiten.
2.1 Leeren des Speichers
Zu Beginn und beim Reset muss der gesamte Speicherbereich
entleert werden. Das geschieht, indem der Speicherbereich
von Anfang bis Ende mit dem Registerinhalt von R16 (Null)
überschrieben wird. Das erledigt eine Schleife, mit
der mit der Instruktion st Z+,R16 der Wert in das
SRAM-Byte geschrieben wird und danach der Zeiger Z
automatisch um Eins erhöht wird. Ist das LSB des
Zeigers nach der Erhöhung jenseits des benutzten
Speicherbereichs, wird die Routine beendet. Beide Varianten
unterscheiden sich nur durch das Ende des Speicherbereichs.
2.2 Verschieben der Werte im Speicher
Wird die Store-Taste gedrückt, dann wird
die aktuelle Zeit von den Registern ins SRAM
geschrieben,
die Zeiten um vier bzw. fünf Bytes nach oben
geschoben (Shift), und
die Zeiten in den Zeilen 2 bis 4 der LCD ausgegeben.
2.2.1 Verschieben der Werte
Das Verschieben muss von hinten nach vorne erfolgen und
drei Mal vier bzw. fünf Bytes umfassen.
Es werden zwei Zeiger verwendet: X für die Adresse
an der das nächste Byte abgeholt wird, und Z für
die Zieladresse.
Der Ablauf verwendet eine Besonderheit des Instruktionssets
der AVR: mit ld R16,-X wird die Ladeadresse zuerst
erniedrigt und dann erst gelesen, mit st -Z,R16
die Zieladresse zuerst erniedrigt und dann erst geschrieben.
Dadurch beginnen die beiden Adressen um eine Position
häher, also oberhalb des Endes der Zeile 3 (X) und der
Zeile 4 (Z).
Diese Instruktion bietet beim absteigenden Verschieben immer
immense Vorteile, weil die Adressenminderung automatisch
erfolgt.
2.2.2 Anzeige der verschobenen Werte
Bei der Anzeige der drei Zeilen wird so vorgegangen:
Die Zeilenadresse auf der LCD wird aus dem Register
ZH eingestellt, mit der Spaltenadresse jeweils auf der
Anzeigeadresse der Stunden-Zehner.
Die SRAM-Adresse der zweiten Zeit ist in X eingestellt.
Die Ausgabe der Zeit erfolgt so, dass zuerst die
Stunde mit ld R16,X+ eingelesen und als
zweistellige Dezimalzahl ausgegeben wird. Dann folgt ein
Doppelpunkt. Weiter geht es mit den Minuten und den
Sekunden (diesmal gefolgt von einem Komma). Danach
kommen noch die Centisekunden dran und, wenn der
1 ms-Modus eingestellt ist (direkte Ausgabe
als ASCII-Zeichen formatiert).
Durch die Verwendung von ld R16,X+ steht das
X-Register nach Ausgabe der Zeit automatisch auf der
richtigen Adresse für die nächste Zeilenausgabe.
Sind alle drei Zeilen ausgegeben (Zeilenadresse in ZH
nach Erhöhung größer 3), kann die Ausgabe
beendet werden.