Почему-то после отключения питания ардуино сбивается время. Батарейка.
// Пример: uRTCLib + DS3231
//author: Alunts Arthur Arthurovich;
//Kamil v ad;
//Pikunov v ad;
#include "uRTCLib.h"
uRTCLib rtc(0x68); // адрес 0x68 для DS3231
String de1="/";
String de2=":";
int ss = 0;
int mm = 0;
int hh = 0;
int day = 0;
int mon = 0;
int yr = 0;
int dow = 0;
int Temp0 = 0;
char WW1[8][24] = { "0","Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"};
void getTime0(){
// Обновляем внутренние данные модуля (если библиотека поддерживает refresh)
rtc.refresh();
ss = rtc.second();
mm = rtc.minute();
hh = rtc.hour();
day = rtc.day(); // день месяца
mon = rtc.month(); // месяц
yr = 2000 + rtc.year(); // год (uRTCLib возвращает год относительно 2000)
dow = rtc.dayOfWeek(); // день недели (1..7)
Temp0 = rtc.temp()/100.0f;;
Serial.println(yr+de1+mon+de1+day+de1+ WW1[dow]+" "+hh+de2+mm+de2+ss+" "+de1+Temp0);
}
void setup() {
Serial.begin(9600);
URTCLIB_WIRE.begin();
//_______ ss, mm, hh, w, dd, mm, yy 26=2026________
//rtc.set(30, 22, 12, 1, 4, 5, 26);//____________
delay(3000); // читать каждую секундуgetTime0();
getTime0();
}
void loop() {
//delay(1000); // читать каждую секундуgetTime0();
//getTime0();
}
v258
04.Май.2026 08:49:36
2
У ds3231 нужно включать работу от батарейки, по умолчанию при отключении питания осцилятор останавливается.
Как это делается в используемой библиотеке, я не знаю ))
Осцилятор, как его врубить?
Какую либу использовать?
v258
04.Май.2026 08:53:08
4
countervector0000:
как его врубить?
Если ручками (самому читать/писать регистры), то так
uint8_t temp_buffer = read_register(0x0e) & 0b11100111;
// поднимаем флаг BBSQW - работа от батареи
temp_buffer = temp_buffer | 0b01000000;
// устанавливаем ~EOSC и INTCN в 0 - запускаем генератор
temp_buffer = temp_buffer & 0b01111011;
// записываем контрольный бит
write_register(0x0e, temp_buffer);
v258
04.Май.2026 08:54:54
5
Собственно, чтение/запись
#define CLOCK_ADDRESS 0x68
uint8_t read_register(uint8_t reg)
{
Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(reg);
Wire.endTransmission();
Wire.requestFrom(CLOCK_ADDRESS, 1);
return Wire.read();
}
void write_register(uint8_t reg, uint8_t data)
{
Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(reg);
Wire.write(data);
Wire.endTransmission();
}
Спасибо, блеф, но куда это всавлять в setup, или в гавно пьян?
v258
04.Май.2026 08:56:37
7
countervector0000:
это всавлять в setup
Именно так
void setup() {
Serial.begin(9600);
URTCLIB_WIRE.begin();
//_______ ss, mm, hh, w, dd, mm, yy 26=2026________
//rtc.set(30, 22, 12, 1, 4, 5, 26);//____________
uint8_t temp_buffer = read_register(0x0e) & 0b11100111;
// поднимаем флаг BBSQW - работа от батареи
temp_buffer = temp_buffer | 0b01000000;
// устанавливаем ~EOSC и INTCN в 0 - запускаем генератор
temp_buffer = temp_buffer & 0b01111011;
// записываем контрольный бит
write_register(0x0e, temp_buffer);
delay(3000); // читать каждую секундуgetTime0();
getTime0();
}
// Пример: uRTCLib + DS3231
//author: Alunts Arthur Arthurovich;
//Kamil v ad;
//Pikunov v ad;
#include "uRTCLib.h"
uRTCLib rtc(0x68); // адрес 0x68 для DS3231
String de1="/";
String de2=":";
int ss = 0;
int mm = 0;
int hh = 0;
int day = 0;
int mon = 0;
int yr = 0;
int dow = 0;
int Temp0 = 0;
char WW1[8][24] = { "0","Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"};
void getTime0(){
// Обновляем внутренние данные модуля (если библиотека поддерживает refresh)
rtc.refresh();
ss = rtc.second();
mm = rtc.minute();
hh = rtc.hour();
day = rtc.day(); // день месяца
mon = rtc.month(); // месяц
yr = 2000 + rtc.year(); // год (uRTCLib возвращает год относительно 2000)
dow = rtc.dayOfWeek(); // день недели (1..7)
Temp0 = rtc.temp()/100.0f;;
Serial.println(yr+de1+mon+de1+day+de1+ WW1[dow]+" "+hh+de2+mm+de2+ss+" "+de1+Temp0);
}
void setup() {
Serial.begin(9600);
URTCLIB_WIRE.begin();
//_______ ss, mm, hh, w, dd, mm, yy 26=2026________
//rtc.set(30, 22, 12, 1, 4, 5, 26);//____________
uint8_t temp_buffer = read_register(0x0e) & 0b11100111;
// поднимаем флаг BBSQW - работа от батареи
temp_buffer = temp_buffer | 0b01000000;
// устанавливаем ~EOSC и INTCN в 0 - запускаем генератор
temp_buffer = temp_buffer & 0b01111011;
// записываем контрольный бит
write_register(0x0e, temp_buffer);
delay(3000); // читать каждую секундуgetTime0();
getTime0();
}
void loop() {
//delay(1000); // читать каждую секундуgetTime0();
//getTime0();
}
Ругается на read_register? LДА!
Кэп, А почем-то оно ругается я сделал как Вы сказали?
Кэп, не понятно? Можно рабочий version?
v258
04.Май.2026 09:28:10
12
countervector0000:
Можно рабочий version?
Вставьте код из сообщения по ссылке выше перед setup()
Говорит отказано в доступе это мой квас!
#define CLOCK_ADDRESS 0x68 uint8_t shSimpleRTC::read_register(uint8_t reg) { Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(reg); Wire.endTransmission(); Wire.requestFrom(CLOCK_ADDRESS, 1);
return Wire.read();
}
void shSimpleRTC::write_register(uint8_t reg, uint8_t data){
Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(reg); Wire.write(data);
Wire.endTransmission();
Здесь ничего не пропущено!?
Дайте, пожалуйста, полный код неразбериха!
v258
04.Май.2026 09:36:13
14
Я дал вам код. Если вы не в состоянии перейти по ссылке и скопировать его - это уже не моя проблема
MMM
04.Май.2026 09:50:38
15
интересно, я один это вижу в сообщениях ТС ? Может у меня глюки?
MMM
04.Май.2026 09:51:17
16
конечно он не в состоянии. Ты его забыл что ли? Посылай его сразу
Спасибо, вроде бы катит все как надо!!
Как заряжать батаейрку?
// Пример: uRTCLib + DS3231
//author: Alunts Arthur Arthurovich;
//Kamil v ad;
//Pikunov v ad;
#include "uRTCLib.h"
uRTCLib rtc(0x68); // адрес 0x68 для DS3231
String de1="/";
String de2=":";
int ss = 0;
int mm = 0;
int hh = 0;
int day = 0;
int mon = 0;
int yr = 0;
int dow = 0;
int Temp0 = 0;
char WW1[8][24] = { "0","Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"};
#define CLOCK_ADDRESS 0x68
uint8_t read_register(uint8_t reg)
{
Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(reg);
Wire.endTransmission();
Wire.requestFrom(CLOCK_ADDRESS, 1);
return Wire.read();
}
void write_register(uint8_t reg, uint8_t data)
{
Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(reg);
Wire.write(data);
Wire.endTransmission();
}
void getTime0(){
// Обновляем внутренние данные модуля (если библиотека поддерживает refresh)
rtc.refresh();
ss = rtc.second();
mm = rtc.minute();
hh = rtc.hour();
day = rtc.day(); // день месяца
mon = rtc.month(); // месяц
yr = 2000 + rtc.year(); // год (uRTCLib возвращает год относительно 2000)
dow = rtc.dayOfWeek(); // день недели (1..7)
Temp0 = rtc.temp()/100.0f;;
Serial.println(yr+de1+mon+de1+day+de1+ WW1[dow]+" "+hh+de2+mm+de2+ss+" "+de1+Temp0);
}
void setup() {
Serial.begin(9600);
URTCLIB_WIRE.begin();
//_______ ss, mm, hh, w, dd, mm, yy 26=2026________
//rtc.set(30, 45, 14, 1, 4, 5, 26); //____________
uint8_t temp_buffer = read_register(0x0e) & 0b11100111;
// поднимаем флаг BBSQW - работа от батареи
temp_buffer = temp_buffer | 0b01000000;
// устанавливаем ~EOSC и INTCN в 0 - запускаем генератор
temp_buffer = temp_buffer & 0b01111011;
// записываем контрольный бит
write_register(0x0e, temp_buffer);
delay(3000); // читать каждую секундуgetTime0();
getTime0();
}
void loop() {
delay(1000); // читать каждую секундуgetTime0();
getTime0();
}
v258
04.Май.2026 09:59:08
18
Зато, типа, решил самостоятельно
MMM
04.Май.2026 10:01:07
19
конечно сам!
“вы мне ничем не помогли!” (с)
В чем обида-то?
-Я же Вас знаю:Вы меня любите, я себя тоже.
-Я опубликовал готовый вариант (полный код).
В любом случае Огромное Спасибо за Ваш Бесценный Труд.)))
Кстати. А Вам слабо?