Nachdem ich gestern die Binäruhr in Betrieb genommen habe, sind mir noch ein paar Dinge ein- und aufgefallen, die man verbessern kann...
Die LEDs leuchten bei mir so hell, dass man die Zeit nicht richtig ablesen kann, weil man geblendet wird. Außerdem könnte man die Uhr nachts sogar als Lampe benutzen ;) Das macht also keinen Sinn. Ich habe mir erstmal so geholfen, dass ich einen zusätzlichen 12 Ohm Widerstand in den gemeinsamen Masseanschluss aller LEDs gelötet habe. Die Anzeige ist dadurch schon etwas angenehmer geworden. Aber wahrscheinlich werde ich den Widerstandswert noch etwas erhöhen.
Außerdem habe ich gemerkt, dass es sehr unpraktisch ist, wenn ich jedes Mal den µC ausbauen muss, wenn ich ihn umprogrammieren will. Daher habe ich einen Anschluss für das Programmierinterface auf die Platine gelötet und passend verdrahtet. Bisher hatte ich den AVR immer auf meinem Breadboard programmiert. Der Programmieradapter besteht aus einem Anschluss für den Parallelport des PC, einem Kabel, zwei Widerständen und einer fünfpoligen Stiftleiste (gemäß dieser Anleitung). Ich habe also einfach noch eine fünfpolige Stiftleiste auf die Platine gelötet und mit dem µC verbunden. Jetzt kann ich den AVR also auch direkt in der Uhr programmieren - ein netter Nebeneffekt des Ganzen ist, dass beim Programmieren einige LEDs aufleuchten, da sie an demselben Port wie das Programmierinterface hängen :)
Mir ist auch aufgefallen, dass meine erste Idee, nämlich die LEDs als Matrix zu verkabeln - was die Anzahl der nötigen I/O-Pins und den Verdahtungsaufwand drastisch reduziert hätte - auch möglich gewesen wäre. Ich hatte diese Möglichkeit aber anfangs ausgeschlossen, da ich dachte, dass ich dann nicht jede beliebige Kombination an LEDs zum Leuchten bringen könnte. Aber das ist ja auch gar nicht nötig: Die LEDs müssen nicht ständig leuchten, d.h. ich hätte einen Zeitmultiplex anwenden können... naja, die jetzige Variante hat den Vorteil, dass die Programmierung recht einfach ist. Also: Wer fit mit dem Lötkolben ist und ausreichend I/O-Ports hat, kann meine Verkabelung nutzen - wer das nicht ist/kann/will, benutzt eine Matrixverdrahtung und muss den Code dann nur noch etwas anpassen.
Im Moment spiele ich mit dem Gedanken, ein DCF77-Modul (z.B. von Reichelt oder Conrad) in die Schaltung zu integrieren. Das hätte einige Vorteile:
-
Da der interne Oszillator des AVR nicht sehr genau ist, treten nach einiger Zeit schon Gangunterschiede auf - ok, das ließe sich in Software noch ein wenig ausbessern, aber eben nur bis zu einem bestimmten Punkt.
-
Man spart sich das lästige Einstellen der Uhrzeit
-
und zu guter Letzt ist es doch einfach ziemlich cool, oder? ;)
Als zusätzliche Feature habe ich mir überlegt, noch einen Summer und einen zusätzlichen Taster einzubauen, um eine Weckerfunktionalität zu erzeugen. Die zusätzliche Taste wäre nötig, um den Modus zu wechseln: Entweder Taste nicht gedrückt, dann stellt man mit den anderen beiden Tasten die normale Uhrzeit ein oder Taste gedrückt, dann stellt man die Alarmzeit ein. Außerdem wäre dann noch eine LED nützlich, die den aktuellen Alarmzustand (ein/aus) anzeigt, damit man nicht aus Versehen geweckt wird ;)
In Kombination mit dem Funkmodul ließe sich der zusätzliche Taster einsparen, da man die Uhrzeit wahrscheinlich nicht mehr verstellen möchte. Den gesparten Taster könnte man gegen noch eine LED austauschen, die zusätzliche Alarmmodi anzeigt: Ich denke da z.B. an einen Alarmmodus, der nur in der Woche klingelt - oder mehrere Weckzeiten - auch wenn das dann doch noch zusätzliche Taster erfordern würde... die Möglichkeiten sind doch recht umfangreich.
Falls ich das DCF77-Funkmodul nicht dazubaue, werde ich auf jeden Fall einen externen Quarzoszilliator hinzufügen, um einen genaueren Takt zu erhalten. Bis ich den habe, werde ich mal sehen, was sich an der Software noch optimieren lässt...