Projekt: Tischuhr
Diese Uhr ist als praktische Zeitanzeige für den Schreibtisch gedacht und bietet einige nützliche Zusatzfunktionen. So wird auf einem großen grafischen LCD die Zeit in Form einer Analoguhr und einer Digitaluhr angezeigt. Über 3 unabhängige Alarme kann man sich an wichtige Termine erinnern lassen, wobei einmalige, tägliche, wöchentliche oder monatliche Alarme programmiert werden können. Zusätzlich lässt sich zur vollen Stunde ein Gong aktivieren. Weiterhin erinnert die Uhr an bevorstehende Geburtstage und bietet Platz für 115 Einträge. Ein USB-Anschluss ermöglicht die Kommunikation mit einem PC und kann zum Update der Software über einen Bootloader verwendet werden. Selbstverständlich wird die Uhr mit dem DCF77-Signal synchronisiert. Als zentrales Bauteil dient hier ein ATmega128.
Letzte Bearbeitung: 20.11.2013
Schaltplan | |
Stückliste mit Empfehlungen zur Bauteilbestellung | |
Software für ATmega128 mit komplettem Quelltext in C vom 06.07.2013 | tischuhr-atmega128-v1100.zip |
Platinen-Layout Version 1 | tischuhr-layout1.zip |
Platinen-Layout Version 2 | tischuhr-layout2.zip |
Platinen-Layout Version 3 | tischuhr-layout3.zip |
Bootloader für ATmega128 USART1 (für Originalschaltung) | Bootloader ATmega128 UART1 v2.9i |
Bootloader für ATmega128 USART0 (für Crumb128, ist normalerweise vorinstalliert) | Bootloader ATmega128 UART0 v2.9i |
Homepage von Chip45 (aktuelle Bootloader-Versionen, bitte Hinweise im Abschnitt Inbetriebnahme beachten) | https://www.chip45.com/categories/chip45boot2_avr_atmega_xmega_uart_bootloader_frei_kostenlos_hexfiles.php |
Tischuhr-Manager, Kommunikations-Software für Windows XP und Windows 7 vom 18.11.2013 | Tischuhr-Manager v2.00 |
Beschreibung | Allgemeine Informationen über die Tischuhr |
Schaltung | Beschreibung der Schaltung und der Schaltungsoptionen |
Hardware | Bilder und Hinweise zum Aufbau der Uhr |
Software | Kurze Beschreibung der Uhrensoftware |
Inbetriebnahme | Inbetriebnahme der Uhr und Installation der Software |
Bedienung | Bedienungsanleitung und komplette Beschreibung aller Funktionen |
Kommunikation | Beschreibung der PC-Kommunikation über den USB-Anschluss |
Sonstiges | Einige Hintergrundinformationen zur Entwicklung der Uhr |
Die Motivation zur Entwicklung dieser Uhr war, dass zwar im ganzen Haus Uhren verteilt sind, an meinem Schreibtisch jedoch eine übersichtliche Zeitanzeige fehlt. Außerdem habe ich gelegentlich Termine, wie z.B. eBay-Auktionen, versemmelt, also musste unbedingt eine weitere Uhr mit einer Alarmfunktion her. Diese Uhr unterscheidet sich von allen anderen Uhren auf dieser Seite durch die Verwendung eines großen grafischen LCDs. Damit entfällt die Beschränkung auf wenige Anzeigestellen, die man sonst bei Siebensegment-Anzeigen hat und kann eine sehr flexible Anzeige realisieren. So bietet das verwendete LCD mit 240x128 Pixeln die Möglichkeit, folgende Informationen gleichzeitig darzustellen:
- Zeitanzeige analog mit Stunden-, Minuten- und Sekundenzeiger
- Zeitanzeige digital mit großen Ziffern
- Anzeige von Datum und Wochentag
- Anzeige von 3 unabhängigen Alarmzeiten
- Anzeige der nächsten 3 fälligen Geburtstage
Die Bedienung der Uhr erfolgt über einen Drehimpulsgeber (mit integriertem Taster) sowie einen weiteren einzelnen Taster. Hiermit können weitere Funktionen aufgerufen werden, wie z.B. eine vollständige Geburtstagsliste mit bis zu 115 Einträgen, eine Seite mit zusätzlichen Informationen sowie mehrere Einstellungs-Seiten für die Konfiguration der Uhr. Die Uhr synchronisiert sich automatisch über einen Empfänger mit dem DCF77-Signal, kann aber auch manuell gestellt werden. Bei Auslösung eines Alarms ertönt eine von 13 Melodien bzw. Tonfolgen, wobei ein Verstärker und ein Lautsprecher für eine ausreichende Lautstärke sorgt. Über einen optionalen USB-Anschluss kann die Uhr mit einem PC kommunizieren und ein Software-Update durchführen, sofern ein Bootloader installiert wurde. Eine weitere Besonderheit dieses Projektes ist die Software, die komplett in C geschrieben wurde.
Das zentrale Bauteil dieser Uhr ist der Mikrocontroller IC1 (ATmega128), welcher mit einer Taktfrequenz von 14,7456 MHz betrieben wird. Diese scheinbar krumme Frequenz wurde bewusst gewählt, weil sich daraus genaue Taktraten für die serielle Schnittstelle ableiten lassen, die für die Kommunikation über USB erforderlich sind. 12 Portleitungen des Controllers führen zum Display IC2, 8 Datenleitungen sind an den Ports PA0-PA7 angeschlossen und 4 Steuerleitungen an den Ports PC0-PC3. Die beiden Ports PB0 und PB7 steuern weitere Display-Funktionen. So lässt sich über PB0 sowie R4 und T2 das Display ein- und ausschalten. Diese Funktion habe ich eingebaut, weil viele Displays und die dazugehörigen Inverter den DCF77-Empfänger so stören, dass kein Empfang des Zeitsignals möglich ist. In einem solchen Fall kann die Uhr so eingestellt werden, dass zwischen 3:00 Uhr und 3:30 Uhr das Display komplett abgeschaltet wird, um wenigstens einmal täglich eine Synchronisierung zu ermöglichen.
PB7 kann über R1, R2 und T1 die Hintergrundbeleuchtung schalten und mittels PWM-Signal auch dimmen. Die Uhr lässt sich so einstellen, dass die Beleuchtung in einem wählbaren Zeitraum (z.B. über die Nachtstunden) ausgeschaltet wird oder mit geringerer Helligkeit aktiv ist. Für T1 habe ich den angegebenen Typ IRFD110 verwendet, welcher für Ströme bis 300mA geeignet ist. Bei höheren Strömen empfehle ich den IRL540, sonst werden die Verluste durch den Innenwiderstand zu groß. R18 ist abhängig vom verwendeten Display und muss mithilfe des Datenblattes ermittelt werden. Er liegt üblicherweise zwischen 5Ω und 20Ω. Einige Displays haben den Vorwiderstand bereits integriert, so dass in diesem Fall R18 entfallen kann. Dies sollte man aber unbedingt genau prüfen (Datenblatt) - ganz ohne Vorwiderstand wird die Beleuchtung mit Sicherheit Schaden nehmen. D1 wird nur benötigt, wenn ein Display mit CCFL oder EL verwendet wird und kann bei einer LED-Beleuchtung weggelassen werden.
Eine Eigenart der größeren grafischen Displays ist, dass sie eine zusätzliche Spannung von ungefähr -13V benötigen. Diese Spannung speist den LCD-Treiber und muss einstellbar sein, da sie den Kontrast des Displays bestimmt. Bei dem von mir verwendeten Display muss diese Spannung von einer zusätzlichen Schaltung erzeugt werden. Diese besteht aus dem Schaltregler IC4 und einigen weiteren Bauteilen. Der hier verwendete TL497A ist zwar schon etwas älter, erfüllt aber seinen Zweck. Über R8 stellt man den Kontrast des Displays ein, die angegebenen -13V sind nur ein Richtwert und können durchaus stark abweichen. Ein weiteres geeignetes IC für die Spannungserzeugung ist übrigens der ICL7662. Leider habe ich diesen erst entdeckt als die Schaltung schon fertig war.An dieser Stelle noch ein Hinweis: Es ist wichtig, dass man vor dem Anschluss des Displays alle LCD-Spannungen kontrolliert. Das Display kann Schaden nehmen, wenn eine Spannung fehlt oder zu stark abweicht. Falls der Controller IC1 noch nicht bestückt ist, muss man zum Test die linke Seite von R4 an Masse legen, damit T2 durchschaltet und die Spannung für das Display und IC4 freigibt.
Viele Displays (insbesondere die teureren Modelle) haben bereits eine Schaltung integriert, die die benötigte LCD-Spannung erzeugt. Bei diesen Displays kann die umrahmte Schaltung mit IC4 komplett entfallen und es sind nur 2 Bauteile wie im nebenstehenden Bild nötig. Der Display-Kontrast wird dann über R19 eingestellt. In diesem Fall kann man die Spannung natürlich nur messen, wenn das Display eingeschaltet ist.Weiterhin gibt es Displays, die mehrere negative Spannungen benötigen, z.B. feste -15V und zusätzlich noch ca. -13V für die Einstellung des Kontrastes. Es sollte auf jeden Fall vor dem Aufbau der Uhr das Datenblatt des Displays studiert werden, damit die Schaltung gegebenenfalls angepasst werden kann.
Noch einige Worte zum Display: Bei der Auswahl sollte man immer das Datenblatt zu Rate ziehen. Viele aktuelle Typen haben z.B. die unangenehme Eigenschaft, dass die Pixel nicht quadratisch sind. Das
hat zur Folge, dass das normalerweise kreisförmige Zifferblatt in der Breite gestaucht und somit zum Ei wird. Grundsätzlich wäre es zwar möglich, durch Änderung der Software die Höhe ebenfalls zu
stauchen, aber das ist wegen des hohen Aufwandes und der daraus resultierenden schlechteren Darstellung nicht vorgesehen.
Gelegentlich werden Displays mit einem SAP1024 Controller angeboten. Der SAP1024 ist mit dem T6963C kompatibel, somit können solche Displays für die Tischuhr verwendet werden. Einige Displays haben
einen "MD"-Anschluss, dieser muss an die +5V des Displays angeschlossen werden (Knotenpunkt T2/C4/C5).
Nachtrag: Die aktuellen DCF77-Module von Pollin dürfen nur mit maximal 3,3V betrieben werden. In diesem Fall müssen noch die beiden zusätzlichen Bauteile R21 und D4 wie im nebenstehenden Bild
eingefügt werden.
Wie schon erwähnt, kann die Uhr über USB mit einem PC verbunden werden und für diese Aufgabe ist IC7 zuständig. Dieser Chip aus dem Hause FTDI ist über PD2 und PD3 mit dem USART1 (Universal
Synchronous/Asynchronous Receiver Transmitter) des Controllers verbunden und ermöglicht die serielle Kommunikation über eine virtuelle COM-Schnittstelle mit hoher Geschwindigkeit, wobei die Uhr hier
mit 921600 Bit/s arbeitet. Wenn ein Bootloader auf dem Controller installiert wurde, dann kann jederzeit ein Software-Update über den USB-Anschluss durchgeführt werden, ohne das Gehäuse der Uhr öffnen
zu müssen. Wenn die USB-Funktionalität nicht benötigt wird, dann kann der umrahmte Schaltungsteil mit IC7 komplett entfallen.
Der Aufbau der USB-Schaltung auf einer Lochraster-Platine ist übrigens sehr knifflig. Wer sich das nicht zutraut, aber dennoch nicht auf den USB-Anschluss verzichten möchte, dem empfehle ich den
Aufbau der Uhr mit einem Crumb128-Modul (v4.0 oder v5.0) von www.chip45.com. Hier erhält man ein fertiges Mikrocontroller-Board mit Quarz, ISP- und
USB-Anschluss, so dass man die USB-Schaltung um IC7 weglassen kann. Zwar wird hier ein anderer USB-Chip verwendet und auch eine andere Schnittstelle am Controller, aber das ist kein Problem, da die
Uhren-Software damit umgehen kann.
Die Jumper JP1-JP3 sind an den Ports PB2-PB4 angeschlossen und werden zur Konfiguration des Drehimpulsgebers benötigt. Hier wird festgelegt, welcher Geber-Typ verwendet wird und wie sich die Drehrichtung auf die Menü-Zeiger und Eingabewerte auswirken soll. Eine genaue Beschreibung ist am Ende des Abschnitts Inbetriebnahme zu finden.
Ein kleines, aber wichtiges Detail ist die an PD4 angeschlossene LED D3. Diese wird bei Auslösung eines Alarms aktiviert und blinkt dann mit 2 Hz. Weiterhin kann die LED das empfangene DCF77-Signal anzeigen. Ich habe für D3 eine ultrahelle orange LED verwendet und wegen der extremen Helligkeit nachträglich den Widerstand R10 auf 1,5kΩ vergrößert.
Zu den Anschlüssen: An K1 muss eine stabile Spannung von +5V zugeführt werden. Die heute üblichen Stecker-Schaltnetzteile liefern eine stabile Spannung, so dass man auf einen weiteren Spannungsregler in der Uhr verzichten kann. Allerdings muss man darauf achten, dass immer das richtige Netzteil angeschlossen wird - eine höhere oder falsch gepolte Spannung an K1 wird die Uhr mit Sicherheit beschädigen! Die Stromaufnahme der Uhr liegt auch bei voller Helligkeit der Hintergrundbeleuchtung weit unter 500mA. Oft findet sich irgendwo ein ungenutztes Handy-Ladegerät mit 5V/500mA, welches man für die Uhr sehr gut verwenden kann.K2 ist der ISP-Anschluss für den Mikrocontroller. Über diesen kann die Software in den Controller programmiert werden. Alternativ kann man auch einen Bootloader programmieren, das ermöglicht die Verwendung des USB-Anschlusses für das Installieren und Updaten der Software. Der Anschluss K3 war bei der Entwicklung der Software sehr hilfreich, für den Betrieb der Uhr ist er jedoch nicht erforderlich und kann weggelassen werden. K4 ist der bereits beschriebene USB-Anschluss. Obwohl sich der Micro-USB-Anschluss als Standard durchzusetzen scheint, habe ich mich hier für eine Standard-USB-B-Buchse entschieden. Diese ist zum einen robuster und zum anderen lässt sich diese besser auf einer Lochrasterplatine montieren.
In dieser Stückliste sind alle benötigten Bauteile aufgeführt. Zusätzlich gibt es noch einige Empfehlungen für die Bestellung.
Bis auf das Display und die beiden Bedienelemente finden alle Bauteile auf einer Lochrasterplatine Platz. Im mittleren Bereich befinden sich 2 Pfostenbuchsen, in die später eine Adapterplatine (Headerboard) mit dem ATmega128 (IC1) gesteckt wird. Auf der linken Seite sind alle für das Display nötigen Bauteile untergebracht: oben ein 20-poliger Steckverbinder für das Display, darunter der Spannungsregler IC4 für die LCD-Spannung mit der benötigten Außenbeschaltung sowie T2.
Unten links ist der Reset-Taster S3, ein 4-poliger Steckverbinder für den DCF77-Empfänger und das Trimmpoti R8 zu sehen. Rechts daneben geht es weiter mit dem ISP-Anschluss K2, dem JTAG-Anschluss K3 und den Jumpern JP1-JP3.
Rechts oben ist ein Inverter-Modul für eine CCFL-Hintergrundbeleuchtung zu sehen. Ursprünglich war mein Display mit einer solchen ausgestattet, später habe ich jedoch eine LED-Beleuchtung eingebaut,
so dass dieses Inverter-Modul (ehemals IC3) nicht mehr vorhanden ist. Darunter kommt der NF-Verstärker IC6 mit seiner Außenbeschaltung und darunter der USB-Chip IC7, der USB-Anschluss K4 sowie der
Stromanschluss K1. Um den beiden Buchsen K1 und K4 etwas mehr Stabilität zu geben, wurden sie zusätzlich mit Zweikomponenten-Kleber befestigt.
Dieses Bild zeigt die Platine von unten. Es sieht nicht unbedingt schön aus und man sieht einige verzinnte Lötaugen ohne Funktion, die von verschiedenen Testschaltungen stammen. All das sieht man aber nicht mehr, wenn die Platine im Gehäuse eingebaut ist.
Die Leitungen für Masse und +5V wurden mit 0,5 mm Draht verlegt, für alle anderen Verbindungen wurde 0,25 mm Kupferlackdraht verwendet. Alle Leitungen sollten nicht länger als unbedingt nötig sein, insbesondere Q1, C13 und C14 sollten nah an IC1 angeordnet werden. Auch die vielen 100 nF Kondensatoren sollten sich immer nah an den ICs und den VCC/GND-Anschlüssen befinden.
Die beiden Bedienelemente S1 und S2 habe ich auf einer separaten Platine untergebracht. Über ein 5-poliges Flachbandkabel wird diese später an die Hauptplatine angeschlossen.
Auf diesem Bild steckt bereits das Headerboard mit dem Mikrocontroller auf den dafür vorgesehenen Steckverbindern. Ich habe hier ein Headerboard von SIPHEC verwendet, dieses hat bereits den Quarz Q1
sowie die Kondensatoren C3, C9, C12, C13, C14 und auch noch einen größeren Elektrolyt-Kondensator an Bord. Der bereits bestückte 16-MHz-Quarz musste allerdings ausgetauscht werden.
Ursprünglich sollten die beiden Bedienelemente unterhalb des Displays angeordnet werden, ungefähr so wie beim Anzeigemodul 2 oder
Anzeigemodul 2a des Temperaturmesssystems. Ich habe mich dann aber doch für die seitliche Montage entschieden, damit das Gehäuse kompakter wird. Die Uhr lässt
sich trotzdem gut bedienen.
Auf diesem Bild ist die Tischuhr von hinten zu sehen. Das Display wurde montiert und über ein 20-poliges Kabel mit Pfostenbuchsen angeschlossen. Der DCF77-Empfänger wurde in die vorgesehene 4-polige
Buchsenleiste gesteckt und die Antenne mit 2 Kabelbindern sowie 2 Puffern aus Silikon am Holzstab befestigt.
Ich habe mich für ein Gehäuse aus weißem Plastik-Material mit einer Stärke von 1,5 mm entschieden, welches sich sehr gut verarbeiten lässt. Das Gehäuse wurde (bis auf die rechte Seitenwand) zu einem
einzigen Teil zusammengeklebt und das komplette Uhrenmodul wird später seitlich in das Gehäuse geschoben. Zum Kleben habe ich übrigens UHU plast verwendet.
Auf diesem Bild ist die fertig zusammengebaute Uhr von vorn zu sehen.
So sollte das Display aussehen, wenn sich die Uhr mit dem DCF77-Signal synchronisiert hat. Das weiße Gehäuse passt sehr gut zur blau/weißen Darstellung des Displays.
Wer die Möglichkeit hat, selbst Platinen anzufertigen, der kann die folgenden Layouts verwenden, die von den freundlichen Bastlerkollegen Lothar Jasper und DL5AKW bereitgestellt wurden:
Platinen-Layout Version 1 | tischuhr-layout1.zip |
Platinen-Layout Version 2 | tischuhr-layout2.zip |
Platinen-Layout Version 3 | tischuhr-layout3.zip |
Die Software für diese Uhr wurde komplett in C geschrieben. Der Quelltext besteht aus mehreren Dateien:
tischuhr.c | enthält das eigentliche Programm |
charset.h | enthält Zeichensätze für die Schrift und für die Großziffern sowie Symbole |
strings.h | enthält eine Stringliste in deutscher und englischer Sprache |
circle.h | enthält eine Koordinaten-Tabelle mit Kreisdaten für die Zeiger-Darstellung |
clock.h | enthält eine Bitmap für das Ziffernblatt |
sound.h | enthält eine Tonhöhen-Tabelle und die Musikdaten |
Im Vergleich zum Anzeigemodul 2, welches vor der Tischuhr entwickelt wurde, sind einige Parallelen zu erkennen. So ist nicht nur der Schaltungskern sehr ähnlich - auch die Software hat vieles vom Anzeigemodul 2 geerbt. Trotzdem sind die Funktionen nicht vergleichbar und auch die Bedienung und die Menüstruktur ist bei der Tischuhr völlig anders. Ebenfalls anders ist die verwendete Programmiersprache, die Tischuhr ist das erste Projekt, welches ich komplett in C realisiert habe.
Das Programm gliedert sich in mehrere Abschnitte:
- Einbinden von Bibliotheken und weiteren Dateien
- Definitionen von Konstanten und Variablen im RAM und im EEPROM
- Jede Menge Funktionen
- Interrupt-Routinen für die interne Zeitzählung und die USB-Kommunikation
- Initialisierung von Variablen und I/O-Registern
- Lesen der gespeicherten EEPROM-Werte
- Steuerung der Anzeige in Abhängigkeit vom gewählten Untermenü
- Abfrage der Bedienelemente und entsprechende Funktionssteuerung
- Auswertung der DCF77-Daten
- Steuerung der USB-Kommunikation, Kommandos erkennen und bearbeiten
- Diverse Funktionen: Timeouts, Zeit- und Status-abhängige Vorgänge steuern
Der grundsätzliche Ablauf ist folgender: Nach der Initialisierung, die nur einmal nach dem Programmstart ausgeführt wird, läuft das gesamte Programm in einer Endlosschleife ab. Als erstes wird die Anzeige aktualisiert, wobei die Daten zunächst im Speicher des Controllers vorbereitet und im nächsten Schritt als Datenblock in den Speicher des Displays transferiert werden. Wegen des recht großen Speicherbedarfs des gesamten Displays wird das Bild in zwei Teilen bearbeitet, zuerst ist die Analoguhr dran und danach folgt die restliche Anzeige. Ist das erledigt, wird geprüft, ob der Drehimpulsgeber S1 oder der Taster S2 gedrückt wurde und falls ja, dann wird je nach gerade aktiver Menü-Ebene in eine entsprechende Aktion verzweigt. Ähnliches passiert, wenn am Impulsgeber gedreht wurde. Hier wird entweder die Menü-Position oder ein Eingabewert geändert.
Anschließend wird geprüft, ob ein vollständiger DCF77-Datensatz vorliegt und dieser dekodiert. Wenn die Daten fehlerfrei sind, werden sie zusätzlich mit den beiden vorherigen Datensätzen verglichen und erst wenn alles stimmt, wird die Zeit übernommen. Im weiteren Ablauf werden einige Zähler geprüft und Folgeaktionen gesteuert, z.B. wenn über 24 Stunden keine DCF-Zeit empfangen oder 2 Minuten lang kein Taster betätigt wurde. Danach werden Zeiten verglichen, die Nachtschaltung gesteuert, Alarme geprüft und ausgelöst, die LED und die tägliche Reorganisation der Alarme und Geburtstage gesteuert.Im Hintergrund wird alle 78,125 µs der Interrupt vom Timer 1 aktiv und der macht in abgestuften Intervallen folgendes: Es wird der Status des Drehimpulsgebers gelesen, entprellt und ein Positionswert ermittelt. Dann kommt der DCF77-Empfänger an die Reihe und beim Erkennen eines Impulses wird dessen Wert in einer Tabelle abgelegt. Die beiden Taster (vom Drehimpulsgeber und der Einzeltaster) werden ebenfalls gelesen, entprellt und der aktuelle Zustand gespeichert. Anschließend erfolgt die Zeitzählung für die Uhr und es werden noch einige Timeout-Zähler bearbeitet. Zum Schluss kommt noch die Steuerung der Sound-Ausgabe, diese wird, nachdem sie vom Hauptprogramm angestoßen wurde, komplett von der Interrupt-Routine abgearbeitet.
Ebenfalls im Hintergrund läuft ein Teil der USB-Kommunikation. So wird jedes empfangene Zeichen über eine Interrupt-Routine eingelesen und in einem Puffer abgelegt. Das Hauptprogramm prüft zyklisch den Inhalt des Puffers und beim Erkennen eines vollständigen Kommandos wird dieses in einen weiteren Puffer kopiert und bearbeitet. Die zu sendenden Daten werden ebenfalls in einen Puffer geschrieben und eine Interrupt-Routine kümmert sich um das Senden der Daten.
Für die Inbetriebnahme der Tischuhr wird die aktuelle Software v1.100 vom 06.07.2013 für den ATmega128 benötigt. In diesem Paket befindet sich der komplette kommentierte Quelltext in C und das fertig compilierte HEX-File, zu finden im Verzeichnis Tischuhr\Tischuhr\Release. Im einfachsten Fall nimmt man einfach den Programmieradapter seiner Wahl und schreibt das HEX-File über den ISP-Anschluss K2 direkt in den Mikrocontroller. Diese Option sollte man bei der ersten Inbetriebnahme der Uhr wählen, damit man sofort alle Funktionen überprüfen kann. Falls man die Uhr ohne den USB-Anschluss aufbauen möchte, dann bleibt diese Option auch zukünftig die einzige für ein Update der Software. In diesem Fall muss man allerdings das Gehäuse öffnen oder die Uhr so aufbauen, dass der ISP-Anschluss von außen zugänglich ist.
Die bessere Alternative ist, einen Bootloader in den Mikrocontroller zu programmieren und dann diesen für das Installieren der Software zu verwenden. Das ist natürlich nur sinnvoll, wenn der USB-Anschluss vorhanden ist, denn der Bootloader kommuniziert über diesen Anschluss. Der große Vorteil des Bootloaders ist, dass man jederzeit die Software aktualisieren kann, ohne das Gehäuse der Uhr öffnen zu müssen.Direkte Installation der Software über ISP: Bei dieser Variante wird die Software in gewohnter Weise mit einem Programmiergerät (AVR-Programmierung) in den Mikrocontroller übertragen. Anschließend müssen noch einige Fuse-Bits gesetzt werden.
Bei Verwendung des AVR-Studios muss die Einstellung wie im linken Bild aussehen.Andere Programmiersoftware bietet oft nicht so einen übersichtlichen Dialog an. Hier werden stattdessen die Werte für die 3 Fusebit-Register erwartet und direkt geschrieben (z.B. bei AVRDUDE oder myAVR-ProgTool). In diesem Fall kann man die 3 benötigten Werte aus dem unteren Teil des Bildes entnehmen:
EXTENDED = 0xFFHIGH = 0x91
LOW = 0xBF
Wer noch mit PonyProg arbeitet, findet im nebenstehenden Bild die richtige Einstellung.
Installation eines Bootloaders: Für diese Variante wird noch eine zusätzliche Software benötigt - der Bootloader. Dieser wird einmalig in einem Bereich am Ende des Flash-Speichers installiert und eine besondere Einstellung der Fuse-Bits bewirkt, dass sich der Bootloader nach einem Systemstart oder Reset immer zu erst aktiviert. Der Bootloader initialisiert dann die serielle Schnittstelle des Mikrocontrollers und wartet kurze Zeit auf eine bestimmte Zeichenfolge. Im normalen Betrieb bleibt diese Zeichenfolge aus und es wird anschließend die normale Software auf Adresse 0 gestartet. Empfängt der Bootloader die erwartete Sequenz, dann bleibt er aktiv und wartet auf weitere Kommandos. Eines dieser Kommandos ist die Übertragung eines HEX-Files und das Ablegen der Daten im Flash-Speicher, also die Installation einer Software. Nachdem die Übertragung erfolgreich abgeschlossen wurde, kann der Bootloader beendet und die Software gestartet werden.
So ein Bootloader hat zwar im Prinzip nicht viel zu tun, trotzdem steckt viel Arbeit in einem solchen Programm. Glücklicherweise haben sich bereits einige Experten damit beschäftigt, so dass ich auf ein fertiges Produkt zurückgreifen konnte. Die Firma Chip45 bietet ein kostenloses Paket mit fertigen Bootloadern für eine große Anzahl von AVR-Controllern an, die sich durch folgende Eigenschaften auszeichnen:
- Die Bootloader arbeiten weitgehend unabhängig von der verwendeten Taktfrequenz und erkennen selbstständig die richtige Geschwindigkeit beim Verbindungsaufbau.
- Die Bootloader arbeiten im reinen Textmodus und können damit Plattform-unabhängig mit einem Terminalprogramm bedient werden.
- Für Windows-Benutzer gibt es ein komfortables Kommunikations-Programm.
Einen kleinen Nachteil möchte ich dennoch nicht verschweigen: Die Installation einer Software über den Bootloader dauert relativ lange (im Falle der Tischuhr ungefähr eine Minute). Damit kann man aber leben, zumal so ein Software-Update nicht all zu häufig durchgeführt werden muss.
Die Installation des Bootloaders wird genauso wie die direkte Installation der Uhrensoftware über den ISP-Anschluss K2 durchgeführt. Nur wird hier nicht die Software der Tischuhr in den Mikrocontroller übertragen, sondern die Bootloader-Software. Die benötigte Software kann von der Chip45-Homepage geladen werden. Alternativ kann man den Bootloader auch über die folgende Tabelle laden:
Chip45 Bootloader ATmega128 UART1 v2.9i | Diese Version ist erforderlich, wenn die Tischuhr in der Originalschaltung aufgebaut wurde und der USB-Anschluss K4 verwendet wird. Die Kommunikation mit dem Controller erfolgt hier über USART1. |
Chip45 Bootloader ATmega128 UART0 v2.9i | Diese Version ist erforderlich, wenn die Tischuhr mit einem Crumb128-Modul (v4.0 oder v5.0) aufgebaut wurde und dessen USB-Anschluss verwendet wird. Die Kommunikation mit dem Controller erfolgt hier über USART0. Man kann übrigens das Crumb128-Modul gleich mit installiertem Bootloader bestellen, so dass man sich diesen Schritt sparen kann. |
Hinweis: Die in der oben stehenden Tabelle angebotenen Versionen sind nicht aktuell. Ich empfehle trotzdem, diese zu verwenden. Alle nachfolgenden Versionen bis zur v2.9m haben das Problem, dass die Uhr nach einem Stromausfall unter Umständen nicht startet. Ich habe die Entwickler auf dieses Problem hingewiesen, aber leider keine Antwort erhalten. Ansonsten gibt es auf der Chip45-Homepage immer das aktuelle Paket. Wichtig ist, dass der Bootloader für den ATmega128 verwendet wird.
Nach dem Transfer des Bootloader-HEX-Files müssen auch hier die Fuse-Bits noch angepasst werden.Bei Verwendung des AVR-Studios muss die Einstellung wie im linken Bild aussehen.
Verlangt die Programmiersoftware direkt die Werte der 3 Fusebit-Register, dann kann man diese aus dem unteren Teil des Bildes entnehmen:
EXTENDED = 0xFF
HIGH = 0x94
LOW = 0xBF
Nicht wundern: Nach der Übertragung des Bootloaders und der Einstellung der Fuse-Bits passiert auf dem Uhrendisplay nichts. Das ist vollkommen normal, denn die Uhrensoftware ist noch nicht installiert und der Bootloader greift nicht auf das Display zu.
Installation der Software über den Bootloader: Für diese Aktion muss zunächst die Uhr über ein USB-Kabel (A-Stecker auf B-Stecker) mit einem PC verbunden werden. Falls bisher noch kein USB-Gerät mit einem Chip aus der FT232-Serie angeschlossen war, verlangt Windows nach einem Treiber. Dieser kann von der FTDI Homepage geladen werden. Nach der erfolgreichen Installation des Treibers wird dem USB-Gerät ein virtueller COM-Port zugeordnet. Über diesen wird zukünftig die Kommunikation zwischen PC und Tischuhr stattfinden und deshalb sollte man sich die Nummer des Ports merken.Hinweis: Wird ein Crumb128 v4.0 oder v5.0 und dessen USB-Anschluss verwendet, dann ist ein USB-Kabel mit Mini-B-Stecker erforderlich. Außerdem wird hier ein anderer USB-Chip (CP2102) verwendet, welcher einen anderen Treiber benötigt.
Als nächstes müssen wir eine Verbindung zum Bootloader der Uhr herstellen. Obwohl bei dem hier verwendeten Bootloader ein Terminalprogramm auf dem PC genügen würde, empfehle ich die Nutzung des vom Hersteller angebotenen GUI-Programmes. Es steht auf der bereits erwähnten Chip45 Homepage als Datei chip45boot2 GUI V1.13 (oder neuer) zum Download zur Verfügung.Nach der Installation zeigt sich dieses Bild. Im Prinzip erklärt sich alles selbst: Auf der linken Seite wird der COM-Port eingestellt, welcher der Uhr zugeordnet wurde (in meinem Fall COM7). Gleich daneben wird die Baudrate eingestellt, hier empfiehlt sich die höchste Geschwindigkeit 230400. Zum Schluss wird noch über den Button Select Flash Hexfile die HEX-Datei mit der Uhrensoftware ausgewählt.
Jetzt muss eine Verbindung zum Bootloader der Tischuhr hergestellt werden. Dazu wird auf den Button Connect to Bootloader geklickt und chip45boot2 GUI wartet ungefähr 15 Sekunden lang auf eine Meldung des Bootloaders. Durch einen Druck auf den Reset-Taster S3 wird der Bootloader der Tischuhr aktiviert und die Verbindung hergestellt. Den erfolgreichen Aufbau der Verbindung erkennt man am grünen Aufleuchten des Status-Feldes rechts unten. Es ist nicht schlimm, wenn der Verbindungsaufbau nicht beim ersten Versuch klappt. Man kann die Prozedur jederzeit wiederholen.
Falls sich hier kein Erfolg einstellt, dann empfehle ich, die Uhrensoftware über den ISP-Anschluss zu installieren und im Abschnitt Kommunikation weiterzulesen. Vermutlich
gibt es ein Problem mit der USB-Kommunikation und in diesem Abschnitt wird beschrieben, wie man mit einem Terminalprogramm die Kommunikation testen kann.
Nach dem kompletten Aufbau der Hardware und der Installation der Software ist die Tischuhr grundsätzlich funktionsfähig. Die Anzeige auf dem Display sollte so aussehen wie im linken Bild,
möglicherweise sind alle Pixel invertiert. Deswegen braucht man sich jedoch keine Sorgen zu machen - das lässt sich alles konfigurieren.
Zunächst sind noch Einstellungen an der Hardware durchzuführen: Mit dem Trimmpoti R8 bzw. R19 (je nach Display-Version) wird der optimale Display-Kontrast eingestellt. Weiterhin sind noch die Jumper 1-3 zu beachten. Diese sind zur Konfiguration des Drehimpulsgebers vorgesehen und werden in der folgenden Tabelle beschrieben:
Jumper 1 | offen | Der verwendete Drehimpulsgeber arbeitet mit 2 Zustandsänderungen pro Drehschritt |
geschlossen | Der verwendete Drehimpulsgeber arbeitet mit 4 Zustandsänderungen pro Drehschritt | |
Jumper 2 | offen | Rechtsdrehung des Drehimpulsgebers bewegt die Menü-Markierung nach unten |
geschlossen | Rechtsdrehung des Drehimpulsgebers bewegt die Menü-Markierung nach oben | |
Jumper 3 | offen | Rechtsdrehung des Drehimpulsgebers vergrößert einen Wert |
geschlossen | Rechtsdrehung des Drehimpulsgebers verkleinert einen Wert |
Zur Erklärung: Es gibt 2 unterschiedliche Typen von Drehimpulsgebern, die sich in der Anzahl der ausgegebenen Zustandsänderungen bei jedem Drehschritt unterscheiden. Der von mir verwendete STEC12E08 gibt beispielsweise 4 Zustandsänderungen pro Drehschritt aus. In diesem Fall muss also der Jumper 1 geschlossen sein. Bei dem im Anzeigemodul 2 benutzten Typ EVQWTA-S20-15B sind es beispielsweise nur 2 Zustandsänderungen pro Drehschritt. Falls man einen solchen Impulsgeber verwendet, muss Jumper 1 geöffnet sein.
Der Drehimpulsgeber wird bei der Tischuhr in 2 Modi betrieben: Im Menü-Modus wird eine Markierung (Umrahmung) zur Funktionsauswahl bewegt und im Editor-Modus ein Wert geändert. Für beide Modi kann unabhängig voneinander die Bewegungsrichtung umgekehrt werden. Das ist sinnvoll, wenn sich der Drehimpulsgeber nicht vorn, sondern seitlich oder an der Oberseite befindet. Ich habe den Drehimpulsgeber an der rechten Seite untergebracht und hier erscheint es logisch, die Richtung im Menü-Modus umzukehren. Aus diesem Grund ist bei meiner Uhr der Jumper 2 geschlossen.Wenn man nicht sicher ist, dann kann man die richtige Einstellung auch durch Probieren ermitteln. Alle Jumper können bei laufender Uhr umgesteckt werden und die Änderungen werden sofort wirksam. Stellt man beispielsweise fest, dass bei jedem Drehschritt eine Menü-Position übersprungen wird, so hat man offensichtlich einen Geber mit 4 Zustandsänderungen und muss J1 schließen. Ähnlich kann man bei den Jumpern 2 und 3 die optimale Drehrichtung herausfinden.
Für die richtige Funktion der Uhr sind noch weitere Einstellungen erforderlich. Das betrifft z.B. den DCF77-Empfänger. Da diese Einstellungen über die Menü-Dialoge der Uhr erfolgen, habe ich diese im folgenden Abschnitt Bedienung beschrieben.
In diesem Abschnitt werden alle Funktionen der Tischuhr und die Bedienung beschrieben. Für die erste Einstellung der Uhr empfehle ich, zunächst den folgenden Abschnitt mit den allgemeinen Informationen zu lesen. Bei der anschließenden Beschreibung der Untermenüs sollte bei den Einstellungen 1 fortgefahren werden, damit die Uhr in einen definierten Grundzustand gebracht werden kann.
Grundsätzliches: Die Tischuhr wird über eine Menü-Steuerung bedient. Das heißt, über das Display und die beiden Bedienelemente (Drehimpulsgeber S1 und Einzeltaster S2) wird ein Menü-Dialog aufgerufen, dort die gewünschte Funktion ausgewählt und dann die entsprechende Einstellung geändert. Dieses Prinzip gilt für alle Einstellungen an der Uhr. Um die folgende Beschreibung etwas zu vereinfachen, habe ich die beiden Tasterfunktionen folgendermaßen benannt:
OK | Taster des Drehimpulsgebers S1 |
Zurück | Einzeltaster S2 |
Im normalen Betrieb der Tischuhr sieht die Anzeige ungefähr so aus wie im nebenstehenden Bild. Den größten Teil der Anzeige (128 x 128 Pixel) nimmt eine Analoguhr ein. Auf dem restlichen Teil (112 x
128 Pixel) werden weitere Informationen angezeigt: eine Digitaluhr mit Datum und Wochentag, 3 Alarme und die nächsten 3 Geburtstage. Außerdem wird dieser Bereich für die Menü-Dialoge verwendet.
Drückt man hingegen auf Zurück, dann wird der Menü-Modus wieder verlassen und die normale Uhrenanzeige ist wieder aktiv.
Ein Druck auf Zurück führt bei dieser Anzeige wieder zurück ins Hauptmenü.
Drückt man während des Editor-Modus auf Zurück, dann wird der Editor-Modus ebenfalls verlassen, allerdings wird die Änderung verworfen und der ursprüngliche Wert wieder
angezeigt.
Und hier noch einige Hinweise zum Drehimpulsgeber: Dieser verhält sich im Menü-Modus anders als im Editor-Modus. Im Menü-Modus kann die Markierung bis zur ersten bzw. letzten Menü-Option bewegt werden. Wird trotzdem weiter gedreht, dann bleibt die Markierung bei der ersten bzw. letzten Menü-Option stehen. Anders sieht das im Editor-Modus aus, hier kann über die Endwerte hinaus gedreht werden und dann wird einfach nach dem letzten Wert wieder von vorn begonnen und umgekehrt. So ist es oft möglich, den gewünschten Wert durch Drehen in die entgegengesetzte Richtung schneller zu erreichen. Eine weitere Besonderheit ist, dass ein schnelles Drehen von der Software erkannt wird und zu größeren Werte-Änderungen führt. Damit können große Wertebereiche, z.B. bei der Zeit-Eingabe sehr schnell durchlaufen werden.
Display: Das Display der Tischuhr ist (wie bereits erwähnt) in eine Analoguhr und einen Informationsbereich mit Digitaluhr, 3 Alarmen, 3 Geburtstagen und die Menü-Dialoge unterteilt. Die Analoguhr zeigt ständig die Uhrzeit mit 3 Zeigern an. Der Sekundenzeiger wird hier im Sekundentakt gesetzt, während Stunden- und Minutenzeiger kontinuierlich bewegt werden. Um die Analoguhr herum sind einige Symbole zu sehen, die den Status einiger Uhrenfunktionen anzeigen. Diese haben folgende Bedeutung:
[oben links] | Die Uhr hat keine gültige Zeit. Keine Einstellung der Alarme und Geburtstage möglich und keine Alarm-Signalisierung! | |
[oben links] | Kein DCF77-Empfang innerhalb der vergangenen 24 Stunden. | |
[oben links] | Die Uhr wurde in den vergangenen 24 Stunden mit dem DCF77-Signal synchronisiert oder über USB gestellt. | |
[oben rechts] | Die Uhr zeigt die Normalzeit (Winterzeit) an. | |
[oben rechts] | Die Uhr zeigt die Sommerzeit an. | |
[unten links] | Die Sound-Ausgabe ist ausgeschaltet (stumm). Alarme werden nur über die LED signalisiert. | |
[unten links] | Die Sound-Ausgabe ist eingeschaltet. | |
[unten rechts] | Die USB-Kommunikation ist aktiv. |
Alarme: Bei der Tischuhr können 4 unabhängige Alarme eingestellt werden, wobei ein Alarm für die Geburtstage reserviert ist. Jedem Alarm kann eine von 13 Melodien bzw. Tonfolgen sowie ein Lautstärkewert in 10 Stufen zugeordnet werden. Bei Auslösung eines Alarms wird eine Minute lang die eingestellte Melodie abgespielt, gleichzeitig blinkt die LED mit einer Frequenz von 2 Hz. Außerdem blinkt ein Symbol auf dem Display und weist auf den aktiven Alarm hin. Durch Drücken von OK oder Zurück kann das Alarmsignal vorzeitig beendet werden. Ansonsten blinken die LED und das Alarmsymbol solange, bis der ausgelöste Alarm durch Drücken von OK oder Zurück bestätigt wird.
Bei den 3 frei programmierbaren Alarmen können folgende Symbole angezeigt werden:
Der Alarm ist deaktiviert. Das Datum, die Uhrzeit und der Wochentag des letzten Alarms werden angezeigt. | |
Der Alarm wird einmal ausgelöst. Das Datum, die Uhrzeit und der Wochentag des Alarms werden angezeigt. | |
Der Alarm wird wiederholt ausgelöst. Das Datum, die Uhrzeit und der Wochentag des nächsten Alarms werden angezeigt. |
Die Alarme werden beim Tageswechsel reorganisiert. Das bedeutet, dass z.B. ein einmaliger Alarm vom Vortag durch Wechsel des Symbols deaktiviert wird. Weiterhin wird bei wiederholenden Alarmen der nächste Alarmzeitpunkt ermittelt und die Anzeige entsprechend aktualisiert.
Geburtstage: Die Tischuhr kann insgesamt 115 Geburtstagstermine verwalten. Dabei wird das vollständige Datum sowie der Vor- und Nachname mit jeweils 15 Zeichen gespeichert. Auch hier wird wie bei den Alarmen beim Tageswechsel eine Reorganisation durchgeführt und gegebenenfalls die Liste neu geordnet. In der normalen Anzeige erscheinen dann immer die ersten 3 Einträge dieser Liste. Die Einträge werden übrigens nicht im EEPROM umsortiert - dort behalten sie ihre Position bei. Es wird eine sortierte Index-Liste im RAM erstellt und auf diese zugegriffen. Nur die ersten 3 Einträge dieser Liste werden nach der Reorganisation zusätzlich im EEPROM gespeichert, damit sie nach einem Neustart sofort wieder angezeigt werden können.Wenn ein Geburtstag aktiv ist, dann wird dies mit einem kleinen blinkenden Dreieck-Symbol angezeigt. Im nebenstehenden Bild trifft dies auf Michael Richter zu, der 62 Jahre alt geworden ist. Bei den anderen Geburtstagen steht das Datum in Mini-Ziffern vor dem Namen. Der nächste wäre hier Ralf Rabe am 06.01.
Übrigens, die Namen und Geburtsdaten habe ich frei erfunden, Ähnlichkeiten mit realen Personen sind nicht beabsichtigt und daher rein zufällig.Wie schon erwähnt, kann der Vor- und Nachname jeweils bis zu 15 Zeichen lang sein. Leider ist der verfügbare Platz in der Uhrenanzeige recht knapp, so dass viele Namen im Anzeigefeld gekürzt werden müssen. Die Software macht dies automatisch und das sieht nicht immer gut aus. In Extremfällen muss man selbst Hand anlegen und einen der Namen passend abkürzen. Es ist übrigens auch möglich, nur den Vor- oder den Nachnamen einzugeben.
Für alle Geburtstage kann ein Alarm programmiert werden: hier kann man die Uhrzeit, eine von 13 Melodien bzw. Tonfolgen und einen Lautstärkewert festlegen. Wie bei den anderen Alarmen auch, ertönt dieser eine Minute lang und die LED blinkt. Im Gegensatz zu den 3 anderen Alarmen blinkt das Symbol den gesamten Tag. Generell werden alle Geburtstage am entsprechenden Tag signalisiert. Die einzige Ausnahme sind Geburtstage am 29.02., diese werden in Nicht-Schaltjahren erst am 01.03. signalisiert.Menü Hauptmenü
Das Hauptmenü wird durch Drücken des Tasters OK aufgerufen. Dabei stehen 9 Elemente zur Auswahl, die in der folgenden Übersicht hellblau dargestellt werden. Drückt man nach Auswahl eines dieser Elemente nochmals auf OK, dann erreicht man das rechts daneben dargestellte Untermenü.
Hauptmenü | ||
Uhrzeit | Uhr einstellen (Zeit und Datum) | |
Alarm 1 | Alarm einstellen (1) (Alarm-Modus, Zeit, Datum, Wochenprogramm, Melodie, Lautstärke) | |
Alarm 2 | Alarm einstellen (2) (Alarm-Modus, Zeit, Datum, Wochenprogramm, Melodie, Lautstärke) | |
Alarm 3 | Alarm einstellen (3) (Alarm-Modus, Zeit, Datum, Wochenprogramm, Melodie, Lautstärke) | |
Geburtstage | Geburtstagsliste 1 (8 Einträge pro Seite) - Geburtstagsliste 2 (4 Einträge pro Seite) - Geburtstag eingeben (Datum, Vorname, Nachname) | |
Informationen | Informationen (Software-Version, Zeit der letzten DCF77-Synchronisierung, Anzahl der Geburtstags-Einträge) | |
Einstellungen 1 | Einstellungen 1 (Allgemeine Einstellungen) | |
Einstellungen 2 | Einstellungen 2 (Einstellungen für DCF77-Empfänger und Geburtstags-Anzeige) | |
Einstellungen 3 | Einstellungen 3 (Einstellungen für Stunden-Gong) |
Im folgenden Abschnitt werden alle Untermenüs beschrieben.
Menü Uhrzeit Uhr einstellen
Über dieses Untermenü kann die Uhr manuell gestellt werden und es wird im Hauptmenü durch Auswahl der Uhrzeit erreicht. Normalerweise ist es nicht notwendig, die Uhr zu stellen, da sie sich die Zeit
über das DCF77-Signal holt. Diese Option ist aber trotzdem nützlich, wenn man nicht auf die DCF77-Synchronisierung warten will oder wenn Probleme beim DCF77-Empfang auftreten. Grundsätzlich kann man
die Uhr sogar ohne DCF77-Empfänger betreiben. Ich rate jedoch davon ab, da der Oszillator des Mikrocontrollers in dieser Schaltung nicht abgeglichen werden kann und somit Abweichungen von einigen
Sekunden pro Tag möglich sind.
Beim manuellen Einstellen der Uhr sollte beachtet werden, dass anschließend keine Symbole für den DCF77-Empfang und die Normal- bzw. Sommerzeit mehr angezeigt werden. Es erfolgt auch keine automatische Umstellung der Uhrzeit auf Sommerzeit und zurück. Falls im weiteren Betrieb irgendwann eine DCF77-Synchronisierung erfolgt, dann erscheinen die Symbole natürlich wieder.
Hier folgt die Beschreibung der Funktionen in diesem Untermenü:
Zeit | 00:00 - 23:59 | Hier wird die Uhrzeit eingestellt. Wie bereits weiter oben erwähnt, gibt es keine Grenzen und so kann man beispielsweise auf kurzem Weg von 23:30 Uhr über 0:00 auf 0:20 Uhr drehen. Auch kann man hier die Beschleunigung beim schnellen Drehen gut anwenden. |
Tag | 1 - 31 | Über diese Funktion wird der Kalendertag eingestellt. |
Monat | Januar - Dezember | Über diese Funktion wird der Monat im Klartext eingestellt. |
Jahr | 13 - 99 | Hier kann das Jahr zweistellig eingegeben werden. Das Jahrhundert ist fest auf 20 eingestellt und lässt sich auch nicht ändern. Ich glaube einfach nicht, dass die Tischuhr das Jahr 2100 erleben wird :-) |
Zeit übernehmen | Wird diese Funktion ausgeführt, dann prüft die Software zunächst die Plausibilität der eingegeben Daten. Wenn alles passt, dann wird die Uhr gestellt und die Anzeige wechselt in den normalen Modus. Der Wochentag wird hier übrigens mit einer so genannten Wochentagsformel berechnet und automatisch gesetzt. Tritt beim Plausibilitätstest ein Fehler auf, dann wird automatisch die Menü-Markierung auf den Tag gesetzt und der Editor-Modus mit dem maximal möglichen Tageswert des gewählten Monats voreingestellt. Erst wenn der Fehler korrigiert wird, lässt sich die Zeit übernehmen. | |
DCF77-Sync starten | Die Uhr empfängt und verarbeitet ständig im Hintergrund das DCF77-Signal, so dass man sich normalerweise nicht um die Synchronisierung kümmern muss. Durch den kompakten Aufbau der Uhr wirken allerdings auch viele Störsignale der Uhrenkomponenten auf den DCF77-Empfang, was im Extremfall dazu führt, dass gar kein Signal mehr empfangen wird. Für solche Fälle ist diese Funktion gedacht. Sie schaltet das Display und die Hintergrundbeleuchtung aus und somit auch die größten Störquellen. Danach wird eine halbe Stunde lang auf ein gültiges DCF77-Signal gewartet und während dieser Zeit werden die empfangenen Impulse durch kurzes Aufblitzen der LED angezeigt. Sobald die Uhr über 3 aufeinander folgende Minuten ein fehlerfreies Signal empfangen hat, wird das Display wieder eingeschaltet und die normale Anzeige erscheint wieder. |
Menü Alarm 1
Alarm einstellen (1)
Menü Alarm 2
Alarm einstellen (2)
Menü Alarm 3
Alarm einstellen (3)
Zur Einstellung eines Alarms sollte zuerst über die Option Alarm der gewünschte Alarmtyp ausgewählt werden. Danach aktiviert die Software die für den Alarmtyp relevanten Datenfelder. Außerdem werden einige Felder mit aktuellen Daten vorausgefüllt. Ändert man nachträglich den Alarmtyp, dann kann es passieren, dass einige Werte durch neue Voreinstellungen ersetzt werden. Das betrifft den Tag, den Monat, das Jahr und das Wochen-Progr. (Wochen-Programm). Weitere Einstellungen wie die Zeit und die Sound-Einstellungen werden nicht automatisch verändert.
Alarm (Alarmtyp) | Aus | Der Alarm ist ausgeschaltet. Weitere Parameter werden zwar angezeigt, können aber nicht ausgewählt oder verändert werden. |
Einmal | Der Alarm ist eingeschaltet und wird genau einmal ausgelöst. Nach Auswahl dieser Einstellung zeigen die Datenfelder als Voreinstellung das aktuelle Datum an. Bei diesem Alarmtyp ist die Uhrzeit und das komplette Datum relevant. | |
Täglich | Der Alarm ist eingeschaltet und wird täglich ausgelöst. Bei diesem Alarmtyp ist nur die Uhrzeit relevant. | |
Wöchentlich | Der Alarm ist eingeschaltet und wird entsprechend des eingestellten Wochen-Programms ausgelöst. Nach Auswahl dieser Einstellung wird das Wochen-Programm auf den aktuellen Wochentag voreingestellt. Bei diesem Alarmtyp ist die Uhrzeit und das Wochen-Programm relevant. Es sind hier neben den einzelnen Wochentagen auch Gruppen wie Mo-Fr, Mo-Sa und Sa-So möglich. | |
Monatlich | Der Alarm ist eingeschaltet und wird am festgelegten Tag im Monat ausgelöst. Nach Auswahl dieser Einstellung wird der heutige Tag voreingestellt. Hier ist neben der Zeit nur der Tag relevant. Es gibt noch eine Besonderheit: Wird ein Tag zwischen 28 und 31 eingestellt, dann setzt die Software die Alarm-Auslösung immer auf den letzten Tag des Monats. | |
Zeit | 00:00 - 23:59 | Hier wird die Uhrzeit für die Alarmauslösung eingestellt. Diese Zeit gilt bei wiederholenden Alarmen für alle nachfolgenden Alarme gleichermaßen. |
Tag | 1 - 31 | Hier wird der Kalendertag für die Alarmauslösung eingestellt. Diese Angabe lässt sich nur bei einmaligen und monatlichen Alarmen auswählen und verändern. |
Monat | Januar - Dezember | Hier wird der Monat für die Alarmauslösung eingestellt. Diese Angabe wird nur bei einmaligen Alarmen benötigt und kann deshalb auch nur bei diesem Alarmtyp ausgewählt und verändert werden. |
Jahr | aktuell - 2099 | Hier wird das Jahr für die Alarmauslösung eingestellt. Auch diese Angabe gilt nur für einmalige Alarme. Einstellbar ist das Jahr im Bereich vom aktuellen Jahr bis 2099. |
Wochen-Progr. (Wochen-Programm) | Mo, Di, Mi, Do, Fr, Sa, So, Mo-Fr, Mo-Sa, Sa-So | Hier werden die Tage für wöchentliche Alarmauslösungen ausgewählt. |
Über dieses Symbol kann eine von 13 Melodien bzw. Tonfolgen für den akustischen Alarm ausgewählt werden. |
Die folgenden Melodien und Tonfolgen stehen zur Auswahl. Diese sind entweder sehr kurz oder gegenüber dem Original stark gekürzt worden. Ich hoffe, es ist für jeden etwas dabei:
- Buzzer - ein typisches Weckersignal, bestehend aus 4 kurzen Tönen
- Close Encounters (of the third kind) bzw. Unheimliche Begegnung der dritten Art - die bekannte Tonfolge aus dem gleichnamigen Film
- Westminster - die bekannten Glockenschläge aus London
- Crockett's Theme (Jan Hammer) - bekannt aus der Serie Miami Vice
- Axel F. (Harold Faltermeyer) - bekannt aus dem Film Beverly Hills Cop
- Popcorn (Hot Butter)
- Blue Peter (Mike Oldfield)
- Around The World (ATC)
- Für Elise (Ludwig van Beethoven)
- Happy Birthday (Mildred J. & Patty Smith Hill)
- Gong 1 - einfacher Gongschlag
- Gong 2 - Gongschlag mit 2 Tönen
- Gong 3 - Gongschlag mit 3 Tönen
Über dieses Symbol kann die Lautstärke im Bereich von 0 - 10 eingestellt werden. Beim Wert 0 bleibt der Lautsprecher stumm und es erfolgt nur eine optische Signalisierung über die LED. |
Über dieses Symbol kann die Sound-Ausgabe getestet werden. Die gewählte Melodie wird einmal mit der gewählten Lautstärke-Einstellung abgespielt. |
Während des Abspielens blinkt das kleinere Symbol neben dem Lautsprecher. Ein Druck auf OK beendet das Abspielen vorzeitig.
Menü Geburtstage Geburtstagsliste 1 Geburtstagsliste 2 Geburtstag eingeben
Für die Verwaltung der Geburtstage wurden die Menü-Seiten mehrstufig angelegt. Das mag auf den ersten Blick etwas verwirrend sein, ist es aber eigentlich nicht, da man sich geradlinig mit einer
Auswahl und OK in die nächste Seite bewegt und mit Zurück wieder zur vorherigen Seite. Auf dem nebenstehenden Bild wurde über die Hauptmenü-Option
Geburtstage die Geburtstagsliste 1 aufgerufen. Diese Liste dient zur Übersicht und zeigt die nächsten 8 Geburtstagseinträge an. Das Anzeigeformat ist
hier identisch mit dem in der normalen Uhrenanzeige.
Möchte man weitere Information über einen bestimmten Eintrag haben, dann wählt man diesen Eintrag aus (in diesem Fall Eintrag Nummer 4) und gelangt dann mit OK in die
Geburtstagsliste 2.
In diesem Menü kann ein Geburtstagseintrag editiert werden. Dazu wird mit dem Drehimpulsgeber das gewünschte Datenfeld ausgewählt und mit OK in den Editor-Modus gewechselt. Die
folgende Übersicht beschreibt die einzelnen Datenfelder:
Tag | 1 - 31 | Hier wird der Kalendertag des Geburtstages eingestellt. |
Löschen | Wählt man diese Einstellung aus (liegt hinter 31 bzw. vor 1) und drückt anschließend OK, dann wird der komplette Eintrag unwiederbringlich gelöscht. Gleichzeitig springt die Anzeige in die übergeordnete Geburtstagsliste 2 zurück. | |
Monat | Januar - Dezember | Hier wird der Geburtsmonat im Klartext eingestellt. |
Jahr | 0 - aktuell | Hier wird das Geburtsjahr eingestellt. Das Jahr kann vom aktuellen Jahr aus nur in die Vergangenheit geändert werden, wobei man bis zum Jahr 0 zurückgehen kann. |
Unbekannt | Diese Einstellung (liegt hinter dem aktuellen Jahr bzw. vor 0) kann man benutzen, wenn zwar Tag und Monat des Geburtstages bekannt sind, nicht aber das Jahr. Ein solcher Geburtstag wird später immer ohne Altersangabe angezeigt. | |
Vorname | Hier wird der Vorname eingegeben, der bis zu 15 Zeichen lang sein kann. Für die Eingabe wird ein spezieller Editor-Modus aktiviert, der weiter unten beim Erfassen eines neuen Geburtstages beschrieben wird. | |
Nachname | Hier wird der Nachname eingegeben, der ebenfalls bis zu 15 Zeichen lang sein kann. Auch hier folgen noch weitere Erklärungen. |
Bei der Inbetriebnahme der Uhr sind zunächst alle Geburtstagseinträge leer. Die Geburtstagsliste 1 sieht dann ähnlich aus wie im nebenstehenden Bild, nur sind dann alle 8
sichtbaren Einträge leer - egal an welcher Listenposition man sich gerade befindet.
Als Beispiel soll hier der Gustav Färber eingetragen werden, der am 23. August 1987 geboren wurde. Im nebenstehenden Bild wurden bereits die Geburtsdaten erfasst. Weiterhin wurde im Feld
Vorname auf OK gedrückt. Dabei wird in einen speziellen Editor-Modus geschaltet, der sich zunächst wie in diesem Bild präsentiert. Wichtig: Alle
weiteren Eingaben in diesem Modus erfolgen nun über den Drehimpulsgeber und dessen Taster OK. Wird während der Eingabe auf Zurück gedrückt, dann beendet
sich der Editor-Modus und der eingegebene Name wird verworfen.
Danach zeigt sich dieses Bild. Das G wurde jetzt übernommen und die Cursor-Position um eine Stelle nach rechts gerückt. Gleichzeitig hat sich der Cursor in ein
a gewandelt. Dies passiert immer an der zweiten Cursor-Position, um auch hier schneller an die Kleinbuchstaben zu kommen. Weitere Zeichenvorschläge erfolgen nicht mehr (außer an
der letzten Position, dazu später mehr). Da unser Name mit einem u weitergeht, wird der Impulsgeber nun bis zum u gedreht.
Upps, hier ist uns wohl ein kleiner Fehler unterlaufen. Kein Problem - für diesen Fall wird der Impulsgeber einfach weitergedreht, bis das Zeichen im nebenstehenden Bild erscheint. Dieses ist das
Löschzeichen und wenn man jetzt auf OK drückt, dann wird das Zeichen links vom Cursor gelöscht.
Auf die gleiche Weise wird nun noch der Nachname eingegeben.
Hier noch einige Informationen zum Editor-Modus für die Datenfelder Vorname und Nachname: Es stehen folgende Zeichen zur Verfügung, die auch genau in dieser Reihenfolge erscheinen:
-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜabcdefghijklmnopqrstuvwxyzäöüßDaran schließen sich noch 2 Symbole an, die folgende Bedeutung haben:
Bei diesem Symbol wird das Zeichen links vom Cursor gelöscht und der Cursor um eine Position nach links gerückt. | |
Mit diesem Symbol wird die Eingabe beendet und der eingegebene Name gespeichert. |
Die folgende Übersicht fasst noch einmal die Besonderheiten zusammen:
- Bei der Eingabe eines Namens in einem leeren Feld wird der Cursor auf das Zeichen A voreingestellt.
- An der zweiten Zeichenposition wird der Cursor immer auf das Zeichen a voreingestellt.
- Nach der Eingabe des 15. Zeichens wird der Cursor immer auf das OK-Symbol voreingestellt.
- Beim Editieren eines vorhandenen Namens wird der Cursor immer auf das OK-Symbol voreingestellt.
- Wenn das ausgewählte Zeichen nicht mehr in die Zeile passen würde, dann wird das Zeichen nicht angenommen.
- Es ist nur an der Cursor-Position möglich, Zeichen zu ergänzen oder zu löschen. Bei einem Fehler am Anfang des Namens müssen zunächst alle Zeichen bis zu dieser Position gelöscht werden, um dem Fehler korrigieren zu können.
- Der Taster Zurück führt zum Abbruch. Der Editor-Modus wird beendet, die Eingabe verworfen und der vorherige Name erscheint wieder im Datenfeld.
- Es ist möglich, nur den Vor- oder den Namenamen einzugeben.
Menü Informationen Informationen
Zu diesem Untermenü gibt es nicht viel zu sagen. Im oberen Bereich wird die vollständige Software-Version angezeigt. Der mittlere Bereich zeigt an, wann die Uhr zum letzten Mal mit dem DCF77-Signal synchronisiert wurde. Ganz unten kann man sich über die Belegung des Geburtstags-Speichers informieren.
Über die Taster OK oder Zurück gelangt man wieder zurück ins Hauptmenü.
Dies ist das erste von 3 Untermenüs, über das die Uhr konfiguriert werden kann. Dieses Menü beinhaltet allgemeine Funktionen, die in der nachfolgenden Tabelle beschrieben werden:
Sprache | Deutsch | Alle Texte werden in deutscher Sprache ausgegeben. |
Englisch | Alle Texte werden in englischer Sprache ausgegeben. | |
Hinweis: Die Namen der Melodien bei der Alarm-Einstellung werden immer in der Originalsprache ausgegeben. | ||
Analog-Uhr | Links | Die Analoguhr wird auf der linken Display-Seite angezeigt. |
Rechts | Die Analoguhr wird auf der rechten Display-Seite angezeigt. | |
Display | Normal | Die Pixel werden normal in den Display-Speicher geschrieben. |
Invers | Die Pixel werden invertiert in den Display-Speicher geschrieben. | |
Hinweis: Bei den meisten Displays empfiehlt sich die Einstellung Normal. Bei dem von mir verwendeten Display sieht die Einstellung Invers jedoch besser aus. Die optimale Einstellung sollte man einfach ausprobieren. | ||
Nacht-Sync | Aus | Das Display bleibt ständig eingeschaltet. |
Ein | Das Display wird in der Nacht zwischen 3:00 Uhr und 3:30 Uhr ausgeschaltet. Das Display und die dazugehörigen Inverter-Schaltungen können den
DCF77-Empfang so stark stören, dass keine Synchronisierung mehr möglich ist. Diese Option ermöglicht in solchen Fällen eine sichere DCF77-Synchronisierung, die auch den Wechsel zwischen Normal-
und Sommerzeit zeitnah berücksichtigt. Die Uhr läuft in diesem Zeitraum normal weiter und auch Alarme werden signalisiert, gegebenenfalls wird die Synchronisierung abgebrochen. Weiterhin wird 2 Minuten nach Einschalten oder Reset der Uhr das Display für maximal 30 Minuten zur DCF77-Synchronisierung ausgeschaltet. Durch Drücken einer der Taster kann dieser Vorgang jedoch jederzeit abgebrochen werden. | |
Nacht-Modus | Aus | Die Hintergrundbeleuchtung des Displays bleibt ständig mit voller Helligkeit eingeschaltet. Die 3 folgenden Optionen auf dieser Seite haben keine Wirkung. |
Ein | Das Display wird in einem festgelegten Zeitraum ausgeschaltet bzw. auf einen bestimmten Helligkeitswert gedimmt. Die Parameter können über die folgenden 3 Optionen eingestellt werden. Wird während des aktiven Nacht-Modus ein Alarm ausgelöst oder ein Taster betätigt, dann schaltet die Anzeige sofort auf die volle Helligkeit. 2 Minuten nach der Alarmauslösung bzw. nach der letzten Tastenbedienung schaltet die Anzeige wieder in den Nacht-Modus zurück. | |
Hinweis: Ich habe den Begriff Nacht-Modus gewählt, weil man diesen im Allgemeinen in der Nacht anwenden wird. Es ist aber auch ein beliebiger Zeitraum am Tag einstellbar. | ||
Nacht-Helligkeit | 0 - 255 | Hier wird der Helligkeitswert für den Nacht-Modus eingestellt. Dieser wird während des Nacht-Zeitraums (in den folgenden 2 Optionen einstellbar) aktiv. In der restlichen Zeit hat die Hintergrundbeleuchtung immer die volle Helligkeit. Der Wert 0 schaltet die Hintergrundbeleuchtung aus, der Wert 255 entspricht der vollen Helligkeit. Nach der Eingabe eines Wertes (Auswahl und Bestätigung mit OK) wird die Hintergrundbeleuchtung für 1 Sekunde in die gewählte Helligkeitsstufe geschaltet, damit man die Einstellung gleich prüfen kann. |
Hinweis: Bei LED-Hintergrundbeleuchtungen kann man uneingeschränkt alle Werte zwischen 0 und 255 verwenden. Bei Beleuchtungen mit CCFL oder EL-Folien ist Vorsicht geboten. Ob sich diese dimmen lassen, hängt vom verwendeten Inverter ab. Im Zweifelsfall sollte man lieber den Wert 0 einstellen und somit in der Nacht die Beleuchtung ganz abschalten. | ||
Nacht von | 00:00 - 23:59 | Diese Einstellung bestimmt den Zeitpunkt zur Abschaltung bzw. Dimmung der Hintergrundbeleuchtung. |
Nacht bis | 00:00 - 23:59 | Diese Einstellung bestimmt den Zeitpunkt zur Rückschaltung auf die volle Helligkeit. |
Menü Einstellungen 2 Einstellungen 2
In diesem Untermenü sind Einstellungen für den DCF77-Empfänger und die Geburtstagsanzeige zu finden. Die beiden DCF77-Optionen sind enorm wichtig - nur bei richtiger Einstellung ist ein Datenempfang
und somit das automatische Stellen der Uhr möglich. Die folgende Tabelle beschreibt die möglichen Einstellungen in diesem Menü:
DCF-Signal | Normal | Diese Einstellung muss gewählt werden, wenn der DCF77-Empfänger Low-Impulse ausgibt. |
Invers | Diese Einstellung muss gewählt werden, wenn der DCF77-Empfänger High-Impulse ausgibt. | |
DCF-Pull-up | Aus | Diese Einstellung muss gewählt werden, wenn der DCF77-Empfänger einen Ausgang hat, der sowohl Low- als auch High-Pegel ausgeben kann. |
Ein | Diese Einstellung muss gewählt werden, wenn der DCF77-Empfänger einen Open-Collector bzw. Open-Drain Ausgang besitzt. | |
Einstellung bei Pollin 810054 - DCF-Signal Invers und
DCF-Pull-up Aus Einstellung bei Reichelt DCF77 MODUL - DCF-Signal Invers und DCF-Pull-up Aus Einstellung bei Conrad 641138 - DCF-Signal Normal/Invers (abhängig vom benutzten Ausgang) und DCF-Pull-up Ein Einstellung bei ELV 091610 - DCF-Signal Normal und DCF-Pull-up Ein Hinweis: Wenn man sich nicht sicher ist, dann muss man einfach alle 4 Kombinationen ausprobieren. Sehr hilfreich ist dabei im Menü Uhrzeit Uhr einstellen die Option DCF77-Sync starten. Bei richtiger Einstellung muss die LED im Sekundentakt kurz aufblitzen. Hat man den Eindruck, die LED ist hauptsächlich an und verlischt kurz im Sekundentakt, dann muss die Einstellung DCF-Signal geändert werden. Ist die LED ständig an oder aus, dann sollte man die Einstellung DCF-Pull-up Aus versuchen. Noch ein Hinweis zum Pollin-Empfänger: Dieser beginnt erst 2 Minuten nach dem Einschalten mit dem Empfang, gibt dann aber kontinuierlich Impulse aus. | ||
Geb-Sort (Geburtstage-Sortierung) | Datum | Die Geburtstagsliste wird chronologisch nach dem Datum sortiert, an erster Stelle erscheint der nächste fällige Geburtstag. Diese Einstellung wird empfohlen, um beim Aufruf der Geburtstagsliste einen zeitlichen Überblick über die nächsten Geburtstage zu bekommen. |
Vorname | Die Geburtstagsliste wird alphabetisch nach dem Vornamen sortiert. Um eine möglichst schnelle Sortierung zu erreichen, werden nur die ersten beiden Zeichen des Vornamens ausgewertet. Sind diese gleich, dann entscheidet das erste Zeichen vom Nachnamen über die Reihenfolge. Diese Einstellung ist sinnvoll, wenn man einen bestimmten Eintrag in der Geburtstagliste sucht. | |
Nachname | Die Geburtstagsliste wird alphabetisch nach dem Nachnamen sortiert. Um eine möglichst schnelle Sortierung zu erreichen, werden nur die ersten beiden Zeichen des Nachnamens ausgewertet. Sind diese gleich, dann entscheidet das erste Zeichen vom Vornamen die über Reihenfolge. Auch diese Einstellung ist bei der Suche nach einem bestimmten Eintrag sinnvoll. | |
Hinweis: Die 3 Geburtstage, die in der normalen Uhrenanzeige zu sehen sind, werden unabhängig von dieser Einstellung immer chronologisch sortiert - zeigen also die nächsten 3 fälligen Geburtstage an. | ||
Geb-Namen | Vor/Nach | Die Anzeige der Geburtstage erfolgt in der Reihenfolge Vorname Nachname. |
Nach/Vor | Die Anzeige der Geburtstage erfolgt in der Reihenfolge Nachname Vorname. | |
Geb-Alter | Aus | Es erfolgt keine Anzeige des Alters bei den Geburtstags-Einträgen (außer in der ausführlichen Geburtstagsliste 2). |
Ein | Bei jedem Geburtstags-Eintrag wird zusätzlich das Alter angezeigt - bezogen auf den kommenden Geburtstag (sofern ein Geburtsjahr eingegeben wurde). Das führt dazu, dass weniger Platz für den Namen zur Verfügung steht und dieser gegebenenfalls gekürzt wird. Abhängig vom benötigten Platz für das Alter werden dann einfach Zeichen weggelassen. | |
Geb-Alarm | 00:00 - 23:59 | Bei einem anstehenden Geburtstag wird zur eingestellten Zeit ein Alarm ausgelöst. Dabei wird eine Minute lang eine Melodie bzw. Tonfolge abgespielt und die LED blinkt mit einer Frequenz von 2 Hz. Durch Druck auf einen der beiden Taster kann die akustische Signalisierung vorzeitig beenden werden. |
Aus | Anstehende Geburtstage werden nicht signalisiert. Diese Einstellung befindet sich zwischen 23:59 und 00:00 |
Über dieses Symbol kann eine von 13 Melodien bzw. Tonfolgen für den Geburtstagsalarm festgelegt werden. Es steht hier die gleiche Auswahl wie bei den Alarmen 1-3 zur Verfügung | |
Über dieses Symbol kann die Lautstärke im Bereich von 0 - 10 eingestellt werden. Beim Wert 0 bleibt der Lautsprecher stumm und es erfolgt nur eine optische Signalisierung über die LED. | |
Über dieses Symbol kann die Sound-Ausgabe getestet werden. Die gewählte Melodie bzw. Tonfolge wird einmal mit der gewählten Lautstärke-Einstellung abgespielt. Ein Druck auf OK beendet das Abspielen vorzeitig. |
Menü Einstellungen 3 Einstellungen 3
Dieses Untermenü ist das letzte der 3 Einstellungs-Menüs und hier sind Optionen für die Sound-Ausgabe und den Stunden-Gong zu finden. Diese werden im Folgenden beschrieben:
Sound | Aus | Bei dieser Einstellung ist die Sound-Ausgabe komplett ausgeschaltet. Alarme werden nur noch optisch durch die LED signalisiert. Diese Option kann verwendet werden, wenn man vorübergehend nicht gestört werden möchte (Mute-Funktion). |
Ein | Bei dieser Einstellung ist die Sound-Ausgabe eingeschaltet, alle Alarme werden optisch und akustisch signalisiert. | |
Gong | Aus | Der Stunden-Gong ist ausgeschaltet. Die folgenden 4 Optionen auf dieser Seite haben keine Wirkung. |
Ein | Der Stunden-Gong ist eingeschaltet und ertönt einmal zu jeder vollen Stunde innerhalb des über die folgenden Optionen eingestellten Zeitraumes. Hinweis: Steht einer der 3 Alarme oder ein Geburtstagsalarm zeitgleich mit dem Stunden-Gong an, dann wird der Gong unterdrückt. | |
Gong von | 00:00 - 23:00 | Beginn des Zeitraumes für den Stunden-Gong. Es ist nur der Stundenwert einstellbar, der Minutenwert ist auf 00 festgelegt. |
Gong bis | 00:00 - 23:00 | Ende des Zeitraumes für den Stunden-Gong. Es ist nur der Stundenwert einstellbar, der Minutenwert ist auf 00 festgelegt. |
Über dieses Symbol kann eine von 13 Melodien bzw. Tonfolgen für den Stunden-Gong festgelegt werden. Empfohlen wird hier Gong 1, Gong 2 oder Gong 3. | |
Über dieses Symbol kann die Lautstärke im Bereich von 0 - 10 eingestellt werden. Beim Wert 0 bleibt der Lautsprecher stumm. | |
Über dieses Symbol kann die Sound-Ausgabe getestet werden. Die gewählte Melodie bzw. Tonfolge wird einmal mit der gewählten Lautstärke-Einstellung abgespielt. Ein Druck auf OK beendet das Abspielen vorzeitig. |
Dieser Abschnitt beschäftigt sich mit dem USB-Anschluss der Tischuhr und den Kommunikationsmöglichkeiten mit einem PC. Eine dieser Möglichkeiten ist das Installieren der Uhren-Software über einen Bootloader, welche bereits im Abschnitt Inbetriebnahme ausführlich beschrieben wurde. Weiterhin wurde ein umfangreiches Kommando-Interface eingebaut, mit dem die Uhr komplett fernbedient werden kann. Damit können alle Einstellungen aus der Uhr ausgelesen und auch wieder zur Uhr gesendet werden.
Zunächst ist es erforderlich, die Uhr über den USB-Anschluss mit dem PC zu verbinden. Dazu wird ein übliches USB-Kabel mit A-Stecker auf der PC-Seite und auf B-Stecker auf der Uhrenseite benötigt. Falls die Uhr mit dem USB-Anschluss eines Crumb128-Moduls verbunden wird, dann ist hier ein Mini-USB-B-Stecker erforderlich. Bei der ersten Verbindung ist die Installation eines Treibers erforderlich (siehe auch den Abschnitt Inbetriebnahme). Nach erfolgreicher Treiber-Installation sollte man im Windows-Gerätemanager einen neuen Anschluss USB Serial Port (COMx) vorfinden, wobei die Nummer des COM-Ports für die weitere Arbeit wichtig ist.Anschließend kann z.B. der Tischuhr-Manager v2.00 von Andreas Hickmann und Daniel Mollnau installiert und gestartet werden. Diese Software wird über das Setup-Programm im Download-Paket installiert und läuft unter Windows XP und Windows 7. Das Programm ist weitgehend selbsterklärend und bietet folgende Funktionen:
- Uhrzeit aus der Tischuhr auslesen, Uhrzeit zur Tischuhr senden, aktuelle PC-Zeit zur Tischuhr senden
- Geburtstage aus der Tischuhr auslesen, neue Geburtstage zur Tischuhr senden, Geburtstage aus der Tischuhr löschen, Geburtstagsliste drucken
- Alarme aus der Tischuhr auslesen, Alarme zur Tischuhr senden
- Konfiguration aus der Tischuhr auslesen, Konfiguration zur Tischuhr senden
Vielen Dank an die beiden Software-Entwickler. Für diejenigen, die alles genau wissen wollen, habe ich im folgenden Abschnitt alle Details der Tischuhr-Kommunikation beschrieben.
Zum Testen der Kommunikation wird ein Terminal-Programm benötigt, ich verwende hier das kostenlose Tera Term Pro. Das nebenstehende Bild zeigt die Einstellungen der seriellen Schnittstelle. Bei der Einstellung Port: muss der COM-Port eingetragen werden, über den die USB-Verbindung zur Tischuhr hergestellt wurde. Dieser kann (wie bereits erwähnt) über den Windows-Gerätemanager ermittelt werden. In meinem System ist das COM7. Alle anderen Einstellungen können unverändert übernommen werden.
Auf diesem Bild sind weitere Einstellungen für das Terminal zu sehen. Wichtig ist an dieser Stelle nur die Einstellung Lokales Echo. Diese bewirkt, dass die Eingaben am PC im
Terminalfenster mitgeschrieben werden. Ohne diese Einstellung müsste man alle Kommandos blind eintippen.
Bei jedem Kommando, welches von der Tischuhr bearbeitet wird, erscheint das nebenstehende Symbol im Bereich der Analoguhr (unten rechts). Ungefähr 5 Sekunden nach der Ausführung des letzen Kommandos
verschwindet das Symbol wieder.
Wenn die Tischuhr einen gültigen Kommando-Typ und sowie ein Fragezeichen oder einen Doppelpunkt als zweites Zeichen empfängt, dann wird das Kommando von der Uhr bearbeitet und eine Antwort gesendet. Im Falle eines Lese-Kommandos enthält die Antwort die gewünschten Daten. Bei einem Schreib-Kommando besteht die Anwort immer aus 2 Zeichen: dem Kommando-Typ und einer anschließenden 0 oder 1, welche folgende Bedeutung hat:
0 Das Kommando wurde erfolgreich bearbeitet.1 Das Kommando wurde nicht bearbeitet, die empfangenen Daten sind nicht plausibel und wurden verworfen.
Jede Kommando-Antwort der Uhr wird außerdem am Zeilenende mit Carriage Return (ASCII 13) und Line Feed (ASCII 10) abgeschlossen. Wird kein gültiges Kommando erkannt, dann erfolgt keine Antwort und alle empfangenen Zeichen werden verworfen.
Hinweis: Es kann immer nur ein Kommando bearbeitet werden. Empfängt die Tischuhr während der Bearbeitung eines Kommandos ein weiteres, dann wird dieses ignoriert. Ein Kommando kann sowohl über die Schnittstelle USART1 als auch über USART0 empfangen werden (je nach Hardware der Tischuhr). Die Kommando-Antwort wird immer an die Schnittstelle gesendet, von der auch das Kommando empfangen wurde. Die folgende Übersicht beschreibt alle Kommandos der Tischuhr:Lesen der Versionsinformation
Kommando | v? | ||||||||
Antwort | v:vx.xxx, dd.MM.aaaa | ||||||||
Beispiel | v:v1.100, 06.07.2013 | ||||||||
Parameter |
|
Lesen der Uhrzeit
Kommando | t? | ||||||||||||||
Antwort | t:hh:mm:ss,aaaa-MM-dd,z | ||||||||||||||
Beispiel | t:22:05:07,2013-07-14,1 | ||||||||||||||
Parameter |
|
Schreiben der Uhrzeit
Kommando | t:hh:mm:ss,aaaa-MM-dd,z | ||||||||||||||
Beispiel | t:22:05:07,2013-07-14,1 | ||||||||||||||
Antwort | t0 Ok t1 Syntax-Fehler, Daten nicht plausibel | ||||||||||||||
Parameter |
|
Lesen eines Alarms
Kommando | 1? | ||||||||||||||||||||
Antwort | 1:t,hh:mm,aaaa-MM-dd,w,p,ss,vv | ||||||||||||||||||||
Beispiel | 1:1,16:40,2013-07-20,6,5,01,05 | ||||||||||||||||||||
Parameter |
|
Hinweis: Grundsätzlich werden alle Alarm-Daten aus dem Speicher der Tischuhr gelesen. Abhängig vom Alarm-Typ sind deshalb einige Datenfelder nicht relevant. Bei Serien-Alarmen (täglich, wöchentlich,
monatlich) werden immer die Daten des nächsten Alarms ausgegeben.
Schreiben eines Alarms
Kommando | 1:t,hh:mm,aaaa-MM-dd,w,p,ss,vv | ||||||||||||||||||||
Beispiel | 1:1,16:40,2013-07-20,6,5,01,05 | ||||||||||||||||||||
Antwort | 10 Ok 11 Syntax-Fehler, Daten nicht plausibel | ||||||||||||||||||||
Parameter |
|
Hinweis: Grundsätzlich müssen alle Alarm-Daten in der nebenstehenden Form zur Tischuhr gesendet werden. Abhängig vom Alarm-Typ ist es dann erforderlich, nicht relevante Datenfelder mit Dummy-Daten zu
füllen. Einige Datenfelder, wie z.B. der Wochentag werden von der Tischuhr automatisch ersetzt.
Lesen der Geburtstage
Kommando | b? | ||||||||||
Antwort | b:aaaa-MM-dd,Vorname,Nachname b:Geburtstagsliste ist leer | ||||||||||
Beispiel | b:1949-01-08,Anna,Richter | ||||||||||
Parameter |
|
Ist die Geburtsliste leer, dann sendet die Tischuhr einen leeren Eintrag als Antwort: b:
Schreiben eines Geburtstages
Kommando | b:aaaa-MM-dd,Vorname,Nachname | ||||||||||
Beispiel | b:1949-01-08,Anna,Richter | ||||||||||
Antwort | b0 Ok b1 Syntax-Fehler, Daten nicht plausibel, Speicher voll | ||||||||||
Parameter |
|
b:????-01-08,Anna,Richter | Eingabe ohne Jahr |
b:1949-01-08,,Richter | nur den Nachnamen speichern |
b:1949-01-08,Anna, | nur den Vornamen speichern |
Löschen eines Geburtstages
Kommando | b:aaaa-MM-00,Vorname,Nachname | ||||||||||
Beispiel | b:1949-01-00,Anna,Richter | ||||||||||
Antwort | b0 Ok b1 Syntax-Fehler, Daten nicht plausibel, Eintrag nicht gefunden | ||||||||||
Parameter |
|
Lesen der Konfiguration
Kommando | c? | |||||||||||||||||||||||||||||||||||||||||||
Antwort | c:aaa,bb,cc,dd,ee,fff,gg,hh,ii,jj,kk,ll,mm,nn,oo | |||||||||||||||||||||||||||||||||||||||||||
Beispiel | c:087,00,22,00,08,010,08,22,11,04,41,00,16,09,05 | |||||||||||||||||||||||||||||||||||||||||||
Parameter |
|
Schreiben der Konfiguration
Kommando | c:aaa,bb,cc,dd,ee,fff,gg,hh,ii,jj,kk,ll,mm,nn,oo | |||||||||||||||||||||||||||||||||||||||||||
Beispiel | c:087,00,22,00,08,010,08,22,11,04,41,00,16,09,05 | |||||||||||||||||||||||||||||||||||||||||||
Antwort | c0 Ok c1 Syntax-Fehler, Daten nicht plausibel | |||||||||||||||||||||||||||||||||||||||||||
Parameter |
|
Lesen eines Bildschirmfotos
Kommando | s? | ||
Antwort | s:x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x | ||
Beispiel | s:88,10,0,0,30,12,16,1,0,16,96,240,0,2,32,76 | ||
Parameter |
|
The making of (Januar 2010): Hier möchte ich einige Worte zur Entstehung der Uhr loswerden. Am Anfang hatte ich es schon erwähnt: Die Motivation für die Tischuhr war zum einen, dass ich immer wieder mal eine eBay-Auktion verpasst habe und zum anderen, dass ich noch zwei schöne grafische Displays hatte, die auf eine Aufgabe warteten. Auch fehlte trotz vieler Uhren im Haus noch eine praktische Uhr für den Schreibtisch und so war die Idee für die Tischuhr geboren. Das technische Konzept war dann relativ schnell klar: die Hardware konnte ähnlich realisiert werden wie das einige Jahre zuvor entwickelte Anzeigemodul 2 und auch bei der Software muss nicht alles neu entwickelt werden.
Bei der Gehäuseform waren mehrere Varianten in der engeren Wahl. So war eine flache Form ähnlich wie ein PDA oder Smartphone angedacht, was aber wegen der vielen Bauteile eher die Form eines Quaders angenommen hätte. Auch eine Konstruktion wie ein Laptop wurde verworfen. Schließlich wurde eine solide Gehäuseform geplant und die Platine zugeschnitten. Anschließend wurden die Halterungen für das Display hergestellt und alles provisorisch zusammengebaut, um die Bauteile ohne Kollisionen auf der Platine platzieren zu können. So entstand zunächst eine Basis mit Display und die Bedienelemente wurden einfach lose über ein Kabel angeschlossen. Beim Sound hatte ich zu dieser Zeit noch keinen Plan und so wurden diese Bauteile erst mal weggelassen.Nun begann die Software-Entwicklung. Das ehrgeizige Ziel war: Die gesamte Software sollte in C geschrieben werden. Das war für mich absolutes Neuland, alle bisherigen Projekte waren ausschließlich in AVR-Assembler geschrieben worden. Allerdings bin ich beim Anzeigemodul 2 an die Grenzen gestoßen - hier ist der Code mit über 20000 Programmzeilen so umfangreich geworden, dass man ihn praktisch kaum noch überblicken kann. Also begann ich mit ersten Versuchen in C und war überrascht, wie schnell man hier ein kleines Programm schreiben kann. Auch die Einsicht in den erzeugten Assembler-Code zeigt, dass der Compiler sehr guten Code generiert, den man selbst kaum besser machen kann. Somit war das Vorurteil "C-Programme sind langsam" auch ausgeräumt. Natürlich wird nicht immer perfekter Code erzeugt, manchmal werden bei FOR-Schleifen 16-Bit-Werte verwendet, obwohl es mit 8-Bit-Werten schneller ginge, aber der Controller hat genug Reserven. Oft steckt der Teufel im Detail: So muss man sich erst an die spezielle Art der String-Verwaltung gewöhnen und einiges beim Zugriff auf den Flash- und EEPROM-Bereich des Controllers beachten. Aber es war die richtige Entscheidung, denn mit Assembler hätte die Programm-Entwicklung mit Sicherheit viele Monate länger gedauert.
Ich habe für die Programm-Entwicklung der v1.000 übrigens folgende Komponenten benutzt:
- Atmel AVR-Studio 4.18
- WinAVR-20090313 (GNU GCC-Compiler)
- Diamex DX-ISP (USB ISP-Programmer von SR-Tronic)
Das AVR-Studio erkennt die Installation von WinAVR und man kann somit im AVR-Studio sowohl Assembler- als auch C-Software schreiben. Der verwendete USB-Programmer (auf den mich ein Bastler-Kollege aufmerksam machte) kann ebenfalls direkt vom AVR-Studio aus verwendet werden und ist zudem noch sehr schnell im Vergleich zu den simplen Adaptern und der Software PonyProg. Letztendlich findet also die gesamte Programmierarbeit ausschließlich im AVR-Studio statt.
Ein hartes Stück Arbeit bei der Programmentwicklung war die Analoguhr. Das Ziffernblatt war relativ schnell gemacht, es wurde von einem Delphi-Programm gezeichnet und mit einem Grafikprogramm habe ich dieses weiter bearbeitet und mit Zahlen versehen. Das Bild wurde dann ebenfalls mit einem kleinen Delphi-Programm in eine Reihe Zahlen gewandelt, die sich am Format des Display-Speichers orientieren und somit als Bitmap für das Ziffernblatt verwendet werden können. Sehr knifflig waren jedoch die Zeiger. Das Problem dabei ist, dass man einem AVR-Controller keine komplizierten Kreisberechnungen in Echtzeit zumuten kann. Man muss also mit Tabellen arbeiten und hier hatte ich wochenlang verschiedenes probiert. Die endgültige Lösung war dann eine große Sinus-Tabelle, die die Koordinaten eines Viertel-Kreises mit verschiedenen Radien im Raster von 0,5° enthält. Aus dieser Tabelle werden dann für jeden der 3 Zeiger entsprechend der Länge und des augenblicklichen Winkels die Endpunkt-Koordinaten des Zeigers ermittelt. Jetzt wird vom Mittelpunkt aus eine Linie zum ermittelten Endpunkt gezeichnet (Bresenham-Algorithmus) und fertig ist der Zeiger. Naja, nicht ganz - bei dem breiteren Minuten- und Stundenzeiger werden zusätzlich um jeden Bresenham-Punkt weitere Pixel nach einem bestimmten Muster gesetzt.Im weiteren Verlauf habe ich überlegt, welche Informationen auf dem Hauptbild angezeigt werden sollen und entschied mich dann für 3 Alarme und 3 Geburtstage. Dazu sollte noch die Zeit in großen Ziffern und das Datum erscheinen. Aus den 7 Textzeilen und 2 Trennlinien ergab sich dann der verbleibende Platz für die Großziffern der Digitaluhr. Hier habe ich auch gleich 2 Pixel für den zukünftigen Auswahl-Rahmen eingeplant. Die Bedienung des Anzeigemoduls 2, welches ja als technisches Vorbild dient, ist aus heutiger Sicht nicht unbedingt optimal und so wollte ich bei der Tischuhr einen anderen Weg gehen. Ich bin mit dem Ergebnis sehr zufrieden, aber ich bin ja auch voreingenommen :-)
Nach und nach wurden dann die einzelnen Menüs erstellt. Vieles hat sich im Laufe der Entwicklung auch wieder verändert. So gab es ursprünglich nur ein Menü Einstellungen, was aber irgendwann nicht mehr ausreichte und auf 2 Seiten erweitert werden musste. Bei der Erstellung der Geburtstagslisten und sind mir dann noch weitere Ideen gekommen und so sind es am Ende 3 Seiten für die Einstellungen geworden.Die Sound-Funktionen sind erst relativ spät hinzugekommen und das betrifft sowohl die Hard- als auch die Software. Zunächst war geplant, die Lautstärke über ein Widerstandsnetzwerk einstellbar zu machen. Das wurde aber wieder verworfen, weil es aufwändig war und immer wieder Störungen zu hören waren. Eher zufällig bin ich dann auf den TDA7052A aufmerksam geworden. Der eignet sich optimal für diese Uhr, weil er mit 5V zufrieden ist, eine ausreichende Ausgangsleistung besitzt, wenig Außenbeschaltung benötigt und einen Steuereingang für die Lautstärke mit einer passenden Kennlinie verfügt. Jetzt mussten noch zwei geeignete Controller-Ausgänge gewählt und Anpassungen durchgeführt werden. Es hat auch hier etwas gedauert, bis das Optimum gefunden wurde, denn es waren auch an der Software einige Änderungen erforderlich. Letztendlich klappte die Lautstärke-Steuerung hervorragend und ich überlegte, ob man nicht gleichzeitig auch die Hüllkurve des Tons damit beeinflussen könnte. Auch hier fanden wieder einige Experimente statt und ich realisierte es letztlich so, dass man mit 3 Bytes eine Tonhöhe (Frequenz), eine Tonlänge und eine Ausklingzeit definieren kann. Aus einer Folge von diesen Dreiergruppen programmierte ich dann insgesamt 10 Melodien - größtenteils mithilfe von Noten, die ich im Netz fand.
Irgendwann war die Software im Prinzip fertig und es wurde mit dem Feinschliff begonnen, der weitere Wochen in Anspruch genommen hat. Auch beim Schreiben dieser Dokumentation sind mir noch einige Punkte aufgefallen, die man verbessern kann. Bei dieser Gelegenheit kam mir auch noch die Idee, auf das aufwändige Fotografieren der einzelnen Bildschirmseiten zu verzichten und stattdessen einfach den Bildschirm-Inhalt des Displays auszulesen. So wurde also noch schnell eine einfache USB-Kommunikation implementiert. Das Ziel ist aber eine saubere Kommunikation über Interrupt, die zu einem späteren Zeitpunkt realisiert wird. Nun liegt aber das vorläufige Endergebnis vor und ich bin schon auf die Kritiken gespannt :-)Einige Wochen nach der Veröffentlichung: Die Hintergrundbeleuchtung meines Displays arbeitete mit einer CCFL. Diese ließ sich zwar prinzipiell in den Nachtstunden gedimmt betreiben, allerdings war immer ein leichtes Surren zu hören und ich hatte irgendwie kein gutes Gefühl dabei. Auch war das Licht nicht ganz gleichmäßig - eine Seite der Röhre leuchtete immer ein wenig heller als die andere. Also wurde beschlossen, eine LED-Beleuchtung zu bauen. Ich entschied mich für ultrahelle weiße 3mm-LEDs mit relativ weitem Abstrahlwinkel und einem separaten 220Ω SMD-Vorwiderstand für jede LED. Entsprechend der Breite des Displays und dem vorgegebenen Lochraster von 5,08mm ergab das genau 27 LEDs. Das Ergebnis hat mich wirklich positiv überrascht und der Stromverbrauch lag mit ca. 250mA auch im grünen Bereich. Allerdings war das Display jetzt viel zu hell, so dass ich zusätzlich noch 47Ω in Reihe geschaltet habe. Im Endergebnis ist das Display immer noch heller als die ursprüngliche CCFL-Variante, sehr gleichmäßig ausgeleuchtet und mit einem Strom von 42mA ein echter Energiesparer. Wenn ich mal etwas Zeit übrig habe, werde ich einige Bilder vom Umbau ergänzen.
Fortsetzung im Juli 2013: Schon länger wurde für die Tischuhr ein Stunden-Gong gewünscht, außerdem sollte endlich der USB-Anschluss eine sinnvolle Verwendung finden. Also wurde die Arbeit an der Software fortgesetzt. Da das für die bisherige Software verwendete AVR-Studio 4 veraltet ist, wurde für die weitere Arbeit das Atmel Studio 6.1 verwendet. Hier gab es schon erste Probleme, weil der im Atmel Studio 6.1 enthaltene C-Compiler die EEPOM-Daten anders verwaltet. Die Folge war, dass die Tischuhr zwar mit der im neuen Studio 6.1 erzeugten Software funktionierte, aber weder die Einstellungen, noch die Geburtstagsdaten gefunden wurden. So musste die Uhren-Software erst mal so geändert werden, dass die EEPROM-Daten nicht mehr vom Compiler, sondern vom Programmierer verwaltet werden. Damit war die erste Hürde genommen.Für die Programm-Entwicklung der v1.100 wurden übrigens folgende Komponenten benutzt:
- ATMEL Studio 6.1 mit integriertem GCC
- AVR Dragon (USB-Programmer und Debugger von Atmel)
Im weiteren Verlauf wurden zunächst 3 kleinere Fehler beseitigt. Anschließend kam der Stunden-Gong an die Reihe. Für diesen Zweck waren die 10 Melodien nicht so gut geeignet, deshalb wurden diese um 3 einfache Tonfolgen erweitert. Man muss diese aber nicht zwingend benutzen und kann auch eine der Melodien für den Gong verwenden, ebenso wie man die 3 neuen Tonfolgen auch für Alarme oder den Geburtstag verwenden kann. Für die Einstellung der Gong-Parameter hat sich das Menü Einstellungen 3 angeboten, da hier noch ausreichend Platz vorhanden war.
Relativ aufwändig war die Realisierung der USB-Kommunikation. Zunächst wurden für das Senden und Empfangen der Daten jeweils Puffer und Zeiger angelegt und entsprechende Interrupt-Routinen geschrieben. Damit läuft die gesamte Kommunikation praktisch im Hintergrund ab. Weiterhin musste ich berücksichtigen, dass sowohl über USART0 als auch über USART1 kommuniziert werden muss. Normalerweise läuft die Kommunikation über die Schnittstelle USART1 des ATmega128, welche über einen FT232RL (IC7) mit dem USB-Anschluss verbunden ist. Einige Tischuhren wurden jedoch (auf meine Empfehlung hin) mit einem Crumb128-Modul aufgebaut und dessen USB-Anschluss kommuniziert mit USART0. Ich habe die Software also so geschrieben, dass die Tischuhr mit beiden USARTs arbeiten kann. Wird ein Kommando von einem USART empfangen, dann wird dieses bearbeitet und die Antwort auf dem gleichen USART gesendet, auf dem auch empfangen wurde. Für die Kommunikation habe ich mir eine Kommandosprache ausgedacht, die es ermöglicht, alle Daten der Uhr auszulesen und auch wieder zur Uhr zu senden. Somit lässt sich die Uhr komplett von einem PC aus konfigurieren und verwalten.