Pfad: Home => AVR-Übersicht => Anwendungen => Digitaluhr
Digitaluhr

Digitaluhr mit ATmega16


Diese Anwendung eines AVR beschreibt eine Digitaluhr mit 7-Segment-Uhrzeit- und Alarmanzeige mit einem ATmega16. Die Digitaluhr hat folgende Eigenschaften:

0 Inhalt

1 Hardware

1.1 Prozessor-Hardware

Schaltbild Prozessor

Alternativ: Schaltbild im PDF- Format

Die Hardware besteht aus Außerdem ist noch die Spannungsversorgung mit eingezeichnet.

Bei Ausfall der Netzversorgung übernimmt der Akku die Versorgung der Schaltung, außer dem Display werden alle Funktionen der Uhr weiter betrieben.

Zum Inhaltsverzeichnis

1.2 Display-Hardware

Schaltbild Display

Alternativ: Schaltbild im PDF- Format

Die Display-Hardware besteht aus Die Kathoden der Anzeigen für die Uhrzeit sind miteinander verbunden. Die Strombegrenzungswiderstände sind so bemessen, dass Strom gespart wird. Für größere Helligkeit können anstelle 220 auch 100Ω-Widerstände eingebaut werden.

Die Kathoden der Weckzeit-Anzeigen sind ebenfalls verbunden und über Strombegrenzungswiderstände an die Steckerleiste geführt.

Die Anschlüsse der Anodentreiber sind separat an die Steckerleiste geführt und werden erst an den Treibertransistoren auf der Prozessorplatine miteinander verbunden.

Zum Inhaltsverzeichnis

2 Bedienung der Tasten

Beim Einschalten ist die Uhrzeit und die Weckzeit auf 00:00 eingestellt und der Alarm abgeschaltet.

In diesem Modus ist die Einstellung der Uhrzeit durch Drücken der roten Taste möglich. Die Stundenanzeige der Uhr zeigt den eingestellten Wert am Potentiometer zwischen 00 und 23 an. Durch Drücken der schwarzen Taste wird der Einstellvorgang vorzeitig abgebrochen und zur Anzeige der Uhrzeit zurückgekehrt. Durch Drücken der roten Taste wird der eingestellte Stundenwert in einen Zwischenspeicher übernommen und zur Einstellung der Minuten übergegangen. Das Potentiometer erlaubt nun die Einstellung von 00 bis 59 in der Minutenanzeige. Wird auch diese Einstellung mit der roten Taste übernommen, ist die Uhr fertig gestellt. Die beiden LEDs zwischen der Stunden- und Minutenanzeige blinken im Sekundentakt.

Die Einstellung der Weckzeit wird mit der weißen Taste eingeleitet. Die Anzeige erfolgt dabei auf dem kleinen Display. Nachdem Stunden und Minuten eingestellt und mit der weißen Taste abgeschlossen sind, wird die Weckzeit übernommen und der Alarm aktiviert. Die beiden LEDs zwischen der Stunden- und Minutenanzeige blinken bei aktiviertem Alarm im Sekundentakt.

Die Alarmierung kann mit der schwarzen Taste aktiviert bzw. deaktiviert werden. Bei Aktivierung blinken die LEDs. Im aktivierten Zustand ist die Einstellung von Uhr- und Weckzeit blockiert.

Ist die Weckzeit erreicht, wird der Alarm durch Abspielen der gespeicherten Melodie ausgelöst. Dieser wiederholt sich, bis das Wecken mit der schwarzen Taste abgestellt wird. Durch Drücken der roten Taste wird die Weckzeit um jeweils fünf Minuten erhöht (Snooze-Funktion). Beim Deaktivieren wird die ursprünglich eingestellte Weckzeit (ohne Snooze-Zuschlag) wieder hergestellt.

Zum Inhaltsverzeichnis

3 Software

3.1 Software Source

Die Software für den Timer ist im HTML-Format oder als Assembler-Quellcode verfügbar.

Der Code funktioniert folgendermaßen:
  1. Anzeigen und Anzeigenmodi
  2. Display Multiplex
  3. Display dimmen
  4. Uhrzeit und Alarm
  5. Taster
  6. AD-Wandlung
  7. Weckalarm
Zum Inhaltsverzeichnis

3.2 Melodienprogrammierung

Die Programmierung von Melodien erfolgt folgendermaßen:
  1. Die Melodie ist als Tabelle im EEPROM-Speicher abgelegt.
  2. Jede Note belegt zwei Speicherplätze: die erste kodiert die Tonhöe und ist als Teilerrate für den Timer im CTC-Mode angegeben, die zweite gibt die Tondauer an und ist als Anzahl Timerdurchläufe, geteilt durch 32, angegeben.
  3. Sie beginnt an der Adresse 0000 im EEPROM und endet mit der Kombination 0,0 als Endezeichen.
  4. Da der ATmega16 512 Byte EEPROM mitbringt, kann die Melodie maximal 255 Noten umfassen (512 / 2 - 1).
  5. Die Kodierung im Quellcode beginnt mit "e;.eseg"e;. Die Notentabelle für die Tonleiter reicht von E2 (659 Hz) bis C5 (4186 Hz), sie sind als Konstanten cfxx definiert.
  6. Für die einzelnen Noten sind die CTC-Werte als Konstanten ccxx berechnet.
  7. Die Dauer des Tons als Anzahl CTC-Durchläufe sind als Konstanten cdxx so berechnet, dass für alle Töne zulässige Werte als Byte resultieren.
  8. Aus diesen Konstanten ccxx und cdxx wird die Musiktabelle zusammengestellt (Zeilen mit "e;.db"e; am Ende des Sourcecodes).
  9. Das beim Assemblieren des Quellcodes erzeugte EEPROM-Hex-File "e;digiclock.eep"e; muss nach dem Flashen des Prozessors in das EEPROM geschrieben werden.
Die Melodie kann jederzeit separat umprogrammiert werden.

Zum Inhaltsverzeichnis

3.3 Fuse-Einstellung

Fuse-Einstellung ACHTUNG! Frische ATmega16 sind intern auf den internen RC-Generator eingestellt. Nach dem Schreiben des Flash und vor der Verwendung muss der ATmega16 durch Umprogrammieren der Fuses auf den externen Quarz eingestellt werden. Bei Umstellung der Fuse muss der ATmega mit einem externen Quarz bestückt sein, da sonst ein Abbruch des Brennvorgangs und Fehlermeldungen resultieren. Am besten in der Schaltung selbst die Fuse umprogrammieren!

Die Fuses "SUT_CKSEL" (auf External Crystal/Resonator Medium Frequency"), "JTAGEN" und "EESAVE" sind entsprechend dem Bild zu ändern.

Zum Inhaltsverzeichnis

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