Пт апр 07, 2023 06:36:07
Ср май 10, 2023 12:51:40
Ср май 10, 2023 12:58:39
Пн май 15, 2023 11:56:18
Чт май 18, 2023 21:08:37
jumbo писал(а):при питании только от батарейки 2032 и отсутствии питания +5), время шло нормально.
Вс май 21, 2023 23:59:49
codenamehawk писал(а):Время от температуры плавает.
Вт май 23, 2023 09:21:47
jumbo писал(а):К тому же разница на 3-5 секунд в час думаю от температуры не может быть,
Сб май 27, 2023 00:55:17
Вт авг 29, 2023 07:29:33
Вт авг 29, 2023 11:55:38
Вт авг 29, 2023 13:20:17
ILHAT3777 писал(а):на атмега 48 переделать
Вт авг 29, 2023 14:35:45
Ср авг 30, 2023 13:16:27
Ср мар 13, 2024 08:29:41
Чт мар 21, 2024 06:51:42
Чт мар 21, 2024 08:54:10
DS3231 не тотально совместима с DS1307.steppo писал(а):с модулем DS3231 и 24с32. Не сохраняют время
void DS1307_init (void) {
unsigned char tmphour, tmpmin, tmpsec1, tmpsec2;
//rtc_init(0, 0, 0); // при первом запуске DS1307 его регистры не установлены
// (ручками установим их - биты: rs=0, sqwe=0, out=0)
rtc_write(0x07,0x00); // для совместимости с M41T56 STMicroelectronics (для DS3231 адрес 0x0E)
// тоже самое, что и "rtc_init(0, 0, 0)"
Чт мар 21, 2024 17:33:43
У нее иной адрес ячейки настроек, может в этом дело, нужно разбираться
#define TWEN 2
#define TWIE 0
#define TWINT 7
#define TWEA 6
#define TWSTA 5
#define TWSTO 4
#define TWWC 3
void twi_start(void) {
TWCR = (1<<TWEA)|(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT))) {; }
}
void twi_stop(void) {
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
}
void twi_write(unsigned char _data)
{
TWDR = _data;
TWCR = (1<<TWINT)|(1<<TWEN);
while (!(TWCR & (1<<TWINT))) {;}
}
unsigned char twi_read(unsigned char _ack) {
unsigned char _data;
if (_ack==1)
{
TWCR = (1<<TWEA)|(1<<TWINT) | (1<<TWEN);
}
else
{
TWCR = (1<<TWINT) | (1<<TWEN);
}
while (!(TWCR & (1<<TWINT)))
{
}
_data = TWDR;
return _data;
}
/*
void rtc_init(unsigned char rs,unsigned char sqwe,unsigned char out) {
rs&=3;
if (sqwe) rs|=0x10;
if (out) rs|=0x80;
twi_start();
twi_write(0xd0);
twi_write(7);
twi_write(rs);
twi_stop();
}
*/
void rtc_set_time(unsigned char hour,unsigned char min,unsigned char sec) {
twi_start();
twi_write(0xd0);
twi_write(0);
twi_write(sec);
twi_write(min);
twi_write(hour);
twi_stop();
}
void rtc_set_date(unsigned char day,unsigned char date,unsigned char month,unsigned char year) {
twi_start();
twi_write(0xd0);
twi_write(3);
twi_write(day);
twi_write(date);
twi_write(month);
twi_write(year);
twi_stop();
}
void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec) {
twi_start();
twi_write(0xd0);
twi_write(0);
twi_start();
twi_write(0xd1);
*sec=twi_read(1);
*min=twi_read(1);
*hour=twi_read(0);
twi_stop();
}
void rtc_get_date(unsigned char *day,unsigned char *date,unsigned char *month,unsigned char *year) {
twi_start();
twi_write(0xd0);
twi_write(3);
twi_start();
twi_write(0xd1);
*day=twi_read(1);
*date=twi_read(1);
*month=twi_read(1);
*year=twi_read(0);
twi_stop();
}
unsigned char rtc_read(unsigned char address) {
unsigned char data;
twi_start();
twi_write(0xd0);
twi_write(address);
twi_start();
twi_write(0xd1);
data=twi_read(0);
twi_stop();
return data;
}
void rtc_write(unsigned char address, unsigned char data) {
twi_start();
twi_write(0xd0);
twi_write(address);
twi_write(data);
twi_stop();
}