So langsam nähert sich die Binäruhr der Vollendung :) Als eines der letzten großen Features habe ich jetzt eine Weckfunktion implementiert.
Als Lautsprecher benutze ich im Moment einen alten PC-Speaker. Diesen möchte ich aber noch gegen etwas kleineres tauschen, da das Ganze so nicht in das Gehäuse passen wird. Um den Lautsprecher möglichst einfach tauschen zu können, habe ich ihn nicht fest auf die Platine gelötet. Stattdessen habe ich eine kleine zweipolige Stiftleiste benutzt, an die der Lautsprecher dann angesteckt wird. Um die Lautstärke zu begrenzen, benutze ich einen 470 Ohm Widerstand. Die resultierende Lautstärke dürfte morgens eigentlich ganz in Ordnung sein.
Sobald die Uhrzeit die voreingestellte Weckzeit erreicht (und der Alarm natürlich aktiviert ist), wechselt die Uhr in einen neuen Modus (bisher gab es "Zeit anzeigen", "Alarm 1 einstellen", "Alarm 2 einstellen" und "Uhrzeit einstellen"), den man normalerweise nicht erreichen kann. Hier wird ganz normal die Uhrzeit angezeigt. Zusätzlich wird aber auch auf einem Ausgang ein Soundsignal erzeugt. Wird eine (beliebige) Taste gedrückt, ist der Alarm vorbei und die Uhr wechselt zurück in den "Zeit anzeigen" Modus. Der Wecker bleibt gestellt.
Um die eingestellten Weckzeiten auch über einen Stromausfall (egal welcher Art) hinweg zu behalten, werden diese nun im EEPROM des µC gespeichert. Um den EEPROM nicht unnötig zu belasten (er ist nur für etwa 100.000 Schreibvorgänge pro Speicherzelle ausgelegt), wird die Weckzeit nur gespeichert, falls sie auch wirklich geändert wurde. Sobald der µC sein Programm startet, lädt er die gespeicherten Weckzeiten aus dem EEPROM.
Das Problem, dass die Uhr plötzlich (ohne Tastendruck) den Modus wechselt, habe ich mittlerweile zusammen mit ein paar anderen lösen können: Ich habe den Anschluss für das Netzteil ausgetauscht und nochmal sauber (und stabil) verlötet. Jetzt wackelt nix mehr und die Spannungsversorgung scheint wirklich stabil zu sein. Jedenfalls springt der µC (bisher) nicht mehr durch die verschiedenen Modi und auch der DCF77-Empfang funktioniert viel besser.
Als letztes neues Feature habe ich nun noch eingebaut, dass sich die Binäruhr nach einem erfolgreichen DCF-Empfang erstmal nicht neu synchronisieren will, sondern dies nur alle 3 Stunden tut. Das sollte für eine genaue Zeitanzeige auf jeden Fall genug sein und evtl. noch ein paar Ressourcen des µC für zukünftige Features frei halten.
Ok, als letztes gibt es jetzt noch den Sourcecode und den aktualisierten Schaltplan. Achtung: Der Schaltplan ist doch etwas unübersichtlich geworden - ich hoffe, man kann noch alles erkennen. Evtl. werde ich demnächst noch eine etwas aufgeräumtere Version online stellen.
[Klick für größere Version]