ebps.de.vu > Schaltungen > AVR > einfache Funkuhr
Diese Schaltung ist eine einfache Funkuhr für den Zeitzeichensender DCF77 in Mainflingen. Die Zeit wird auf vier (oder sechs) Siebensegmentanzeigen angezeigt, sobald ein gültiges Telegramm empfangen wurde, auf Tastendruck kann auch das Datum (Monat und Tag) angezeigt werden. Für der Anzeige gibt es aufgrund der universellen Software unzählige Möglichkeiten. Solange keine Zeit empfangen wurde, werden nützliche Informationen über den Empfang angezeigt (Empfangene Bits, letzter Fehler, letztes empfangenes Bit). Der Doppelpunkt der Anzeige zeigt währenddessen das DCF77-Eingangssignal an. Sobald eine Zeit empfangen wurde, blinkt er regelmäßig oder leuchtet dauerhaft (einstellbar).
Den Mittelpunkt der Uhr bildet ein ATTiny2313 (der alte AT90S2313 kann auch verwendet werden). Die Anzeige wird, je nach Typ und gewünschter Helligkeit, direkt oder über Transistoren angeschlossen. In der Software kann festgelegt werden, an welchem Port die Segmente angeschlossen sind (PORTB oder PORTD), am anderen Port werden dann die gemeinsamen Anschlüsse der Anzeige angeschlossen. Der DCF77-Empfänger wird wahlweise mit PD2 oder PD6 verbunden, die Eingänge für die Schalter/Taster zum Anzeigen des Datums und zum Umschalten der Zeitanzeige auf UTC sind frei wählbar. Wird für die Datumsanzeige ein Schalter verwendet, springt die Anzeige alle 5 Sekunden zwischen Zeit und Datum um, wenn der Schalter geschlossen ist, bei einem Taster wird nach einem kurzen Druck das Datum für 5 Sekunden angezeigt, bevor die Anzeige zur Zeit zurückspringt.
In dieser Version wurde fast alles weggelassen, was nicht unbedingt nötig war. Es gibt keine Segmenttreiber-Transistoren und der DCF77-Empfänger stammt aus einem billigen Funkwecker (und verträgt keine 5 V, deshalb wird die über zwei Siliziumdioden abfallende Spannung von ca. 1,4 V verwendet). Anstelle eines Doppelpunktes oder dem Dezimalpunkt der zweiten Anzeige wird als Trennzeichen eine fünfte Siebensegmentanzeige zwischen Stunden und Minuten verwendet, da die benutzte Anzeigenplatine bereits fünf Anzeigen enthielt. Das Segment g dieser zusätzlichen Anzeige ist so angeschlossen, als sei es der Dezimalpunkt von Anzeige 2, damit sich die Helligkeit der Anzeige nicht durch eine weitere Multiplexing-Stelle reduziert.
;Einstellungen für Versionen ab 2011-06-29: .equ USE_SECONDS = 0 .equ TWELVE_HOURS = 0 .equ FLASHING_COLON = 0 .equ SEG_PORT = PORTB .equ SEG_INV = 0 .equ SEG_A = 0 .equ SEG_B = 1 .equ SEG_C = 2 .equ SEG_D = 3 .equ SEG_E = 4 .equ SEG_F = 5 .equ SEG_G = 6 .equ SEG_DP = 7 .equ ZERO_BLANKING = 1 .equ COM_PORT = PORTD .equ COM_INV = 0 .equ COM0 = 3 .equ COM1 = 4 .equ COM2 = 5 .equ COM3 = 6 .equ COM4 = 8 .equ COM5 = 8 .equ COM_COLON = 1 .equ COM_AM = 1 .equ COM_PM = 1 .equ COM_H10 = 0 .equ SW_PORT = PORTD .equ SW_DATE = 0 ;Schalter nicht im Schaltplan, offen = immer Uhrzeit .equ SW_UTC = 1 ;Schalter nicht im Schaltplan, offen = immer Lokalzeit .equ DATE_TIMEOUT = 5 .equ DCF_INVERTED = 1 .equ DCF_PULLUP = 1 ;externer Pullup kann weggelassen werden .equ DCF_USE_INT0 = 1 .equ DIGIT_COLON = 1<<SEG_DP .equ DIGIT_AM = 0 .equ DIGIT_PM = 0
In dieser Version müssen von der ersten Anzeige (Stunden-Zehner, ganz links) nur die Segmente b und c angeschlossen werden. Ich habe für diese Version eine Anzeige verwendet, bei der die restlichen Segmente überhaupt nicht mit LEDs bestückt waren, zwei der anderen Segment-Eingänge waren allerdings für den Doppelpunkt und einen Dezimalpunkt hinter der dritten Stelle verwendet worden. Das Segment d wurde bei der ersten Anzeige also als Doppelpunkt zwischen den Anzeigen 2 und 3 angezeigt, während es auf den restlichen drei Anzeigen ein normales Segment war. Im Schaltplan ist eingezeichnet, wie Sie diese Version mit normalen Siebensegmentanzeigen und 2 LEDs für den Doppelpunkt nachbauen können. Soll hingegen der dp der zweiten Anzeige verwendet werden, müssen die beiden Ports am Controller vertauscht werden, da PORTD nur 7 Ausgänge für die sieben Segmente hat. Gleiches gilt für die Verwendung der neuen Software (Versionen nach 0.4), da hier der DCF77-Empfänger an PD2 oder PD6 angeschlossen sein muss.
Natürlich ist es auch möglich, eine Fluoreszenzanzeige zu verwenden, sofern diese siebensegment-förmige Anzeigen hat. In meiner Schaltung habe ich eine VFD aus dem Pollin-Anzeigensortiment, die vier Siebensegmentanzeigen, einen Punkt zwischen der zweiten und dritten Anzeige sowie mehrere Texte am unteren Rand enthält. Der Punkt ist mit dem Text "Time" gekoppelt, der deshalb auch immer mit aufleuchtet, wenn der Punkt eingeschaltet wird. Mit einer VFD sind übrigens immer Transistoren sowohl für die Segmente als auch für die Gitter (gemeinsame Anschlüsse) notwendig, da die Fluoreszenzanzeige nur mit höheren Spannungen als 5 V richtig funktioniert. Um PNP-Transistoren verwenden zu können, muss man außerdem den Trick anwenden, den Spannungsregler für die 5 V nicht wie üblich in die positive Leitung zu legen, sondern die Masse des AVR gegenüber der eigentlichen Schaltungsmasse so anzuheben, dass der AVR genau 5 V bekommt. Das kann man ganz einfach mit einem 79(L)05-Spannungsregler für negative Spannungen (gegenüber dem Masse-Anschluss des Reglers, der hier mit der positiven Versorgungsspannung verbunden wird, die für die VFD und den AVR gleich ist) erledigen. Die Heizung der VFD habe ich über einen Widerstand angeschlossen, der aber recht heiß wird, da die Heizung dieser VFD einen recht hohen Strom bei nur geringer Spannung benötigt (100 mA bei ca. 1,6 V).
;Einstellungen für Versionen ab 2011-06-29: .equ USE_SECONDS = 0 .equ TWELVE_HOURS = 0 .equ FLASHING_COLON = 0 .equ SEG_PORT = PORTB .equ SEG_INV = 1 .equ SEG_A = 0 .equ SEG_B = 1 .equ SEG_C = 2 .equ SEG_D = 3 .equ SEG_E = 4 .equ SEG_F = 5 .equ SEG_G = 6 .equ SEG_DP = 7 .equ ZERO_BLANKING = 1 .equ COM_PORT = PORTD .equ COM_INV = 1 .equ COM0 = 3 .equ COM1 = 4 .equ COM2 = 5 .equ COM3 = 6 .equ COM4 = 8 .equ COM5 = 8 .equ COM_COLON = 1 .equ COM_AM = 1 .equ COM_PM = 1 .equ COM_H10 = 0 .equ SW_PORT = PORTD .equ SW_DATE = 0 .equ SW_UTC = 1 ;Schalter nicht im Schaltplan, offen = immer Lokalzeit .equ DATE_TIMEOUT = 5 .equ DCF_INVERTED = 1 ;je nach Empfänger .equ DCF_PULLUP = 1 ;je nach Empfänger .equ DCF_USE_INT0 = 1 .equ DIGIT_COLON = 1<<SEG_DP .equ DIGIT_AM = 0 .equ DIGIT_PM = 0
Die Software bietet am Programmanfang vielfältige Einstellungen für diverse Möglichkeiten. In dieser Tabelle sind alle Einstellungen für die Software ab Version 2011-06-29 beschrieben.
Name | Beschreibung | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
USE_SECONDS |
Sekunden-Anzeige aktivieren. Standardeinstellung ist 0 (deaktiviert). | ||||||||||
TWELVE_HOURS |
12-Stunden-Anzeige auswählen. Standardeinstellung ist 0 (24-Stunden-Anzeige). | ||||||||||
FLASHING_COLON |
Frequenz des blinkenden Doppelpunks. Mögliche Einstellungen sind 0 (dauerleuchtend), 1 (1 Hz) und 2 (0,5 Hz). | ||||||||||
SEG_PORT |
Port für die Segmente. Kann entweder auf PORTB oder PORTD eingestellt werden, COM_PORT muss dann auf den jeweils anderen Port gesetzt werden. |
||||||||||
SEG_INV |
Invertierte Segment-Ausgänge (für PNP-Transistoren oder direkt angeschlossene Kathoden). | ||||||||||
SEG_A ... SEG_DP |
Portpins für die einzelnen Segmente. Wird der DP-Ausgang nicht verwendet (z.B. weil PORTD als Segment-Port verwendet wird), so sollte die Einstellung SEG_DP auf 8 gesetzt werden. |
||||||||||
ZERO_BLANKING |
Vornullenunterdrückung. Mögliche Werte sind 0 (keine Vornullenunterdrückung), 1 (nur für die Uhrzeit), 2 (nur für das Datum) und 3 (für Uhrzeit und Datum). | ||||||||||
COM_PORT |
Port für die gemeinsamen Anschlüsse der Anzeigestellen (Stellenauswahl). Kann entweder auf PORTB oder PORTD eingestellt werden, SEG_PORT muss dann auf den jeweils anderen Port gesetzt werden. |
||||||||||
COM_INV |
Invertierte Ausgänge für die Anzeigestellenausgänge (für PNP-Transistoren oder direkt angeschlossene Anzeigen mit gemeinsamer Kathode). | ||||||||||
COM0 ... COM5 |
Portpins für die jeweiligen Anzeigestellenausgänge. COM4 wird nur verwendet, wenn COM_COLON , COM_AM und/oder COM_PM auf 4 gesetzt ist oder die Sekundenanzeige aktiviert ist, COM5 wird ausschliesslich bei aktivierter Sekundenanzeige verwendet. Nicht verwendete Ausgänge sollten auf 8 gesetzt werden. |
||||||||||
COM_COLON |
Anzeigestelle, auf der sich der Doppelpunkt befindet. Wird für den Doppelpunkt eine eigene Anzeigestelle verwendet, so muss der Wert 4 verwendet werden; eine eigene Anzeigestelle für den Doppelpunkt bei einer Uhr mit Sekunden ist nicht möglich. | ||||||||||
COM_AM |
Anzeigestelle für Symbol "AM" (Vormittag). Das Symbol leuchtet unabhängig von 12- oder 24-Stunden-Modus zwischen 00:00 und 11:59 auf. | ||||||||||
COM_PM |
Anzeigestelle für Symbol "PM" (Nachmittag). Das Symbol leuchtet unabhängig von 12- oder 24-Stunden-Modus zwischen 12:00 und 23:59 auf. | ||||||||||
COM_H10 |
Anzeigestelle für die Stunden-Zehner-Anzeige. Standardeinstellung ist 0, im 12-Stunden-Modus kann jedoch auch eine andere Anzeigestelle angegeben werden, von welcher dann das dp-Segment für die Segmente b und c der Stunden-Zehner-Anzeige verwendet wird. Diese Option ist sinnvoll, wenn besonders viele Portpins für andere Funktionen benötigt werden. | ||||||||||
SW_PORT |
Port, an welchem die Taster/Schalter angeschlossen sind. | ||||||||||
SW_DATE |
Portpin, an dem der "Datum anzeigen"-Taster/Schalter angeschlossen ist. Ist dieser Taster/Schalter nicht vorhanden, sollte die Einstellung auf 8 gesetzt werden. | ||||||||||
SW_UTC |
Portpin, an dem der UTC-Schalter angeschlossen ist. Ist dieser Schalter nicht vorhanden, sollte die Einstellung auf 8 gesetzt werden. | ||||||||||
DATE_TIMEOUT |
Anzeigedauer für das Datum. Standardeinstellung sind 5 Sekunden. | ||||||||||
DCF_INVERTED |
Invertiertes DCF77-Eingangssignal. Wert 0 bedeutet nicht-invertiert (positive Impulse). | ||||||||||
DCF_PULLUP |
Internen Pullup-Widerstand für den DCF77-Eingang einschalten. Der Pullup wird für Empfänger mit Open-Collector-Ausgang benötigt (Conrad, ELV) und sollte für Empfänger mit CMOS-Ausgang (Reichelt) deaktiviert werden. | ||||||||||
DCF_USE_INT0 |
Eingang für den DCF77-Empfänger. Wert 0 bedeutet PD6 (ICP, Pin 11), Wert 1 bedeutet PD2 (INT0, Pin 6). | ||||||||||
DIGIT_COLON , DIGIT_AM und DIGIT_PM |
Segmente, die für den Doppelpunkt, das "AM"- bzw. das "PM"-Symbol eingeschaltet werden müssen. Zum Deaktivieren des Doppelpunkts bzw. eines Symbols kann die jeweilige Einstellung auf 0 gesetzt werden. | ||||||||||
DATE01 |
Anzeige auf den ersten beiden Anzeigestellen (Stunden) während der Datumsanzeige. Wird bei 12-Stunden-Anzeige nicht COM0 für die Stunden-Zehner-Anzeige verwendet, kann diese nur eine Eins oder garnichts anzeigen, daher sind dann nur die Möglichkeiten Monat oder Wochentag erlaubt. Der Wochentag wird als Zahl zwischen 1 (Montag) und 7 (Sonntag) angezeigt.
|
||||||||||
DATE23 |
Anzeige auf den zweiten beiden Anzeigestellen (Minuten) während der Datumsanzeige. Mögliche Einstellungen siehe DATE01 . |
||||||||||
DATE45 |
Anzeige auf den dritten beiden Anzeigestellen (Sekunden) während der Datumsanzeige. Mögliche Einstellungen siehe DATE01 . |