Exemplo n.º 1
0
Arquivo: ds1307.c Projeto: shtomik/AVR
unsigned char ds1307_setdate(unsigned char year, unsigned char month, unsigned char day, unsigned char hour, unsigned char minute, unsigned char second)
{
	//sanitize data
	if (second < 0 || second > 59 ||
		minute < 0 || minute > 59 ||
		hour < 0 || hour > 23 ||
		day < 1 || day > 31 ||
		month < 1 || month > 12 ||
		year < 0 || year > 99)
		return 8;

	//sanitize day based on month
	if(day > pgm_read_byte(ds1307_daysinmonth + month - 1))
		return 0;

	//get day of week
    unsigned char dayofweek = ds1307_getdayofweek(year, month, day);

	//write date
	i2c_start_wait(DS1307_ADDR | I2C_W);
	i2c_wrt(0x00);//stop oscillator
	i2c_wrt(ds1307_dec2bcd(second));
	i2c_wrt(ds1307_dec2bcd(minute));
	i2c_wrt(ds1307_dec2bcd(hour));
	i2c_wrt(ds1307_dec2bcd(dayofweek));
	i2c_wrt(ds1307_dec2bcd(day));
	i2c_wrt(ds1307_dec2bcd(month));
	i2c_wrt(ds1307_dec2bcd(year));
	i2c_wrt(0x00); //start oscillator
	i2c_stop();

return 1;
}
Exemplo n.º 2
0
void ds1307_set_datetime(rtc_datetime_t *dtp){
    //write date
    i2c_start_wait(DS1307_ADDR | I2C_WRITE);
    i2c_write(0x00);//set register pointer to 0
    i2c_write(ds1307_dec2bcd(dtp->time.second));
    i2c_write(ds1307_dec2bcd(dtp->time.minute));
    i2c_write(ds1307_dec2bcd(dtp->time.hour));
    i2c_write(ds1307_dec2bcd(dtp->date.dow));
    i2c_write(ds1307_dec2bcd(dtp->date.dom));
    i2c_write(ds1307_dec2bcd(dtp->date.month));
    i2c_write(ds1307_dec2bcd(dtp->date.year));
//    i2c_write(0b00010000); // write to register 7: Square wave settings
    i2c_stop();
}