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; }
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(); }