#include "DS3231.h"
_time Time, alarm;
_date Date;
uint8_t ds3231_dec2byte(uint8_t dec){
uint8_t byte = ((dec/10) << 4)|(dec%10);
return byte;
}
uint8_t ds3231_byte2dec(uint8_t byte){
uint8_t dec = (((byte >> 4) * 10) + (byte & 0x0f));
return dec;
}
void DS3231_get_data(uint8_t dev_addr, uint8_t reg_addr){
twi_start();
twi_sendbyte(dev_addr<<1|0);
twi_sendbyte(reg_addr);//����� ��������, �� �������� ����� ������
twi_start();
twi_sendbyte(dev_addr<<1|1);//���������� DS3231_ADDR|1 (����� ������� � ���� ������ �� ��������)
Time.sec=ds3231_byte2dec(twi_readbyte());
Time.min=ds3231_byte2dec(twi_readbyte());
Time.hour=ds3231_byte2dec(twi_readbyte());
Date.day=ds3231_byte2dec(twi_readbyte());
Date.date=ds3231_byte2dec(twi_readbyte());
Date.month=ds3231_byte2dec(twi_readbyte());
Date.year=ds3231_byte2dec(twi_read_last_byte());
twi_stop();
}
void DS3231_write_time(uint8_t sec, uint8_t min, uint8_t hour){
twi_start();
twi_sendbyte(DS3231_ADDR<<1|0);
twi_sendbyte(DS3231_SEC);//����� ��������, � �������� ������ ������ ������ � ��������
twi_sendbyte(ds3231_dec2byte(Time.sec));
twi_sendbyte(ds3231_dec2byte(Time.min));
twi_sendbyte(ds3231_dec2byte(Time.hour));
}
void DS3231_write_sec( uint8_t sec){
twi_start();
twi_start();
twi_sendbyte(DS3231_ADDR<<1|0);
twi_sendbyte(DS3231_SEC);//����� ��������, � �������� ������ ������ ������ � ��������
twi_sendbyte(ds3231_dec2byte(Time.sec));
}
void DS3231_write_min( uint8_t min){
twi_start();
//twi_start();
twi_sendbyte(DS3231_ADDR<<1|0);
twi_sendbyte(DS3231_MIN);//����� ��������, � �������� ������ ������ ������ � ��������
twi_sendbyte(ds3231_dec2byte(Time.min));
}
void DS3231_write_hour( uint8_t hour){
twi_start();
twi_sendbyte(DS3231_ADDR<<1|0);
twi_sendbyte(DS3231_HOUR);//����� ��������, � �������� ������ ������ ������ � ��������
twi_sendbyte(ds3231_dec2byte(Time.hour));
}
void DS3231_write_date( uint8_t day, uint8_t date, uint8_t month, uint8_t year){
twi_start();
twi_sendbyte(DS3231_ADDR<<1|0);
twi_sendbyte(DS3231_DAY);//����� ��������, � �������� ������ ������ ������ � ��������
twi_sendbyte(ds3231_dec2byte(Date.day));
twi_sendbyte(ds3231_dec2byte(Date.date));
twi_sendbyte(ds3231_dec2byte(Date.month));
twi_sendbyte(ds3231_dec2byte(Date.year));
}
void DS3231_write_date_number( uint8_t date){
twi_start();
twi_sendbyte(DS3231_ADDR<<1|0);
twi_sendbyte(DS3231_DATE);//����� ��������, � �������� ������ ������ ������ � ��������
twi_sendbyte(ds3231_dec2byte(Date.date));
}
void DS3231_write_month( uint8_t month){
twi_start();
twi_sendbyte(DS3231_ADDR<<1|0);
twi_sendbyte(DS3231_MONTH);//����� ��������, � �������� ������ ������ ������ � ��������
twi_sendbyte(ds3231_dec2byte(Date.month));
}