AlphaClock ist die Kurzform von „alphanumeric clock“, da die eingesetzten Displays auch Text anzeigen können. Das folgende Video wurde mit der ersten Version der Firmware gemacht.
Vor einiger Zeit habe ich angefangen, mich mit dem Thema „Microcontroller“ zu beschäftigen. Die ersten Versuche waren mit einem Arduino Micro, mit dem ich u.A. auch alte LED-Displays ausprobiert habe, wie das HDSP-2116 oder DL-2416.
Ein Vorteil des Arduino Micro ist, dass er direkt auf ein Breadboard gesteckt werden kann und über einen Micro-USB-Anschluss für Datenübertragung und Stromversorgung verfügt. Allerdings kenne ich vom LCD2USB auch den ATmega im DIP-Gehäuse. Dieser Controller benötigt für den Betrieb mit externem Takt lediglich einen Quarz und zwei Kondensatoren.
Meine Idee war, einen ATmega328P mit zwei DL-2416 von 1987 und einem DS3231-Uhrenmodul zu kombinieren. Das Ganze war für mich auch ein Lernprojekt, um die Entwicklungsumgebung in Form von Visual Studio Code mit PlatformIO kennenzulernen wie auch die Funktionsweise des Microcontrollers bezüglich Interruptsteuerung und PWM.
Um die Software auf den ATmega328P zu übertragen, benötigt man der Entwicklungsumgebung noch einen AVR-Programmer. Ich nutze dafür aktuell den „mySmartUSB light“, der STK500-kompatibel ist und auch mit avrdude verwendet werden kann.
Erster Prototyp
Der erste Prototyp entstand auf einem Breadboard. So konnte ich verschiedene Ideen leichter ausprobieren und habe am Ende einen Aufbau gefunden, der folgende Punkte berücksichtigt:
- Neben einem Reset-Taster noch zwei weitere Taster, über die man die Anzeige wechseln oder ein Menü für weitere Funktionen aktivieren kann.
- Aktualisierung der Displays über einen Interrupt durch das Uhrenmodul für eine exakte Sekundenanzeige.
- Helligkeitssteuerung der Displays über PWM.
- Serielle Schnittstelle für künftige Erweiterungen nutzbar.
Für die Übertragung der Software habe ich einen ISP-Adapter für Breadboards verwendet, auf dem Bild links oben zu erkennen. Das Teil in der Mitte zwischen den Displays und dem ATmega328P ist ein DS3231-Uhrenmodul von Adafruit.
Die engültige Schaltung ist dabei wie folgt (anklicken für eine vergrößerte Ansicht):
Dauerhafter Aufbau auf einer Lochrasterplatine
Nachdem die grundsätzliche Funktion der Hardware geklärt war, habe ich einen dauerhaften Aufbau auf einer Lochrasterplatine vorgenommen. Für die Displays habe ich eine 40-polige Präzisions-IC-Fassung verwendet, in der ich vier Anschlüsse entfernt habe, damit klar ist, wo genau die Displays gesteckt werden müssen. Auf die gleiche Weise wären auch weitere Displays nahtlos anreihbar – vielleicht baue ich später noch eine Konstruktion mit vier oder sechs Displays auf.
Als ersten Schritt habe ich zunächst die Minimalkonfiguration aufgebaut – ATmega328P, Quartz, Kondensatoren und einen Wannenstecker für den Programmer. Zusätzlich habe ich eine Schutzdiode verbaut, damit bei einem eventuell verpolten Stromanschluss über die dafür vorgesehene Buchse nichts kaputt geht.
Bevor ich dann weitergemacht habe, gab es erst einen Test, ob der ATmega328P vom AVR-Programmer korrekt erkannt wurde.
Für die Verdrahtung kam überwiegend Kupferlackdraht mit 0,1 mm Durchmesser zum Einsatz – nur für die Stromversorgung der Displays habe ich Litzen verlegt, da die Stromaufnahme bis zu 145 mA pro Display betragen kann, der Kupferlackdraht aber nur für maximal 100 mA geeignet ist.
Der fertige Aufbau enthält auch drei Taster, wie auf dem Breadboard.
Gegenüber dem eingangs gezeigten Video habe ich die Tastenbedienung in den Einstellungen noch etwas angepasst und es ist neben der Anzeige von Datum und Jahr noch die Temperatur hinzugekommen, da das Uhrenmodul auch diesen Wert liefert.
Software
Die Software ist Open Source und zusammen mit dem Schaltplan als PDF auf https://github.com/arnowelzel/AlphaClock verfügbar.
Bei der Entwicklung gab es einige Herausforderungen zu lösen:
- Entprellte Abfrage der Taster und erkennen, wann ein Taster länger gedrückt wird.
- Exakte Aktualisierung der Sekundenanzeige über einen Interrupt-Handler.
- Automatische Rückkehr zur Zeitanzeige, wenn längere Zeit keine Taste gedrückt wurde.
- Blinkende Anzeige von Teilen des Displays bei der Einstellung von Parametern.
- Berechnung von Schaltjahren bei der Datumseinstellung damit der letzte mögliche Tag im Februar des ausgewählten Jahres korrekt ermittelt wird.
Update 2021-10-30
Die Software nutzt jetzt auch das EEPROM des ATmega328P, um die Helligkeitseinstellung dauerhaft zu speichern. Darüber hinaus wurde der Schaltplan korrigiert, um die Numerierung der Taster zu korrigieren.
Update 2022-04-23
Das Uhrenmodul hat sich als sehr zuverlässig erwiesen. Auch über mehrere Monate hinweg ist die Abweichung bei der Uhrzeit im Bereich von nur wenigen Sekunden. Dazu trägt auch die Temperaturkompensation bei, die auch die Implementierung eines Thermometers ermöglicht.