Dit project beschrijft de realisatie van een digitale klok op basis van ATtiny MCU's (412, 814 of 1614). De klok synchroniseert automatisch elke 30 minuten met het Europese DCF77-tijdsignaal via een ELV DCF-2 ontvanger, waarbij een externe DS3231 RTC zorgt voor een nauwkeurige backup.
De tijd en andere informatie worden weergegeven op een 8-cijferig display (7- of 14-segment) aangestuurd door een HT16K33 controller. De software is asynchroon opgebouwd in lagen en biedt via een drukknop verschillende modi, zoals de weergave van datum, seconden, temperatuur (via een DS18B20 sensor) en batterijspanning. Het systeem kan worden gecompileerd met MegaTinyCore in de Arduino IDE.
DCF77-klok met RTC-backup en 8-cijferig alfanumeriek display op ATtiny 412/814/1614
Hardware en Compatibiliteit
De gebruikte MCU is een ATtiny 814 of 1614. Indien er geen externe RTC, seriële debugging en OneWire worden gebruikt, kan er ook een ATtiny 412 worden gebruikt (waarbij 99% van de flash-ruimte wordt benut).
Het circuit kan worden gevoed door een LiPo-cel. Als de spanning onder de 3,0 V daalt, wordt de spanning weergegeven als een indicator voor een lage batterijspanning.
Software en Werking
Synchronisatie en Architectuur
Een synchronisatie met de DCF-tijd wordt elke 30 minuten op de achtergrond uitgevoerd, en direct na het inschakelen.
De software maakt gebruik van een gelaagde aanpak:
- Laag niveau: DCF-object met interrupt-handler.
- Middenniveau: State machine voor het ontvangen van data.
- Hoger niveau: Beheer van het display en de gebruikersinterface.
De werking is volledig asynchroon; er is geen blokkerende code aanwezig.
Gebruikersinterface
De interface is gebaseerd op een drukknop:
- Korte druk: Selecteer display-modi: tijd met datum | tijd met seconden | tijd met temperatuur | tijd met batterijspanning.
- Lange druk: Handmatige DCF77-resynchronisatie opvragen.
Technische Specificaties
Systeeminstellingen
- MCU-klok: 8 MHz.
- Gebruikte timers:
- TCA0 (meting DCF-pulslengte)
- TCD0 (millis)
- RTC (2 Hz periodieke interrupt)
Componenten
- Externe RTC: DS3231 met batterij-backup; levert een 32K klok voor de interne RTC.
- 8-cijferig display (I2C): DFRobot 7-segment, of een zelfgebouwd 14-segment display.
- Externe DCF77-ontvanger: ELV DCF-2 (MAS6180 AM-ontvanger).
- Temperatuursensor: DS18B20 met externe pull-up.
Pinbezetting
- PA3: Input, DCF-signaal, input-pullup ingeschakeld, actief-laag signaal.
- PA4: Input/Output, gebruikt door OneWireNG met temperatuursensor DS18B20, externe pull-up 4,7K.
- PA6: Output, LED die het DCF-inputsignaal reflecteert.
- PA7: Input, knop voor modusselectie, actief-laag met input-pullup ingeschakeld.
- PB0: I2C CLK voor display.
- PB1: I2C DATA voor display.
Ontwikkeling en Softwarevereisten
Het project kan worden gecompileerd met MegaTinyCore in de Arduino IDE.
Vereiste externe bibliotheken:
- RTClib (Adafruit fork)
- OneWireNG
- DS18B20_int
Referentie voor zelfgebouwd alfanumeriek display: http://www.technoblogy.com/show?2ULE
DCF77-klok met RTC-backup en 8-cijferig alfanumeriek display op ATtiny 412/814/1614
Hardware en Compatibiliteit
De gebruikte MCU is een ATtiny 814 of 1614. Indien er geen externe RTC, seriële debugging en OneWire worden gebruikt, kan er ook een ATtiny 412 worden gebruikt (waarbij 99% van de flash-ruimte wordt benut).
Het circuit kan worden gevoed door een LiPo-cel. Als de spanning onder de 3,0 V daalt, wordt de spanning weergegeven als een indicator voor een lage batterijspanning.
Software en Werking
Synchronisatie en Architectuur
Een synchronisatie met de DCF-tijd wordt elke 30 minuten op de achtergrond uitgevoerd, en direct na het inschakelen.
De software maakt gebruik van een gelaagde aanpak:
- Laag niveau: DCF-object met interrupt-handler.
- Middenniveau: State machine voor het ontvangen van data.
- Hoger niveau: Beheer van het display en de gebruikersinterface.
De werking is volledig asynchroon; er is geen blokkerende code aanwezig.
Gebruikersinterface
De interface is gebaseerd op een drukknop:
- Korte druk: Selecteer display-modi: tijd met datum | tijd met seconden | tijd met temperatuur | tijd met batterijspanning.
- Lange druk: Handmatige DCF77-resynchronisatie opvragen.
Technische Specificaties
Systeeminstellingen
- MCU-klok: 8 MHz.
- Gebruikte timers:
- TCA0 (meting DCF-pulslengte)
- TCD0 (millis)
- RTC (2 Hz periodieke interrupt)
Componenten
- Externe RTC: DS3231 met batterij-backup; levert een 32K klok voor de interne RTC.
- 8-cijferig display (I2C): DFRobot 7-segment, of een zelfgebouwd 14-segment display.
- Externe DCF77-ontvanger: ELV DCF-2 (MAS6180 AM-ontvanger).
- Temperatuursensor: DS18B20 met externe pull-up.
Pinbezetting
- PA3: Input, DCF-signaal, input-pullup ingeschakeld, actief-laag signaal.
- PA4: Input/Output, gebruikt door OneWireNG met temperatuursensor DS18B20, externe pull-up 4,7K.
- PA6: Output, LED die het DCF-inputsignaal reflecteert.
- PA7: Input, knop voor modusselectie, actief-laag met input-pullup ingeschakeld.
- PB0: I2C CLK voor display.
- PB1: I2C DATA voor display.
Ontwikkeling en Softwarevereisten
Het project kan worden gecompileerd met MegaTinyCore in de Arduino IDE.
Vereiste externe bibliotheken:
- RTClib (Adafruit fork)
- OneWireNG
- DS18B20_int
Referentie voor zelfgebouwd alfanumeriek display: http://www.technoblogy.com/show?2ULE