К Arduino UNO R3 подключены real time clock DS1302, для работы с ними использую эту библиотеку https://iarduino.ru/file/235.html в последней версии 2.0.0, в итоге часы спешат примерно на 9 секунд в день.
Вот код:
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302,8,6,7);
void setup() {
delay(300);
Serial.begin(9600);
time.begin();
//time.settime(00,00,00); - после установки времени я перезаписываю код в таком виде, естественно
}
void loop() {
int xxx = time.seconds;
Serial.println(time.gettime("H:i:s"));
Serial.println(xxx);
delay(5000);
}
Это таймер, мне всего лишь надо его точное срабатывание 2 раза в день, чтобы не приходилось его часто корректировать вручную. Что посоветуете, скорректировать библиотеку относительно моего экземпляра часов (если это возможно), или просто в код вставить корректор, который будет добавлять 9 сек в день?
по DS3231 есть пост на старом форуме как подстроить на старение кварца, у меня несколько таких модулей и все разные, самый лучший после калибровки имеет точность хода лучше 30 миллисекунд за три месяца, остальные раза в два-три похуже…так что мой совет менять модуль и откалиброваться
Спасибо за совет, но поиск там тем про 3231 сотни выдаёт, и в первых же их там ругают вплоть до минуты за сутки разницы. Не буду заморачиваться, скорректирую программно. Не в курсе, из loop() в setup() можно перепрыгнуть в ходе работы ардуино по какому-нибудь условию? Так-то я новичок
Вопрос цены. Дешевый модуль - вот и все дела. Можно кварц перепаять - например, на компьютерных материнках ставятся кварцы всяко лучше, чем на этих модулях, но скорее всего это будет что мертвому припарка
Можно. setup() - обычная функция, ее можно вызвать из loop() как любую другую.
Только вы должны четко понимать, что делаете. В setup() обычно инициализация библиотек пишется, некоторые библиотеки не любят, чтобы их два раза инициализировали
если корректировать библиотеку необходимо, чтобы она умела корректировать натиканное время в своих часах, а по другому никак, любой сбой и перезагрузка не должны влиять на конечный результат…я делал аналогичное в часиках на миллис() и чтобы хоть как-то приблизится к реальному времени за промежуток неделя там был сложный алгоритм подвода часиков раз в секунду, раз в минуту, раз в час (вычисляемые коэффициенты корректировки в миллисекундах) …но это всё от крайней степени бедности…DS3231 решает проблему точности хода раз и навсегда
Спасибо, потом подумаю над этим, пока непонятно. Надо библиотеку поподробней изучить и вообще возможности языка. Я думал просто что-то вроде if время = 21:00:00 then settime 21:00:09