The microcontroller is an ATMega328P in TQFP. There is a 2x3 programming header for the microcontroller. The two buttons set the time, one button increments minutes and the other increments hours. Any time either of the buttons is pressed the time is saved to the DS3231 chip over I2C. On power-on the time is fetched from the DS3231.

At the time it was cheaper for me to buy the DS3231 module than the IC itself, hence using the entire module.

The firmware was written in C using just the standard AVR includes.

Looking at the design now that it's been a few years, there are a number of improvements I'd make:

  • A better power connector than the 0.1" pins (they've started to bend over time).
  • Reverse voltage protection, especially since the power connector is not keyed.
  • Comment the code! (I didn't think anyone would ever read it)
  • Use register definitions instead of magic hex values.
  • Adding the extra pin headers on the rear PCB to connect to the DS3231 module for added mechanical strength.
  • Spending the money to get the IC instead of the module would have made it look nicer.