uRTCLib
https://github.com/Naguissa/uRTCLib
uRTCLib.h
Go to the documentation of this file.
1
36#ifndef URTCLIB
40 #define URTCLIB
41 #include "Arduino.h"
42 #ifndef URTCLIB_WIRE
43 #if defined(ARDUINO_attiny) || defined(ARDUINO_AVR_ATTINYX4) || defined(ARDUINO_AVR_ATTINYX5) || defined(ARDUINO_AVR_ATTINYX7) || defined(ARDUINO_AVR_ATTINYX8) || defined(ARDUINO_AVR_ATTINYX61) || defined(ARDUINO_AVR_ATTINY43) || defined(ARDUINO_AVR_ATTINY828) || defined(ARDUINO_AVR_ATTINY1634) || defined(ARDUINO_AVR_ATTINYX313)
44 #include <TinyWireM.h> // I2C Master lib for ATTinys which use USI
45 #define URTCLIB_WIRE TinyWireM
46 #else
47 #include <Wire.h>
48 #define URTCLIB_WIRE Wire
49 #endif
50 #endif
51
57 #define URTCLIB_ADDRESS 0x68
58
59 /************ MODELS ***********/
63 #define URTCLIB_MODEL_DS1307 1
67 #define URTCLIB_MODEL_DS3231 2
71 #define URTCLIB_MODEL_DS3232 3
72
73
74 /************ WEEK DAYS ***********/
78 #define URTCLIB_WEEKDAY_SUNDAY 1
82 #define URTCLIB_WEEKDAY_MONDAY 2
86 #define URTCLIB_WEEKDAY_TUESDAY 3
90 #define URTCLIB_WEEKDAY_WEDNESDAY 4
94 #define URTCLIB_WEEKDAY_THURSDAY 5
98 #define URTCLIB_WEEKDAY_FRIDAY 6
102 #define URTCLIB_WEEKDAY_SATURDAY 7
103
104
105
106 /************ ALARM SELECTION: ***********/
107 //Note: Not valid for DS1307!
108
123 #define URTCLIB_ALARM_TYPE_1_NONE 0b00000000
124
128 #define URTCLIB_ALARM_TYPE_1_ALL_S 0b00101111
129
133 #define URTCLIB_ALARM_TYPE_1_FIXED_S 0b00101110
134
138 #define URTCLIB_ALARM_TYPE_1_FIXED_MS 0b00101100
139
143 #define URTCLIB_ALARM_TYPE_1_FIXED_HMS 0b00101000
144
148 #define URTCLIB_ALARM_TYPE_1_FIXED_DHMS 0b00100000
149
153 #define URTCLIB_ALARM_TYPE_1_FIXED_DOWHMS 0b00110000
154
169 #define URTCLIB_ALARM_TYPE_2_NONE 0b10000000
170
174 #define URTCLIB_ALARM_TYPE_2_ALL_M 0b10101110
175
179 #define URTCLIB_ALARM_TYPE_2_FIXED_M 0b10101100
180
184 #define URTCLIB_ALARM_TYPE_2_FIXED_HM 0b10101000
185
189 #define URTCLIB_ALARM_TYPE_2_FIXED_DHM 0b10100000
190
194 #define URTCLIB_ALARM_TYPE_2_FIXED_DOWHM 0b10110000
195
196
200 #define URTCLIB_ALARM_1 URTCLIB_ALARM_TYPE_1_NONE
201
205 #define URTCLIB_ALARM_2 URTCLIB_ALARM_TYPE_2_NONE
206
210 #define URTCLIB_ALARM_ANY 0b01010101
211
212
213 /************ SQWG SELECTION: ***********/
214
220 #define URTCLIB_SQWG_OFF_0 0b11111111
221
225 #define URTCLIB_SQWG_OFF_1 0b11111110
226
230 #define URTCLIB_SQWG_1H 0b00000000
231
237 #define URTCLIB_SQWG_1024H 0b00001000
238
242 #define URTCLIB_SQWG_4096H 0b00010000
243
247 #define URTCLIB_SQWG_8192H 0b00011000
248
254 #define URTCLIB_SQWG_32768H 0b00000011
255
256
257 /************ TEMPERATURE ***********/
263 #define URTCLIB_TEMP_ERROR 32767
264
265
266 /************ MISC ***********/
267
268
272 #define uRTCLIB_decToBcd(val) ((uint8_t) ((val / 10 * 16) + (val % 10)))
273
277 #define uRTCLIB_bcdToDec(val) ((uint8_t) ((val / 16 * 10) + (val % 16)))
278
279 // ESP yield function (ESP32 has no need for that on dual core, but it has on single core version)
280 #if ARDUINO_ARCH_ESP8266
286 #define uRTCLIB_YIELD yield();
287 #else
288 #if ARDUINO_ARCH_ESP32
294 #define uRTCLIB_YIELD yield();
295 #else
296 #define uRTCLIB_YIELD
297 #endif
298 #endif
299
300 #ifdef ARDUINO_ARCH_MEGAAVR
304 #define uRTCLIB_SIZE_T int
305 #else
306 #define uRTCLIB_SIZE_T size_t
307 #endif
308
309
310 class uRTCLib {
311 public:
312 /******* Constructors *******/
316 uRTCLib();
322 uRTCLib(const int);
332 uRTCLib(const int, const uint8_t);
333
334 /******* RTC functions ********/
340 bool refresh();
346 uint8_t second();
352 uint8_t minute();
358 uint8_t hour();
368 uint8_t hourModeAndAmPm();
374 uint8_t day();
380 uint8_t month();
386 uint8_t year();
399 uint8_t dayOfWeek();
409 int16_t temp();
428 void set(const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t);
437 void set_12hour_mode(const bool);
443 void set_rtc_address(const int);
452 void set_model(const uint8_t);
461 uint8_t model();
462
463 /******* Power ********/
476 bool getEOSCFlag();
490 bool lostPower();
498 void lostPowerClear();
514 bool enableBattery(); // Only DS3231 and DS3232.
521 bool disableBattery(); // Only DS3231 and DS3232.
522
523
524 /******** Alarms ************/
551 bool alarmSet(const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t); // Seconds will be ignored on Alarm 2
561 bool alarmDisable(const uint8_t);
571 bool alarmClearFlag(const uint8_t);
597 uint8_t alarmMode(const uint8_t);
607 uint8_t alarmSecond(const uint8_t);
617 uint8_t alarmMinute(const uint8_t);
627 uint8_t alarmHour(const uint8_t);
637 uint8_t alarmDayDow(const uint8_t);
652 bool alarmTriggered(const uint8_t);
653
654 /*********** SQWG ************/
669 uint8_t sqwgMode();
682 bool sqwgSetMode(const uint8_t);
683
684
685 /************ RAM *************/
686 // Only DS1307 and DS3232.
687 // DS1307: Addresses 08h to 3Fh so we offset 08h positions and limit to 38h as maximum address
688 // DS3232: Addresses 14h to FFh so we offset 14h positions and limit to EBh as maximum address
696 byte ramRead(const uint8_t);
705 bool ramWrite(const uint8_t, byte);
706
707 /************ Aging *************/
708 // Only DS3231 and DS3232. Address 0x10h
714 int8_t agingGet();
722 bool agingSet(int8_t);
723
724 /************ 32K Generator pin *************/
725 // Only DS3231 and DS3232. On DS1307 we map it to SqWG
732 bool enable32KOut();
738 bool disable32KOut();
744 bool status32KOut();
745
746
747 private:
748 // Address
749 int _rtc_address = URTCLIB_ADDRESS;
750
751 // RTC read data
752 uint8_t _second = 0;
753 uint8_t _minute = 0;
754 uint8_t _hour = 0;
755 uint8_t _day = 0;
756 uint8_t _month = 0;
757 uint8_t _year = 0;
758 uint8_t _dayOfWeek = 0;
759 int16_t _temp = 9999;
760
761 // Model, for alarms and RAM
762 uint8_t _model = URTCLIB_MODEL_DS3232;
763
764 // Alarms:
765 uint8_t _a1_mode = URTCLIB_ALARM_TYPE_1_NONE;
766 uint8_t _a1_second = 0;
767 uint8_t _a1_minute = 0;
768 uint8_t _a1_hour = 0;
769 uint8_t _a1_day_dow = 0;
770 //bool _a1_triggered_flag = _controlStatus LSB Bit 0
771
772 uint8_t _a2_mode = URTCLIB_ALARM_TYPE_2_NONE;
773 uint8_t _a2_minute = 0;
774 uint8_t _a2_hour = 0;
775 uint8_t _a2_day_dow = 0;
776 // bool _a2_triggered_flag = _controlStatus Bit 1
777
778 // Aging
779 int8_t _aging = 0;
780
781 // SQWG
782 uint8_t _sqwg_mode = URTCLIB_SQWG_OFF_1;
783
784 // Keep record of various Flags
785 // _controlStatus MSB Bit 7 _lost_power = (bool) (_controlStatus & 0b10000000);
786 // _controlStatus Bit 6 _eosc = (bool) (_controlStatus & 0b01000000);
787 // _controlStatus Bit 5 _12hrMode = (bool) (_controlStatus & 0b00100000);
788 // _controlStatus Bit 4 _pmNotAm = (bool) (_controlStatus & 0b00010000); // am or pm if 12 hour mode
789 // _controlStatus Bit 3 _32k = (bool) (_controlStatus & 0b00001000);
790 // _controlStatus Bit 2
791 // _controlStatus Bit 1 _a2_triggered_flag = (bool) (_controlStatus & 0b00000010);
792 // _controlStatus LSB Bit 0 _a1_triggered_flag = (bool) (_controlStatus & 0b00000001);
793 uint8_t _controlStatus = 0x00;
794
795 };
796
797#endif
798
799
DS1307, DS3231 and DS3232 RTCs basic library.
Definition: uRTCLib.h:310
bool enable32KOut()
Enables 32K pin output.
Definition: uRTCLib.cpp:1598
uint8_t second()
Returns actual second.
Definition: uRTCLib.cpp:546
void set_rtc_address(const int)
Sets RTC i2 addres.
Definition: uRTCLib.cpp:638
void set_model(const uint8_t)
Sets RTC Model.
Definition: uRTCLib.cpp:651
void set_12hour_mode(const bool)
Set clock in 12 or 24 hour mode 12 hour mode has 1-12 hours and AM or PM flag 24 hour mode has 0-23 h...
Definition: uRTCLib.cpp:723
bool status32KOut()
Checks 32K pin output status.
Definition: uRTCLib.cpp:1677
bool disable32KOut()
Disable 32K pin output.
Definition: uRTCLib.cpp:1637
bool alarmClearFlag(const uint8_t)
Clears an alarm flag.
Definition: uRTCLib.cpp:1036
bool alarmSet(const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t)
Sets any alarm.
Definition: uRTCLib.cpp:821
uint8_t month()
Returns actual month.
Definition: uRTCLib.cpp:603
int16_t temp()
Returns actual temperature.
Definition: uRTCLib.cpp:534
bool alarmTriggered(const uint8_t)
Checks if any alarm has been triggered.
Definition: uRTCLib.cpp:1277
uint8_t alarmDayDow(const uint8_t)
Returns actual alarm day or DOW.
Definition: uRTCLib.cpp:1239
uint8_t day()
Returns actual day.
Definition: uRTCLib.cpp:594
uint8_t alarmHour(const uint8_t)
Returns actual alarm hour.
Definition: uRTCLib.cpp:1207
bool lostPower()
Returns lost power VBAT staus.
Definition: uRTCLib.cpp:343
bool ramWrite(const uint8_t, byte)
Writes a byte to RTC RAM.
Definition: uRTCLib.cpp:1497
bool alarmDisable(const uint8_t)
Disables an alarm.
Definition: uRTCLib.cpp:980
void set(const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t, const uint8_t)
Sets RTC datetime data.
Definition: uRTCLib.cpp:685
uint8_t alarmMode(const uint8_t)
Returns actual alarm mode.
Definition: uRTCLib.cpp:1110
uRTCLib()
Constructor.
Definition: uRTCLib.cpp:51
bool enableBattery()
Enable VBAT operation when VCC power is lost.
Definition: uRTCLib.cpp:420
uint8_t sqwgMode()
Changes SQWG mode, including turning it off.
Definition: uRTCLib.cpp:1444
uint8_t dayOfWeek()
Returns actual Day Of Week.
Definition: uRTCLib.cpp:628
uint8_t hour()
Returns actual hour.
Definition: uRTCLib.cpp:565
bool agingSet(int8_t)
Sets aging value on the RTC.
Definition: uRTCLib.cpp:1544
int8_t agingGet()
Reads actual aging value on the RTC.
Definition: uRTCLib.cpp:1533
uint8_t alarmMinute(const uint8_t)
Returns actual alarm minute.
Definition: uRTCLib.cpp:1174
void lostPowerClear()
Clears lost power VBAT staus.
Definition: uRTCLib.cpp:354
uint8_t alarmSecond(const uint8_t)
Returns actual alarm second.
Definition: uRTCLib.cpp:1142
bool sqwgSetMode(const uint8_t)
Gets current SQWG mode.
Definition: uRTCLib.cpp:1309
bool getEOSCFlag()
Returns Enable Oscillator Flag.
Definition: uRTCLib.cpp:326
bool disableBattery()
Disable VBAT operation when VCC power is lost.
Definition: uRTCLib.cpp:477
uint8_t hourModeAndAmPm()
Returns whether clock is in 12 or 24 hour mode and AM or PM if in 12 hour mode 0 = 24 hour mode (0-23...
Definition: uRTCLib.cpp:578
uint8_t year()
Returns actual year.
Definition: uRTCLib.cpp:612
uint8_t minute()
Returns actual minute.
Definition: uRTCLib.cpp:555
uint8_t model()
Gets RTC Model.
Definition: uRTCLib.cpp:663
byte ramRead(const uint8_t)
Reads a byte from RTC RAM.
Definition: uRTCLib.cpp:1459
bool refresh()
Refresh data from HW RTC.
Definition: uRTCLib.cpp:81
#define URTCLIB_ADDRESS
Default RTC I2C address.
Definition: uRTCLib.h:57
#define URTCLIB_MODEL_DS3232
Model definition, DS3232.
Definition: uRTCLib.h:71
#define URTCLIB_SQWG_OFF_1
SQWG OFF, keeps output hight.
Definition: uRTCLib.h:225
#define URTCLIB_ALARM_TYPE_1_NONE
Alarm 1 - Disabled.
Definition: uRTCLib.h:123
#define URTCLIB_ALARM_TYPE_2_NONE
Alarm 2 - Disabled.
Definition: uRTCLib.h:169