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;
}
Exemple #3
0
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;
}
Exemple #5
0
/*----------------------------------------------------------------------*
 * 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();
}
Exemple #6
0
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();
}
Exemple #7
0
/*----------------------------------------------------------------------*
 * 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;
}
Exemple #8
0
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;
}
Exemple #9
0
// --------------------------------------------------------
// 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();
}