Exemplo n.º 1
0
void DS1307RTC::write(tmElements_t &tm)
{
  Wire.beginTransmission(DS1307_CTRL_ID);
  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)));   

  Wire.endTransmission();  
}
Exemplo n.º 2
0
void
ntp_get(uint8_t data[6])                // for the log function
{
  tm_t t;
  ntp_sec2tm(ntp_sec, &t);
  data[0] = dec2bcd(t.tm_year);
  data[1] = dec2bcd(t.tm_mon);
  data[2] = dec2bcd(t.tm_mday);
  data[3] = dec2bcd(t.tm_hour);
  data[4] = dec2bcd(t.tm_min);
  data[5] = dec2bcd(t.tm_sec);
}
Exemplo n.º 3
0
void  MCP7940RTC::set(time_t t)
{
  tmElements_t tm;
  breakTime(t, tm);
  tm.Second &= 0x7f;  // stop the oscillator and write the data
  write(tm);
  uint8_t s = (tm.Second | 0x80); // assert oscillator start bit
  // Start the oscillator
  Wire.beginTransmission(MCP7940_CTRL_ID);
#if ARDUINO >= 100  
  Wire.write((uint8_t)0x00);			
  Wire.write((dec2bcd(tm.Second) | 0x80));							// Seconds
#else
  Wire.send(0x00);
  Wire.send(s);
#endif
  Wire.endTransmission();
}
Exemplo n.º 4
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();
}
Exemplo n.º 5
0
bool DS1307RTC::write(tmElements_t &tm) {
	Wire.beginTransmission(DS1307_CTRL_ID);
	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)));

	if (Wire.endTransmission() != 0) {
		exists = false;
		return false;
	}
	exists = true;
	return true;
}
Exemplo n.º 6
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;
}
Exemplo n.º 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;
}
Exemplo n.º 8
0
// Save time
void ds3231_save(timeDate_s* timeData)
{
	// Month is stored starting at 0 in program, but RTC starts at 1
//	byte month = timeData->month + 1;
//	if(month == 0b00001010) // invalid BCD, added 1 to 9 = 10 = bad
//		month = 0b00010000; // add 6 to fix, but that increases program size, so just set manually

// TODO: write in one go instead of individually

	write(DS3231_ADDR_SECS,	dec2bcd(timeData->time.secs));
	write(DS3231_ADDR_MINS,	dec2bcd(timeData->time.mins));
	write(DS3231_ADDR_HRS,	dec2bcd(timeData->time.hour));
	write(DS3231_ADDR_DAY,	timeData->date.day + 1); // Don't need to convert to BCD since it only stores 0 - 6, Day is also stored starting at 0 in program, but RTC starts at 1
	write(DS3231_ADDR_DATE,	dec2bcd(timeData->date.date));
	write(DS3231_ADDR_MONTH,	dec2bcd(timeData->date.month + 1));
	write(DS3231_ADDR_YEAR,	dec2bcd(timeData->date.year));
}
Exemplo n.º 9
0
Arquivo: devrtc.c Projeto: 8l/inferno
static void
setrtc(Rtc *rtc)
{
	struct RTCdev *dev;

	dev = nvr.rtc;
	dev->control |= RTCWRITE;
	wbflush();
	dev->year = dec2bcd(rtc->year % 100);
	dev->mon = dec2bcd(rtc->mon);
	dev->mday = dec2bcd(rtc->mday);
	dev->hour = dec2bcd(rtc->hour);
	dev->min = dec2bcd(rtc->min);
	dev->sec = dec2bcd(rtc->sec);
	wbflush();
	dev->control &= ~RTCWRITE;
	wbflush();
}
Exemplo n.º 10
0
int ds1307_clock_set(const struct tm * const tm) {
	int ret;
	struct ds1307_raw raw;

	// Sanity check
	ret = tm_valid(tm);
	if (ret) {
		return -1;
	}

	// We also check the year 2000 <= x < 2100
	if (tm->tm_year < 100 || tm->tm_year >= 200) {
		return -1;
	}

	// Read the current seconds value
	ret = read((uint8_t *)&raw, ADDR_SEC, 1); // just the first byte is enough
	if (ret) {
		return ret;
	}

	// Update the values, keeping the CH bit intact
	raw.sec = dec2bcd(tm->tm_sec);
	raw.min = dec2bcd(tm->tm_min);
	raw.hour = dec2bcd(tm->tm_hour);
	raw.wday = dec2bcd(tm->tm_wday + 1);
	raw.mday = dec2bcd(tm->tm_mday);
	raw.mon = dec2bcd(tm->tm_mon + 1);
	raw.year = dec2bcd(tm->tm_year % 100);

	// Write the values back
	ret = write((uint8_t *)&raw, ADDR_SEC, sizeof(raw));
	if (ret) {
		return ret;
	}

	return 0;	
}
Exemplo n.º 11
0
//--------------------------------------------------------------------------------
// Sets time of RTC device and returns whether the operation was successful.
bool DS3232Controller::setDeviceTime(byte dayOfWeek, byte day, byte month,
		byte y2kYear, byte hour, byte minute, byte second) {
	Wire.beginTransmission(RTC_ADDR);
	Wire.write((uint8_t) RTC_SECONDS);
	Wire.write(dec2bcd(second));
	Wire.write(dec2bcd(minute));
	Wire.write(dec2bcd(hour));  //sets 24 hour format (Bit 6 == 0)
	Wire.write(dayOfWeek);
	Wire.write(dec2bcd(day));
	Wire.write(dec2bcd(month));
	Wire.write(dec2bcd(y2kYear + 30)); // convert Y2K year to year from 1970
	byte i2cStatus = Wire.endTransmission();

	uint8_t s = readRTC(RTC_STATUS);      //read the status register
	writeRTC(RTC_STATUS, s & ~_BV(OSF));  //clear the Oscillator Stop Flag

	readCurrentTimeFromDevice();	// sync time with device

	return (i2cStatus == 0);
}
Exemplo n.º 12
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();
}
Exemplo n.º 13
0
void RTCCValue::dayOfWeek(unsigned char dow)
{
    a_date = (a_date & 0xFFFFFF00) | dec2bcd(dow);
}
Exemplo n.º 14
0
void RTCCValue::day(unsigned char day)
{
    a_date = (a_date & 0xFFFF00FF) | (dec2bcd(day)<<8);
}
Exemplo n.º 15
0
void RTCCValue::month(unsigned char month)
{
    a_date = (a_date & 0xFF00FFFF) | (dec2bcd(month)<<16);
}
Exemplo n.º 16
0
void RTCCValue::year(unsigned char year)
{
    a_date = (a_date & 0x00FFFFFF) | (dec2bcd(year)<<24);
}
Exemplo n.º 17
0
void RTCCValue::date(unsigned char year, unsigned char month, unsigned char day)
{
    a_date = (a_date & 0xFF) | (dec2bcd(year)<<24) | (dec2bcd(month)<<16) | (dec2bcd(day)<<8);
}
Exemplo n.º 18
0
void RTCCValue::hours(unsigned char hours)
{
    a_time = (a_time & 0x00FFFFFF) | (dec2bcd(hours)<<24);
}
Exemplo n.º 19
0
void setTimeHour(uint8_t hour){
	DS1307Write(0x02,dec2bcd(hour) & 0x3F);	//set hours	
}
Exemplo n.º 20
0
void setTimeMinute(uint8_t minute){
	DS1307Write(0x01,dec2bcd(minute));	//set minutes	
}
Exemplo n.º 21
0
void rtc_write_alarm(RTC_TIME *alarm) {
	write_rtcv(SEC_ALARM, dec2bcd(alarm->sec));
	write_rtcv(MIN_ALARM, dec2bcd(alarm->min));
	write_rtcv(HOUR_ALARM, dec2bcd(alarm->hour));
}
Exemplo n.º 22
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();  
}
Exemplo n.º 23
0
void setTimeSecond(uint8_t second){
	DS1307Write(0x00,dec2bcd(second));	//set seconds	
}
Exemplo n.º 24
0
void RTCCValue::minutes(unsigned char minutes)
{
    a_time = (a_time & 0xFF00FFFF) | (dec2bcd(minutes)<<16);
}
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
  }  
}
Exemplo n.º 26
0
void RTCCValue::seconds(unsigned char seconds)
{
    a_time = (a_time & 0xFFFF00FF) | (dec2bcd(seconds)<<8);
}
Exemplo n.º 27
0
bool DS1307RTC::write(tmElements_t &tm)
{
  #ifdef __STM32F1__
    DS1307RTC_INIT_WIRE();
  #endif
  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;
}
Exemplo n.º 28
0
void startClock(void){
	DS1307Write(0x00,dec2bcd(getTimeSecond()) | 0x7F);	//set seconds
}
Exemplo n.º 29
0
static void convert_decimal_to_bcd(u8 *buf, u8 len)
{
    int i = 0;
    for (i = 0; i < len; i++)
        buf[i] = dec2bcd(buf[i]);
}
Exemplo n.º 30
0
void RTCCValue::time(unsigned char hours, unsigned char minutes, unsigned char seconds)
{
    a_time = (a_time & 0xFF) | (dec2bcd(hours)<<24) | (dec2bcd(minutes)<<16) | (dec2bcd(seconds)<<8);
}