Ein Countdown-Timer mit ATtiny13

[Noch kein Foto verfügbar]

Nachdem ich die Countdown-Timer aus TTLs vorgestellt habe, darf natürlich ein solches Gerät mit einem Mikrocontroller nicht fehlen. Ich habe mich für eine sehr einfache Schaltung entschieden:

Ich gebe zu, daß die Anforderungen schon mit Blick auf einen bestimmten Controller ausgewählt wurden: den ATtiny13 von Atmel. Dieser kleine Controller verfügt über 1 KByte Flash-Speicher und 64 Byte SRAM. Er ist sowohl bedrahtet im DIP-Gehäse als auch in SMD-Bauform verfügbar und gut erhältlich (z.B. bei Reichelt für ca. 1,50 EUR). Die genutzten Features des Controllers sind: 10-Bit A/D-Wandler, 8-Bit Timer, Watchdog-Timer.

Der Leser mag sich an dieser Stelle fragen, warum man dies mit einem Mikrocontroller erledigen sollte. Die Anforderungen lassen sich im Prinzip auch mit einem NE556 erschlagen. Das ist zwar richtig, doch benötigt man hier eine nicht triviale externe Beschaltung. Je nach gewünschter Zeitdauer und Toleranz ist dies am Ende teurer und voluminöser als die Lösung mit dem Mikrocontroller. Ein weiterer Vorteil ist die große Flexibilität die sich dadurch ergibt, daß das Verhalten gänzlich in Software definiert und damit leicht änderbar ist. Meine Software erlaubt folgende Einstellungen durch das Ändern einer zentralen Header-Datei:

Der Zeitbereich wäre durch Vergrößern einiger Datentypen auf bis zu 49 Tage erweiterbar. Mit den genannten Features hat die Firmware eine Größe von ca. 850 Byte. Für eine spätere Version ist geplant, den Sleep-Modus des Controllers zu nutzen (sofern dies noch in die verbliebenen 170 Byte passt). Der Software liegt ein Makefile bei, das auf die GNU-Toolchain und avrdude zugeschnitten ist. Mit ihm können auch die Fusebits auf die richtigen Werte gesetzt werden (sind allerdings sowieso die Default-Einstellungen mit denen der ATtiny13 ausgeliefert wird).

Update: mit Version 1.1 wird der Sleep-Modus des Controllers genutzt. Hierzu war es auch erforderlich, eine Art Event-System einzubauen, das eine zustandsabhängige Interpretation von Ereignissen wie Tastendrücke oder abgelaufene Timer erlaubt. An einigen Stellen musste etwas Eleganz geopfert werden, um die Software klein genug für die 1024 Byte Flash-Speicher zu halten. Aktuell liegt der Speicherbedarf des Programmcodes bei 1012 Byte, der Quellcode umfasst dabei rund 1300 Zeilen (inkl. der Lizenz-Kommentare). Ich bin immer wieder begeistert, wie umfangreich Software zur Lösung auf den ersten Blick einfach erscheinender Probleme werden kann. Immerhin liegen inzwischen 8 sauber voneinander abgrenzbare Software-Module vor, die alle einen relevanten Beitrag zur Problemlösung leisten.

Downloads

Version Datum Änderungen Datei Beschreibung
1.1 2011-04-16 Unterstützung des Sleep-Modes tn13-timer-1.1.tar.gz Software (AVR-GCC)
1.0 2010-12-16 Erstes Release tn13-timer-1.0.tar.gz Software (AVR-GCC)