Pfad: Home => AVR-DE => Anwendungen => Stoppuhren mit AVR => Stoppuhr ATtiny24
Stoppuhr_tn24 AVR-Anwendungen

Stoppuhr mit ATtiny24 in Assembler
Logo

Stoppuhr mit einem ATtiny24

Anschluss- und Darstellungsschema Stoppuhr tn24 Hier wird eine Stopphr mit folgenden Features beschrieben:

1 Hardware

Schaltbild Stoppuhr tn24 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: Die folgenden Eigenschaften bestimmen das Software-Design:

2.1 Leeren des Speichers

Leeren des Speicherbereichs im 10 ms-Betrieb Leeren des Speicherbereichs im 1 ms-Betrieb 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
  1. die aktuelle Zeit von den Registern ins SRAM geschrieben,
  2. die Zeiten um vier bzw. fünf Bytes nach oben geschoben (Shift), und
  3. die Zeiten in den Zeilen 2 bis 4 der LCD ausgegeben.

2.2.1 Verschieben der Werte

Verschieben der gespeicherten Zeiten, 4 Bytes Verschieben der gespeicherten Zeiten, 5 Bytes Das Verschieben muss von hinten nach vorne erfolgen und drei Mal vier bzw. fünf Bytes umfassen.

Fliessschema Verschieben der gespeicherten Zeiten, 4 Bytes Fliessschema Verschieben der gespeicherten Zeiten, 5 Bytes 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

Display Zeilenausgabe Bei der Anzeige der drei Zeilen wird so vorgegangen:
  1. Die Zeilenadresse auf der LCD wird aus dem Register ZH eingestellt, mit der Spaltenadresse jeweils auf der Anzeigeadresse der Stunden-Zehner.
  2. Die SRAM-Adresse der zweiten Zeit ist in X eingestellt.
  3. 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.

3 Software

Die Software in der 1 ms-Version ist in Assembler geschrieben und kann hier im asm-Format heruntergeladen werden. Zum Assemblieren wird noch die modifizierte LCD-Include-Datei benötigt.

Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte über das Kommentarformular an mich.

Zum Anfang dieser Seite

©2018 by http://www.avr-asm-tutorial.net