47 _clkPort = digitalPinToPort(clkPin);
48 _ioPort = digitalPinToPort(ioPin);
49 _cePort = digitalPinToPort(cePin);
51 _clkBit = digitalPinToBitMask(clkPin);
52 _ioBit = digitalPinToBitMask(ioPin);
53 _ceBit = digitalPinToBitMask(cePin);
174 #ifdef ARDUINO_ARCH_AVR 196 #ifdef ARDUINO_ARCH_AVR 224 if (!
readBuffer(0x00, buffer,
sizeof(buffer))) {
225 memset(dt, 0,
sizeof(
struct tm));
230 memset(dt, 0,
sizeof(
struct tm));
233 dt->tm_sec =
bcdToDec(buffer[0] & 0x7F);
234 dt->tm_min =
bcdToDec(buffer[1] & 0x7F);
235 dt->tm_hour =
bcdToDec(buffer[2] & 0x3F);
236 dt->tm_mday =
bcdToDec(buffer[3] & 0x3F);
237 dt->tm_mon =
bcdToDec(buffer[4] & 0x1F);
238 dt->tm_wday =
bcdToDec(buffer[5] & 0x07);
239 dt->tm_year =
bcdToDec(buffer[6]) + 100;
252 if ((dt->tm_sec > 59) || (dt->tm_min > 59) || (dt->tm_hour > 23) ||
253 (dt->tm_mday < 1) || (dt->tm_mday > 31) || (dt->tm_mon > 11) || (dt->tm_year > 199) ||
280 buffer[0] =
decToBcd(dt->tm_sec) & 0x7F;
281 buffer[1] =
decToBcd(dt->tm_min) & 0x7F;
282 buffer[2] =
decToBcd(dt->tm_hour) & 0x3F;
283 buffer[3] =
decToBcd(dt->tm_mday) & 0x3F;
284 buffer[4] =
decToBcd(dt->tm_mon + 1) & 0x1F;
285 buffer[5] =
decToBcd(dt->tm_wday + 1) & 0x07;
286 buffer[6] =
decToBcd(dt->tm_year % 100);
378 uint8_t mday, uint8_t mon, uint16_t year,
389 dt.tm_year = year - 1900;
418 uint8_t *mday, uint8_t *mon, uint16_t *year,
433 *mon = dt.tm_mon + 1;
434 *year = dt.tm_year + 1900;
466 for (uint8_t i = 0; i < min((
int)len, DS1302_NUM_RAM_REGS); i++) {
502 for (uint8_t i = 0; i < min((
int)len, DS1302_NUM_RAM_REGS); i++) {
517 return (uint8_t)(10 * ((bcd & 0xF0) >> 4) + (bcd & 0x0F));
529 return (uint8_t)(((dec / 10) << 4) | (dec % 10));
603 for (uint8_t i = 0; i < min((
int)writeLen, DS1302_NUM_RAM_REGS); i++) {
604 writeByte(((uint8_t *)buffer)[i]);
634 for (uint8_t i = 0; i < min((
int)readLen, DS1302_NUM_RAM_REGS); i++) {
635 ((uint8_t *)buffer)[i] = readByte();
648 void ErriezDS1302::transferBegin()
659 void ErriezDS1302::transferEnd()
669 void ErriezDS1302::writeAddrCmd(uint8_t value)
672 for (uint8_t i = 0; i < 8; i++) {
673 if (value & (1 << i)) {
695 void ErriezDS1302::writeByte(uint8_t value)
698 for (uint8_t i = 0; i < 8; i++) {
716 uint8_t ErriezDS1302::readByte()
720 for (uint8_t i = 0; i < 8; i++) {
void writeBufferRAM(uint8_t *buf, uint8_t len)
Write buffer to RAM address 0x00 (burst write)
void readBufferRAM(uint8_t *buf, uint8_t len)
Read buffer from RAM address 0x00 (burst read)
bool getTime(uint8_t *hour, uint8_t *min, uint8_t *sec)
Read time from RTC.
bool setEpoch(time_t t)
Write Unix epoch UTC time to RTC.
#define DS1302_BIT_WP
Write protect bit.
#define DS1302_CE_HIGH()
CE pin high.
#define DS1302_IO_OUTPUT()
IO pin output.
ErriezDS1302(uint8_t clkPin, uint8_t ioPin, uint8_t cePin)
Constructor DS1302 RTC.
bool isRunning()
Read RTC CH (Clock Halt) from seconds register.
#define DS1302_IO_LOW()
IO pin low.
#define DS1302_CE_OUTPUT()
CE pin output.
bool clockEnable(bool enable=true)
Enable or disable oscillator.
#define DS1302_CMD_READ_CLOCK_BURST
DS1302 read clock register with burst.
time_t getEpoch()
Read Unix UTC epoch time_t.
uint8_t bcdToDec(uint8_t bcd)
BCD to decimal conversion.
#define DS1302_CE_LOW()
CE pin low.
uint8_t readRegister(uint8_t reg)
Read register.
#define DS1302_CLK_OUTPUT()
CLK pin output.
bool setTime(uint8_t hour, uint8_t min, uint8_t sec)
Write time to RTC.
#define DS1302_REG_SECONDS
DS1302 registers.
#define DS1302_PIN_DELAY()
Delay between pin changes.
bool begin()
Initialize and detect DS1302 RTC.
uint8_t readByteRAM(uint8_t addr)
Read byte from RAM.
#define DS1302_IO_INPUT()
IO pin input.
#define DS1302_CMD_WRITE_CLOCK_REG(reg)
DS1302 write clock register.
#define DS1302_CMD_READ_CLOCK_REG(reg)
DS1302 read clock register.
#define DS1302_SEC_CH
DS1302 register bit defines.
bool getDateTime(uint8_t *hour, uint8_t *min, uint8_t *sec, uint8_t *mday, uint8_t *mon, uint16_t *year, uint8_t *wday)
Get date time.
bool readBuffer(uint8_t reg, void *buffer, uint8_t len)
Read buffer from RTC clock registers.
#define DS1302_IO_READ()
IO pin read.
#define DS1302_CMD_READ_RAM(addr)
DS1302 read RAM register.
#define DS1302_CMD_WRITE_CLOCK_BURST
DS1302 writeclock register with burst.
#define DS1302_CMD_WRITE_RAM(addr)
DS1302 write RAM register.
#define DS1302_CMD_READ_RAM_BURST
DS1302 read RAM register with burst.
bool writeBuffer(uint8_t reg, void *buffer, uint8_t len)
Write buffer to RTC clock registers.
bool setDateTime(uint8_t hour, uint8_t min, uint8_t sec, uint8_t mday, uint8_t mon, uint16_t year, uint8_t wday)
Set date time.
#define DS1302_NUM_CLOCK_REGS
DS1302 number of RAM registers.
void writeByteRAM(uint8_t addr, uint8_t value)
Write a byte to RAM.
uint8_t decToBcd(uint8_t dec)
Decimal to BCD conversion.
DS1302 RTC library for Arduino.
#define DS1302_BIT_READ
Bit read.
bool write(const struct tm *dt)
Write date and time to RTC.
#define DS1302_IO_HIGH()
IO pin high.
#define DS1302_CMD_WRITE_RAM_BURST
DS1302 write RAM register with burst.
bool read(struct tm *dt)
Read date and time from RTC.
#define DS1302_CLK_HIGH()
CLK pin high.
#define DS1302_REG_DAY_WEEK
Day of the week register.
bool writeRegister(uint8_t reg, uint8_t value)
Write register.
#define DS1302_REG_WP
Write protect register.
#define DS1302_CLK_LOW()
CLK pin low.