myavr.CHKRonline.de

Informationen und Projekte Rund um die Mikrocontroller-Programmierung
von myAVR (ATmega8), STM32 (Cortex-M3/4) und Raspberry Pi (ARM11)

Der Autor

Christian KrügerChristian Krüger, ursprünglich aus dem Altenburger Land stammend, wohnt heute in Nürnberg. Nach seinem Studium der Informations­technik an der West­sächsischen Hochschule in Zwickau, ist er heute Software Entwickler für ein­gebettete Systeme. Seine Berufung fand er im Dienst für seine Kollegen als Teamleiter bei ISCUE.

Die größte Leidenschaft Christians ist es, die Schönheit unserer Welt einzufangen und weiter­zuerzählen. Dies gelingt ihm mit Hilfe seiner Kamera. Seine Fotos und Videos sind auf Instagram und seiner Webseite zu betrachten.

Für seine Zukunft freut sich Christian auf erinnerungs­würdige Reisen, begeisterungs­fähige Menschen und viele neue Erfahrungen.

CHKRonline.de

Facebook Profil

Twitter Profil

XING Profil

Meine myAVR Projekte

Watch Softwareuhr

Bei diesem Projekt handelt es sich um eine digitale Uhr, welche die Uhrzeit und das aktuelle Datum auf dem myAVR LCD-Addon ausgibt. Natürlich ließe sich ein Zeitsignal auch mit speziellen Zeitbausteinen oder über das DCF77 Zeitsignal bestimmen, aber für die meisten Anwendungen lohnt sich ein solcher Mehraufwand kaum.

Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen

Mit Hilfe des ATmega lässt sich die Zeit genauso gut bestimmen. Dabei kommt es vor allem darauf an, dass der Takt des Controllers korrekt ist. Es empfiehlt sich die Verwendung eines externen Quarzes. Die Uhr habe ich noch nicht auf eine maximale Genauigkeit getrimmt, da dafür längere Studien möglicher Abweichungen nötig wären.

Umsetzung

Die Sekunde lässt sich mit einem kleinen Programm einfach bestimmen. Bekannt ist, dass der Prozessor bei einem 3,6864 MHz Quarz etwa 3.686.400 Mal in der Sekunde schaltet. Man muss demnach nur die Takte zählen um herauszufinden, wie lang eine Sekunde dauert. Am genauesten lässt sich dies mit einem der Timer des ATmega gestalten, da die Timer pro Takt genau einmal zählen. Ohne Vorteiler lässt sich erreichen, dass ein 8-Bit-Timer alle 256 Takte ein Timer-Interrupt ausgeführt wird. Mit einem Vorteiler lässt sich dieser Wert noch um den Faktor 8 bis 1024 vergrößern. Der Interrupt kann genutzt werden, um einen gröberen Zähler zu inkrementieren. Erreicht dieser Zähler den Wert 225 (3.686.400 : 256 : 64 = 225), löst das Hauptprogramm den Sekundenzähler aus. Dieser wiederum kann dann Minute, Stunde, Tag, Monat und Jahr hochzählen.

Vorteile des Timers

Das Schöne an der Verwendung von Timern ist, dass diese neben dem Hauptprogramm laufen. Man "verliert" also keine Takte durch das Ausführen anderer Aktionen. Das Ganze geht soweit, dass problemlos mehrere Sekunden vergehen dürfen, in denen das Hauptprogramm irgendetwas anderes macht, bevor es wieder prüft, ob eine Sekunde vergangen ist. Die Uhr geht dann zwar kurzzeitig falsch, es gehen aber keine Sekunden verloren. Insgesamt läuft das ganze Programm dadurch relativ unkritisch ab.

Genauigkeit

Sofern ich das Datenblatt der ATmega richtig gelesen habe, sollte die Uhr grundsätzlich keine Abweichungen generieren. Die Genauigkeit der Uhr hängt vielmehr von der Genauigkeit des Taktes ab. Der interne RC-Schwingkreis des Atmega z.B. lässt sich bis 8 MHz betreiben, liefert dabei aber auch sehr große Fehler. Ein externer Quarz sollte genauer arbeiten.

Es kann jedoch dazu kommen, dass der Zählwert einer Sekunde keiner natürlichen Zahl entspricht, sondern einen Rest hat (20.000.000 : 256 : 1024 = 76,29). Die Nachkommastelle lässt sich nur zu einer begrenzten Genauigkeit korrigieren, da das Programm nicht mit Gleitkommazahlen arbeitet. Ein Quarz mit z.B. 3,6864 MHz hingegen ergibt keinen Rest.

Ausgabe

Die Ausgabe geschieht über das myAVR LCD Add-On. Es werden die Uhrzeit und das Datum in Ziffern, sowie der Wochentag in Kurzform ausgegeben. Zusätzlich signalisieren 3 Zeichen, welche Einstellungsoption gerade gewählt ist. Damit man die Funktion auch ohne LCD überprüfen kann, z.B. im Batteriebetrieb, sind die drei LEDs des myAVR Board MK2 USB ebenfalls angesteuert. Die gelbe LED signalisiert die Funktion durch sekündliches Blinken. Die grüne LED zeigt an, dass man sich in einer Einstellungsoption befindet. Leuchtet zusätzlich noch die Rote, ist man bei LCD-Reset angelangt. So lässt sich das LCD problemlos "blind" reaktivieren.

Watch

Steuerung

Neben dem Weiterschalten von Sekunden, Minuten, Stunden, Tagen, Monaten und Jahren gehört zu einer Uhr natürlich noch etwas mehr. Das Gerät möchte am Anfang zuerst gestellt werden. Dies wird mit zwei im Polling-Betrieb (Interrupt-Kanäle 0 und 1 sind durch das LCD verdeckt) abgefragten Tastern erledigt. Einer wählt die zu ändernde Option, der andere inkrementiert den Wert um 1. Zusätzlich lässt sich die Sommerzeit einstellen. Die letzte Option resettet das Display, was nötig ist, falls man im Betrieb einmal das LCD-Display absteckt und später wieder ansteckt.

Lizenz

Dieses Programm ist freie Software. Du kannst es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach deiner Option) jeder späteren Version.

Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es dir von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details findest du in der GNU General Public License.

Die Lizenzvereinbarung stehen folgend zur Verfügung: GPL 3.0 Lizenz

Die zur Kompilierung nötigen und damit in die Hex-Datei eingeflossenen Bibliotheken umfassen Teile der AVR Libc. Diese steht unter einer modifizierten Version der BSD Lizenz zur Verfügung. Genaue Informationen zu den einzelnen Lizenzen sind den eingeflossenen Bibliotheken zu entnehmen und lassen sich hier nachlesen: AVR Libc Lizenz

Kompilierung

Das Programm wurde mit Hilfe des myAVR Workpad Plus und AVR-Eclipse entwickelt. Es sollte sich mit Hilfe des myAVR Workpad SE bzw. Plus oder AVR-Ecplise jederzeit neu kompilieren und auf ein myAVR Board MK2 USB transferieren lassen. Da die Anwendung auch das myAVR LCD ansteuert, ist die Einbindung des myAVR LCD Treibers notwendig. Bei der Nutzung des myAVR Workpad ist dazu die Angabe der Bibliothek in den Datei-Kommentaren notwendig:

// LinkerOption   : -v -L"PATH_TO_7SEG_LIBRARY" -l7SegmentDriver

Unter Eclipse ist die Definition des Symbols __ECLIPSE__ für eine korrekte Kompilierung notwendig, außerdem müssen die Pfäde zu der Bibliothek in den Projekt-Eigenschaften hinterlegt werden. Siehe dazu auch das AVR-Eclipse Tutorial Seite 3.

Bei Fragen oder Anregungen stehe ich gerne zur Verfügung: chkr1989@chkronline.de

Changelog

Version 3.5

Version 3.4

Version 3.3

Version 3.2

Version 3.1

Version 3.0

Version 2.9

Version 2.8

Version 2.4

Version 2.0

Version 1.8

Programm ATmega8 @ 3,6864 MHz

Programm ATmega328P @ 16,0 Mhz

Lizenzinformationen