106 #define MCP7940_h // Define the name inside guard code 114 #ifndef I2C_MODES // I2C related constants 120 #if !defined(BUFFER_LENGTH) // The ESP32 Wire library doesn't currently define BUFFER_LENGTH 122 #define BUFFER_LENGTH 32 192 DateTime(
const char* date,
const char* time);
193 DateTime(
const __FlashStringHelper* date,
const __FlashStringHelper* time);
237 TimeSpan(int16_t days, int8_t hours, int8_t minutes, int8_t seconds);
239 int16_t
days()
const {
return _seconds / 86400L; }
240 int8_t
hours()
const {
return _seconds / 3600 % 24; }
241 int8_t
minutes()
const {
return _seconds / 60 % 60; }
242 int8_t
seconds()
const {
return _seconds % 60; }
258 bool begin(
const uint32_t i2cSpeed)
const;
259 bool begin(
const uint8_t sda = SDA,
const uint8_t scl = SCL,
261 bool deviceStatus()
const;
262 bool deviceStart()
const;
263 bool deviceStop()
const;
267 int8_t calibrate()
const;
268 int8_t calibrate(
const int8_t newTrim);
269 int8_t calibrate(
const DateTime& dt);
270 int8_t calibrate(
const float fMeas)
const;
271 int8_t getCalibrationTrim()
const;
272 uint8_t weekdayRead()
const;
273 uint8_t weekdayWrite(
const uint8_t dow)
const;
274 bool setMFP(
const bool value)
const;
275 uint8_t getMFP()
const;
276 bool setAlarm(
const uint8_t alarmNumber,
const uint8_t alarmType,
const DateTime& dt,
277 const bool state =
true)
const;
278 void setAlarmPolarity(
const bool polarity)
const;
279 DateTime getAlarm(
const uint8_t alarmNumber, uint8_t& alarmType)
const;
280 bool clearAlarm(
const uint8_t alarmNumber)
const;
281 bool setAlarmState(
const uint8_t alarmNumber,
const bool state)
const;
282 bool getAlarmState(
const uint8_t alarmNumber)
const;
283 bool isAlarm(
const uint8_t alarmNumber)
const;
284 uint8_t getSQWSpeed()
const;
285 bool setSQWSpeed(uint8_t frequency,
bool state =
true)
const;
286 bool setSQWState(
const bool state)
const;
287 bool getSQWState()
const;
288 bool setBattery(
const bool state)
const;
289 bool getBattery()
const;
290 bool getPowerFail()
const;
291 bool clearPowerFail()
const;
294 int8_t calibrateOrAdjust(
const DateTime& dt);
295 int32_t getPPMDeviation(
const DateTime& dt)
const;
296 void setSetUnixTime(uint32_t aTime);
297 uint32_t getSetUnixTime()
const;
306 template <
typename T>
307 uint8_t
readRAM(
const uint8_t& addr, T& value)
const {
317 template <
typename T>
318 uint8_t
writeRAM(
const uint8_t& addr,
const T& value)
const {
329 template <
typename T>
330 uint8_t
readEUI(
const uint8_t& addr, T& value)
const {
342 if (Wire.endTransmission() == 0) {
344 uint8_t* bytePtr = (uint8_t*)&value;
345 for (i = 0; i <
sizeof(T); i++) {
346 *bytePtr++ = Wire.read();
351 template <
typename T>
352 uint8_t
writeEUI(
const uint8_t& addr, T& value)
const {
366 i = Wire.endTransmission();
370 i = Wire.endTransmission();
373 Wire.write((uint8_t*)&value,
sizeof(T));
374 i = Wire.endTransmission();
375 if (i == 0) i =
sizeof(T);
380 uint32_t _SetUnixTime{0};
388 template <
typename T>
389 uint8_t I2C_read(
const uint8_t address, T& value)
const {
403 if (Wire.endTransmission() == 0) {
405 uint8_t* bytePtr = (uint8_t*)&value;
406 for (i = 0; i <
sizeof(T); i++) {
407 *bytePtr++ = Wire.read();
412 template <
typename T>
413 uint8_t I2C_write(
const uint8_t address,
const T& value)
const {
425 Wire.write((uint8_t*)&value,
sizeof(T));
426 uint8_t i = Wire.endTransmission();
427 if (i == 0) i =
sizeof(T);
430 uint8_t readByte(
const uint8_t addr)
const;
431 uint8_t bcd2int(
const uint8_t bcd)
const;
432 uint8_t int2bcd(
const uint8_t dec)
const;
433 void clearRegisterBit(
const uint8_t reg,
const uint8_t b)
const;
434 void setRegisterBit(
const uint8_t reg,
const uint8_t b)
const;
435 void writeRegisterBit(
const uint8_t reg,
const uint8_t b,
436 bool bitvalue)
const;
437 uint8_t readRegisterBit(
const uint8_t reg,
const uint8_t b)
const;
const uint8_t MCP7940_PWRDNHOUR
Power-Fail, PWRDNHOUR Register address.
Definition: MCP7940.h:150
const uint8_t MCP7940_EUI_RAM_ADDRESS
EUI - Start address for protected EEPROM.
Definition: MCP7940.h:158
const uint8_t MCP7940_CONTROL
Timekeeping, RTCCONTROL Register address.
Definition: MCP7940.h:134
DateTime(uint32_t t=SECS_1970_TO_2000)
Definition: MCP7940.cpp:56
const uint32_t I2C_FAST_MODE
Fast mode.
Definition: MCP7940.h:118
const uint8_t MCP7940_PWRDNDATE
Power-Fail, PWDNDATE Register address.
Definition: MCP7940.h:151
uint8_t ss
Internal seconds.
Definition: MCP7940.h:226
const uint8_t MCP7940_RTCDATE
Timekeeping, RTCDATE Register address.
Definition: MCP7940.h:131
const uint8_t MCP7940_LPYR
RTCMTH register.
Definition: MCP7940.h:165
uint8_t writeRAM(const uint8_t &addr, const T &value) const
Definition: MCP7940.h:318
const uint8_t MCP7940_SIGN
OSCTRIM register.
Definition: MCP7940.h:174
DateTime operator-(const TimeSpan &span)
Definition: MCP7940.cpp:204
const uint8_t MCP7940_ALM0MIN
Alarm 0, ALM0MIN Register address.
Definition: MCP7940.h:138
uint8_t d
Internal day value.
Definition: MCP7940.h:223
const uint8_t MCP7940_12_24
RTCHOUR, PWRDNHOUR & PWRUPHOUR.
Definition: MCP7940.h:160
Simple general-purpose date/time class.
Definition: MCP7940.h:180
const uint8_t MCP7940_OSCRUN
RTCWKDAY register.
Definition: MCP7940.h:162
const uint8_t MCP7940_RTCSEC
Timekeeping, RTCSEC Register address.
Definition: MCP7940.h:127
const uint8_t MCP7940_ALM1MTH
Alarm 1, ALM1MONTH Register address.
Definition: MCP7940.h:148
uint8_t dayOfTheWeek() const
Definition: MCP7940.cpp:158
const uint8_t MCP7940_ALM0SEC
Alarm 0, ALM0SEC Register address.
Definition: MCP7940.h:137
const uint8_t MCP7940_ALM0HOUR
Alarm 0, ALM0HOUR Register address.
Definition: MCP7940.h:139
const uint8_t MCP7940_ALM0DATE
Alarm 0, ALM0DATE Register address.
Definition: MCP7940.h:141
const uint8_t MCP7940_EEUNLOCK
Virtual unlock register on MCP7940x series.
Definition: MCP7940.h:136
const uint8_t MCP7940_SQWEN
CONTROL register.
Definition: MCP7940.h:167
const uint8_t MCP7940_SQWFS0
CONTROL register.
Definition: MCP7940.h:173
uint8_t day() const
Definition: MCP7940.h:200
const uint8_t MCP7940_OUT
CONTROL register.
Definition: MCP7940.h:166
uint8_t month() const
Definition: MCP7940.h:197
const uint8_t MCP7940_ALM1HOUR
Alarm 1, ALM1HOUR Register address.
Definition: MCP7940.h:145
const uint8_t MCP7940_RTCWKDAY
Timekeeping, RTCWKDAY Register address.
Definition: MCP7940.h:130
const uint8_t MCP7940_CRSTRIM
CONTROL register.
Definition: MCP7940.h:171
uint8_t readEUI(const uint8_t &addr, T &value) const
Definition: MCP7940.h:330
const uint8_t MCP7940_PWRUPMTH
Power-Fail, PWRUPMTH Register address.
Definition: MCP7940.h:156
const uint8_t MCP7940_EXTOSC
CONTROL register.
Definition: MCP7940.h:170
bool equals(const DateTime *other)
Definition: MCP7940.cpp:189
const uint8_t MCP7940_PWRUPMIN
Power-Fail, PWRUPMIN Register address.
Definition: MCP7940.h:153
const uint8_t MCP7940_PWRUPDATE
Power-Fail, PWRUPDATE Register address.
Definition: MCP7940.h:155
int32_t _seconds
Internal value for total seconds.
Definition: MCP7940.h:247
uint8_t second() const
Definition: MCP7940.h:209
const uint8_t MCP7940_RTCYEAR
Timekeeping, RTCYEAR Register address.
Definition: MCP7940.h:133
const uint8_t MCP7940_RTCHOUR
Timekeeping, RTCHOUR Register address.
Definition: MCP7940.h:129
const uint8_t MCP7940_PWRDNMIN
Power-Fail, PWRDNMIN Register address.
Definition: MCP7940.h:149
const uint8_t MCP7940_ALM0MTH
Alarm 0, ALM0MTH Register address.
Definition: MCP7940.h:142
uint8_t readRAM(const uint8_t &addr, T &value) const
Definition: MCP7940.h:307
long secondstime() const
Definition: MCP7940.cpp:180
uint8_t hour() const
Definition: MCP7940.h:203
const uint8_t MCP7940_OSCTRIM
Timekeeping, RTCOSCTRIM Register address.
Definition: MCP7940.h:135
const uint8_t MCP7940_PWRDNMTH
Power-Fail, PWRDNMTH Register address.
Definition: MCP7940.h:152
~MCP7940_Class()
Unused Class constructor.
Definition: MCP7940.h:257
const uint8_t MCP7940_ALM1EN
CONTROL register.
Definition: MCP7940.h:168
const uint8_t MCP7940_ALM1SEC
Alarm 1, ALM1SEC Register address.
Definition: MCP7940.h:143
int8_t minutes() const
return number of minutes
Definition: MCP7940.h:241
const uint32_t SECS_1970_TO_2000
Seconds between year 1970 and 2000.
Definition: MCP7940.h:178
uint32_t unixtime(void) const
Definition: MCP7940.cpp:170
uint8_t writeEUI(const uint8_t &addr, T &value) const
Definition: MCP7940.h:352
const uint8_t MCP7940_ALM0IF
ALM0WKDAY register.
Definition: MCP7940.h:176
Main class definition with forward declarations.
Definition: MCP7940.h:250
int8_t seconds() const
return number of seconds
Definition: MCP7940.h:242
const uint8_t MCP7940_AM_PM
RTCHOUR, PWRDNHOUR & PWRUPHOUR.
Definition: MCP7940.h:161
uint8_t m
Internal month value.
Definition: MCP7940.h:222
DateTime operator+(const TimeSpan &span)
Definition: MCP7940.cpp:197
const uint8_t MCP7940_VBATEN
RTCWKDAY register.
Definition: MCP7940.h:164
int8_t hours() const
return number of hours
Definition: MCP7940.h:240
const uint32_t I2C_STANDARD_MODE
Default normal I2C 100KHz speed.
Definition: MCP7940.h:117
const uint8_t MCP7940_PWRUPHOUR
Power-Fail, PWRUPHOUR Register address.
Definition: MCP7940.h:154
const uint8_t MCP7940_RTCMTH
Timekeeping, RTCMTH Register address.
Definition: MCP7940.h:132
const uint8_t MCP7940_ST
MCP7940 register bits. RTCSEC reg.
Definition: MCP7940.h:159
const uint8_t MCP7940_ALM1DATE
Alarm 1, ALM1DATE Register address.
Definition: MCP7940.h:147
int16_t days() const
return the number of days
Definition: MCP7940.h:239
uint8_t minute() const
Definition: MCP7940.h:206
const uint8_t MCP7940_RAM_ADDRESS
NVRAM - Start address for SRAM.
Definition: MCP7940.h:157
Timespan class which can represent changes in time with seconds accuracy.
Definition: MCP7940.h:228
uint16_t year() const
Definition: MCP7940.h:194
uint8_t hh
Internal hour value.
Definition: MCP7940.h:224
uint8_t mm
Internal minute value.
Definition: MCP7940.h:225
uint8_t yOff
Internal year offset value.
Definition: MCP7940.h:221
const uint8_t MCP7940_ADDRESS
Fixed I2C address, fixed.
Definition: MCP7940.h:125
const uint8_t MCP7940_ALM0WKDAY
Alarm 0, ALM0WKDAY Register address.
Definition: MCP7940.h:140
const uint8_t MCP7940_ALM1IF
ALM1WKDAY register.
Definition: MCP7940.h:177
const uint8_t MCP7940_PWRFAIL
RTCWKDAY register.
Definition: MCP7940.h:163
const uint8_t MCP7940_SQWFS1
CONTROL register.
Definition: MCP7940.h:172
const uint8_t MCP7940_ALMPOL
ALM0WKDAY register.
Definition: MCP7940.h:175
int32_t totalseconds() const
return total number of seconds
Definition: MCP7940.h:243
const uint8_t MCP7940_ALM1MIN
Alarm 1, ALM1MIN Register address.
Definition: MCP7940.h:144
const uint8_t MCP7940_ALM0EN
CONTROL register.
Definition: MCP7940.h:169
const uint8_t MCP7940_RTCMIN
Timekeeping, RTCMIN Register address.
Definition: MCP7940.h:128
const uint8_t MCP7940_EUI_ADDRESS
Fixed I2C address for accessing protected ROM.
Definition: MCP7940.h:126
const uint8_t MCP7940_ALM1WKDAY
Alarm 1, ALM1WKDAY Register address.
Definition: MCP7940.h:146