я так понимаю, что ТС необходима синхронность времени на девайсах расположенных в радиусе 100км, при одинаковости прошивок не вижу сложностей, от слова совсем, я даже писать бы ничего не стал (да и не программист), залил Мишин планер в АПМ и радовался, там кстати можно добавить и свои функции, проект доступен в сырцах, даже с предварительно настроенной IDE
Добрый вечер.
Есть вот такой код. Получаем время от GPS и пишем в DS3231.
tmElements_t tm;
tm.Hour = fix.dateTime.hours;
tm.Minute = fix.dateTime.minutes;
tm.Second = fix.dateTime.seconds;
tm.Day = fix.dateTime.date;
tm.Month = fix.dateTime.month;
tm.Year = fix.dateTime.year + 30; //from 2000 + 30 = 1970
time_t t = makeTime(tm) + (timezone * SECS_PER_HOUR + (isDayLightSaving ? daylightOffset_sec : 0));
uint8_t corSec = 0;
uint32_t UTCms = gps.UTCms();
Serial.print(F("UTCms: ")); Serial.println(UTCms);
while (UTCms >= 1000UL) { // Step by seconds until we're in the current UTC second
UTCms -= 1000UL;
corSec++;
Serial.println('+');
}
uint32_t delt = millis();
uint16_t restToFullSec = 1000UL - UTCms;
while (millis() - delt < restToFullSec) { }//wait full second
corSec++;
Serial.print(F("UTCms - corSec: ")); Serial.println(UTCms);
Serial.print(F("corSec: ")); Serial.println(corSec);
t += corSec;
setTime(t);
rtc.adjust(DateTime(t));
gps.UTCms() - это сохраненный период между условно истинным началом секунды UTC и полученным значением времени от GPS.
Вроде все логично, но иногда на двух часах возникает разница от 1 до 3 сек. Не могу понять в чем дело.
Я вроде реализовал синхронизацию по началу такта, но кажется сам GPS дает неверные данные при холодном запуске. Ровно 3 сек. Через 5-7 мин корректирует.
Ну вот так. NEO-6M разные, две библиотеки пробовал. Причем в одной руками правил чтобы время брал только из сообщения ZDA
Ключевое слово тут "библиотеки". ;)
Не думаю.
TinyGPSPlus - отключил все лишнее, добавил ZDA, делаю commit только по приходу данных ZDA. В порту четко видно что иногда время от GPS уменьшается ровно на 3 сек. Особенно часто при холодном старте.
Если поделитесь кодом, то смогу у себя, на паре нео6м, погонять и может вместе определим причину такого поведения и способы решения. Самому интересна тема синхронизации нескольких устройств по времени с GPS.
Если поделитесь кодом, то смогу у себя, на паре нео6м, погонять и может вместе определим причину такого поведения и способы решения. Самому интересна тема синхронизации нескольких устройств по времени с GPS.
А чего там определять то ? Смотрите количество видимых спутников в интересующие вас моменты. Должно помочь.
Именно так. Только с прерыванием. У меня несколько сложнее получается - на борту есть DS3231 от которого берется время. Так что погрешность несколько больше, а именно на время чтения по I2C.
Именно так. Только с прерыванием. У меня несколько сложнее получается - на борту есть DS3231 от которого берется время. Так что погрешность несколько больше, а именно на время чтения по I2C.
я так понимаю, что ТС необходима синхронность времени на девайсах расположенных в радиусе 100км, при одинаковости прошивок не вижу сложностей, от слова совсем, я даже писать бы ничего не стал (да и не программист), залил Мишин планер в АПМ и радовался, там кстати можно добавить и свои функции, проект доступен в сырцах, даже с предварительно настроенной IDE
Добрый вечер.
Есть вот такой код. Получаем время от GPS и пишем в DS3231.
gps.UTCms() - это сохраненный период между условно истинным началом секунды UTC и полученным значением времени от GPS.
Вроде все логично, но иногда на двух часах возникает разница от 1 до 3 сек. Не могу понять в чем дело.
Вроде все логично, но иногда на двух часах возникает разница от 1 до 3 сек. Не могу понять в чем дело.
С какой целью пишете в "Ищу исполнителя" ?
Перепутал
Нужен процесс подстройки часов реального времени под GPS при том, что в них только секунды можно указать.
Вам удалось решить задачу? Столкнулся с подобной, есть что обсудить.
Вам удалось решить задачу? Столкнулся с подобной, есть что обсудить.
Нет, все руки не дойдут, был вынужден переключиться на другие проекты
Я вроде реализовал синхронизацию по началу такта, но кажется сам GPS дает неверные данные при холодном запуске. Ровно 3 сек. Через 5-7 мин корректирует.
Вот вроде бы не видел такого. 3 секунды то они заметны очень
Вот вроде бы не видел такого. 3 секунды то они заметны очень
Ну вот так. NEO-6M разные, две библиотеки пробовал. Причем в одной руками правил чтобы время брал только из сообщения ZDA
Не думаю.
TinyGPSPlus - отключил все лишнее, добавил ZDA, делаю commit только по приходу данных ZDA. В порту четко видно что иногда время от GPS уменьшается ровно на 3 сек. Особенно часто при холодном старте.
Если поделитесь кодом, то смогу у себя, на паре нео6м, погонять и может вместе определим причину такого поведения и способы решения. Самому интересна тема синхронизации нескольких устройств по времени с GPS.
Если поделитесь кодом, то смогу у себя, на паре нео6м, погонять и может вместе определим причину такого поведения и способы решения. Самому интересна тема синхронизации нескольких устройств по времени с GPS.
А чего там определять то ? Смотрите количество видимых спутников в интересующие вас моменты. Должно помочь.
Напишите email, поделюсь кодом. Может найдем причину.
Контакты
mable@mail.ru
whatsUp, viber +7 9173432595
telegram https://t.me/Mr_Mable
Antsanv
Посмотрел эту библиотеку, точность не впечатлила. Плюс-минус пара сотен мс.
Сделал через прерывание на PPS, все отлично работает, точность +-1 мс, никуда ничего не убегает.
Именно так. Только с прерыванием. У меня несколько сложнее получается - на борту есть DS3231 от которого берется время. Так что погрешность несколько больше, а именно на время чтения по I2C.
Именно так. Только с прерыванием. У меня несколько сложнее получается - на борту есть DS3231 от которого берется время. Так что погрешность несколько больше, а именно на время чтения по I2C.
Это время всегда одинаковое, компенсируйте.
Как? Время априори всегда одинаковое. У Вас есть код как это время получить или просто разговор не о чем?