Обновление/коррекция времени
- Войдите на сайт для отправки комментариев
Доброго дня (ночи) всем. Помогите кто чем может - что то я уже четвертый день не могу время победить. Кристалл ESP32. Время обновляю с NTP по WIFI. Отдельного модуля RTC нету. Изначально думал время обновлять раз в сутки (пилю часы), но увидел что на сутки время уходит сильно. С целью понять на сколько уходит время, и обновляется ли оно вообще выделил в рабочем скетче вот такую подпрограмму:
void UpdateTime1() { //setTime(1500000000); //тут я время перед обновлением пытаюсь испортить так... //adjustTime(100000); // и эдак, чтобы ошибку увидеть getLocalTime(&timeinfo); Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S"); //время до обновления oldTime1= time(nullptr); Serial.print(1); configTime(gmtOffset_sec, daylightOffset_sec, ntpServer); Serial.print(2); getLocalTime(&timeinfo); Serial.print(3); newTime1= time(nullptr); Serial.print(4); DiffTime= newTime1 - oldTime1; // Тут я надеялся погрешность времени увидеть Serial.print(5); numupt= numupt+1; Serial.println(timeStatus()); }
Стал обновлять время ею раз в 5 минут, пробовал и раз в час, результат тот же. Циферки там в сериал выводятся потому что вчера еще контроллер ребутился как то странно при обновлении времени - хотел увидеть в каком месте обрывается программа - а он ребутиться перестал ))) . Если раскоментированы "setTime" или "adjustTime" то результат в сериале абсолютно тот же.
Раз в секунду в сериал вывожу вот такой колхоз:
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S"); Serial.println("Секунд: " + String(nowtime) + " ; Ошибка: " + String(DiffTime) + "; Обновление: " + String(numupt) + "; UppTick: " + String(UpdateTick)); Serial.println("...");
В результате в сериале даже при раскоментированом "setTime" и даже если обновляюсь через час - когда отставание видно уже на глаз, вижу вот такое (после "///" - мои коменты):
...
уже четвертый день не могу время победить.
Люди столетиями и тысячелетиями пытались - никому ещё не удалось.
---------
Хотите нормальной помощи, давайте полнофункциональный скетч. Как можно короче, но чтобы работал и показывал проблему.
Скетч весь дать не жалко, но он большой и страшный - там время показывается на адресуемых светодиодах, вывод на экран, вывод в сериал, обновление времени и это все в виде кучи моих попыток сделать все разными способами. Давать ТАКОЙ скетч, я счел неуважением к сообществу, а как под спойлер его сунуть не разобрался. Но одну идею я из вашей реплики возьму - нужно мне проблемный код вынести в отдельный скетч, и посмотреть: может я проблемму не там вообще ищу.
А уважаемое сообщество я все же спрошу совета: как мне програмно высчитать погрешность хода часов, и как эту погрешность скоректировать. Ато мои потуги (как первом посте) ни какого видимого эффекта не производят.
З.Ы. Вот и спойлер "нашел" . Код под спойлером. Но это мусорка, несущая в себе все следы моих экспериментов.
А непробывали тупо заменить кварц? Многим помогало. И коррекцию не надо дописывать. :-)
У меня двое часов, собраны на на DS3231(одни на мтрицах, другие в метеостнции). За год я не заметил, что бы время начало отставать или спешить хоть на секунду.