void DS1307RTC::write(tmElements_t &tm) { if (ctrl_id == DS1307_CTRL_ID) { Wire.beginTransmission(ctrl_id); Wire.write((uint8_t)0x00); // reset register pointer Wire.write(dec2bcd(tm.Second) & 0x7f); // ray: start clock by setting CH bit low Wire.write(dec2bcd(tm.Minute)); Wire.write(dec2bcd(tm.Hour)); // sets 24 hour format Wire.write(dec2bcd(tm.Wday)); Wire.write(dec2bcd(tm.Day)); Wire.write(dec2bcd(tm.Month)); Wire.write(dec2bcd(tmYearToY2k(tm.Year))); Wire.endTransmission(); } else if (ctrl_id == MCP7940_CTRL_ID) { Wire.beginTransmission(ctrl_id); Wire.write((uint8_t)0x00); // reset register pointer Wire.write(dec2bcd(tm.Second) | 0x80); // ray: start clock by setting ST bit high Wire.write(dec2bcd(tm.Minute)); Wire.write(dec2bcd(tm.Hour)); // sets 24 hour format Wire.write(dec2bcd(tm.Wday) | 0x08); // ray: turn on battery backup by setting VBATEN bit high Wire.write(dec2bcd(tm.Day)); Wire.write(dec2bcd(tm.Month)); Wire.write(dec2bcd(tmYearToY2k(tm.Year))); Wire.endTransmission(); } else { // undefined RTC type } }
bool SensorDs1307::write(tmElements_t &tm) { Wire.beginTransmission(DS1307_CTRL_ID); #if ARDUINO >= 100 Wire.write((uint8_t)0x00); // reset register pointer Wire.write(dec2bcd(tm.Second)) ; Wire.write(dec2bcd(tm.Minute)); Wire.write(dec2bcd(tm.Hour)); // sets 24 hour format Wire.write(dec2bcd(tm.Wday)); Wire.write(dec2bcd(tm.Day)); Wire.write(dec2bcd(tm.Month)); Wire.write(dec2bcd(tmYearToY2k(tm.Year))); #else Wire.send(0x00); // reset register pointer Wire.send(dec2bcd(tm.Second)) ; Wire.send(dec2bcd(tm.Minute)); Wire.send(dec2bcd(tm.Hour)); // sets 24 hour format Wire.send(dec2bcd(tm.Wday)); Wire.send(dec2bcd(tm.Day)); Wire.send(dec2bcd(tm.Month)); Wire.send(dec2bcd(tmYearToY2k(tm.Year))); #endif if (Wire.endTransmission() != 0) { exists = false; return false; } exists = true; return true; }
void DS1307RTC::write(tmElements_t &tm) { Wire.beginTransmission(DS1307_CTRL_ID); #if ARDUINO >= 100 Wire.write((byte)0x00); Wire.write(dec2bcd(tm.Second)) ; Wire.write(dec2bcd(tm.Minute)); Wire.write(dec2bcd(tm.Hour)); // sets 24 hour format Wire.write(dec2bcd(tm.Wday)); Wire.write(dec2bcd(tm.Day)); Wire.write(dec2bcd(tm.Month)); Wire.write(dec2bcd(tmYearToY2k(tm.Year))); #else Wire.send(0x00); Wire.send(dec2bcd(tm.Second)) ; Wire.send(dec2bcd(tm.Minute)); Wire.send(dec2bcd(tm.Hour)); // sets 24 hour format Wire.send(dec2bcd(tm.Wday)); Wire.send(dec2bcd(tm.Day)); Wire.send(dec2bcd(tm.Month)); Wire.send(dec2bcd(tmYearToY2k(tm.Year))); #endif Wire.endTransmission(); }
/* * setTime */ bool DS1339::setTime(time_t t) { byte buffer[7]; tmElements_t tm; breakTime(t, tm); buffer[0] = dec2bcd(tm.Second); buffer[1] = dec2bcd(tm.Minute); buffer[2] = dec2bcd(tm.Hour); buffer[3] = dec2bcd(tm.Wday); buffer[4] = dec2bcd(tm.Day); buffer[5] = dec2bcd(tm.Month); buffer[6] = dec2bcd(tmYearToY2k(tm.Year)); buffer[0] |= DS1339_CLOCKHALT; // stop the clock if(writeBytes(buffer, 0, 7) !=7) { return false; } if(isRunning()) { buffer[0] &= DS1339_SEC_MASK; if(writeBytes(buffer, 0, 7) != 7) { return false; } } return true; }
/*----------------------------------------------------------------------* * Set the RTC's time from a tmElements_t structure. * * Returns the I2C status (zero if successful). * *----------------------------------------------------------------------*/ byte DS3232RTC::write(tmElements_t &tm) { i2cBeginTransmission(RTC_ADDR); i2cWrite((uint8_t)RTC_SECONDS); i2cWrite(dec2bcd(tm.Second)); i2cWrite(dec2bcd(tm.Minute)); i2cWrite(dec2bcd(tm.Hour)); //sets 24 hour format (Bit 6 == 0) i2cWrite(tm.Wday); i2cWrite(dec2bcd(tm.Day)); i2cWrite(dec2bcd(tm.Month)); i2cWrite(dec2bcd(tmYearToY2k(tm.Year))); return i2cEndTransmission(); }
void DS1307RTC::write(tmElements_t &tm) { Wire.beginTransmission(DS1307_CTRL_ID); Wire.write(0x00); // reset register pointer Wire.write(dec2bcd(tm.Second)) ; Wire.write(dec2bcd(tm.Minute)); Wire.write(dec2bcd(tm.Hour)); // sets 24 hour format Wire.write(dec2bcd(tm.Wday)); Wire.write(dec2bcd(tm.Day)); Wire.write(dec2bcd(tm.Month)); Wire.write(dec2bcd(tmYearToY2k(tm.Year))); Wire.endTransmission(); }
/*----------------------------------------------------------------------* * Sets the RTC's time from a tmElements_t structure and clears the * * oscillator stop flag (OSF) in the Control/Status register. * * Returns the I2C status (zero if successful). * *----------------------------------------------------------------------*/ byte DS3232RTC::write(tmElements_t &tm) { i2cBeginTransmission(RTC_ADDR); i2cWrite((uint8_t)RTC_SECONDS); i2cWrite(dec2bcd(tm.Second)); i2cWrite(dec2bcd(tm.Minute)); i2cWrite(dec2bcd(tm.Hour)); //sets 24 hour format (Bit 6 == 0) i2cWrite(tm.Wday); i2cWrite(dec2bcd(tm.Day)); i2cWrite(dec2bcd(tm.Month)); i2cWrite(dec2bcd(tmYearToY2k(tm.Year))); byte ret = i2cEndTransmission(); uint8_t s = readRTC(RTC_STATUS); //read the status register writeRTC( RTC_STATUS, s & ~_BV(OSF) ); //clear the Oscillator Stop Flag return ret; }
bool DS1307RTC::write(tmElements_t &tm) { uint8_t message[7]; message[0]=(dec2bcd(tm.Second)) ; message[1]=(dec2bcd(tm.Minute)); message[2]=(dec2bcd(tm.Hour)); // sets 24 hour format message[3]=(dec2bcd(tm.Wday)); message[4]=(dec2bcd(tm.Day)); message[5]=(dec2bcd(tm.Month)); message[6]=(dec2bcd(tmYearToY2k(tm.Year))); if(I2c.write(DS1307_CTRL_ID, 0x00, message, 7) != 0) { exists = false; return false; } exists = true; return true; }
// -------------------------------------------------------- // Set the RTC's time from a tmElements_t structure. // Returns the bus status (zero if successful). uint8_t DS1302RTC::write(tmElements_t &tm) { uint8_t buff[8]; writeEN(true); if(!writeEN()) return 255; // Error! Write-protect not disabled buff[0] = dec2bcd(tm.Second); // Disable Clock halt flag buff[1] = dec2bcd(tm.Minute); buff[2] = dec2bcd(tm.Hour); // 24-hour mode buff[3] = dec2bcd(tm.Day); buff[4] = dec2bcd(tm.Month); buff[5] = tm.Wday; buff[6] = dec2bcd(tmYearToY2k(tm.Year)); buff[7] = B10000000; // Write protect enable writeRTC(buff); return writeEN(); }