The only purpose of this project is to try out the theory knowledge practically. It is not practical to use atmega328p to make a Digital-clock because this mcu is capable of doing much more powerful things.
It's a Digital-clock, can be connected via Bluetooth to mobile phone for updating time, setting alarm, update buzzer volume, update buzzer tune, set brightness, set time format, go to sleep mode, etc. all this can be done via our phone- Bluetooth text based app. and all this can be done using on board buttons too. It can live up to 48 hours depending on usage and brightness.
The goal was to learn, thats why i haven't used abstract libraries like-tm1637.h , eeprom.h , Bluetooth.h. Instead I made custom libraries which are programed by directly adding values in mcu registers. Doing this allowed me to understand atmega328p internally.
It has three layers:
1)ui layer
-
The clock usages 'tm1637' display which use custom i2c protocol.
and there is a buzzer for alarm and a photo resistor to control brightness automatically.
The clock has 7 button inputs connected via PCINT to mcu(atmega328p) only three wires are connected to PCINT pins, this was possible using 11 diods which are below the display unit, and the rest of the working is done through code in-buttonINT.c
.
2)backend layer
-
For time measurement and every other function it uses 'atmega328p' mcu.
3)power supply layer
-
For power it uses 3.7v 18650 li-on cell, and to provide needed voltage to mcu it uses a boost convertor circuit which is set at 4.9v .
to charge the battery it uses a 18650 charging circuit with micro-usb port which will not let battery to overcharge or overdischarge.