Onego czasu natrafiłem na płytkę (moduł) z układem DS3231 i postanowiłem go wykorzystać przy budowie zegara, który byłby na tyle stabilny, żeby nie trzeba go było zbyt często korygować.

Wybrane cechy układu DS3231:

  • ma wbudowany wewnętrzny generator kwarcowy skompensowany temperaturowo (TCXO)
    • stabilność w zakresie zmian temperatury od 0°C do 40°C wynosi 2 ppm
  • komunikacja z układem odbywa się po magistrali I²C
  • wbudowany mechanizm alarmów (do dwóch dziennie)
  • rejestr umożliwiający korektę częstotliwości generatora kwarcowego

 Układ zegara składa się z następujących elementów:

  • mikrokontrolera Atmega16A
    • taktowanego 16MHz
  • modułu RTC DS3231
  • wyświetlacza LCD 2x16 znaków
    • typ 1602A zgodny z HD44780
  • płytka uniwersalna PI25Z dwustronna 70x90mm
  • czterech przycisków
    • OK
    • góra (UP)
    • dół (DOWN)
    • RESET
  • złącza JTAG (do programowania i uruchamiania/debugowania)
  • osprzętu
    • podstawka pod mikrokontroler
    • gniazdo zasilania
    • złącza GoldPin do wyświetlacza i modułu RTC
  • drobne elementy elektroniki
    • potencjometr kontrastu wyświetlacza
    • kondensatory
    • rezystory

Zegar posiada następujące funkcjonalności:

  • pokazuje czas (godziny, minuty, sekundy)
  • pokazuje datę
  • pokazuje dzień tygodnia
  • przy pomocy trzech przycisków można ustawić bieżący czas oraz datę (wykorzystując menu)

 Zegar w całej okazałości:

dokładny zegar na bazie DS3231

Plik zawierający całość źródeł (projekt) oraz pliki do zaprogramowania:

DS3231.zip

W projekcie wykorzystałem:

  • biblioteki Tomasza Sklenarskiego do obsługi:
    • menu
    • wyświetlacza
    • klawiszy
  • pomysł funkcji Mirosława Kardasia do obsługi RTC DS3231
  • obsługę magistrali TWI (komunikacja procesora z DS3231) przy pomocy przerwań na podstawie notki Atmela AVR315

Płytka zasilana jest z przerobionego zasilacza Nokia (opisanego w dziale warsztatowym).

Schemat układu:

schemat dokładnego zegara z układem DS3231 i Atmega16A