Проблема с GPS в часах Тимофея вызвана, как мне кажется, вот чем.
В часах для синхронизации времени используется сообщение $GPRMC протокола NMEA 0183.
Выглядит оно примерно так:
- Код:
$GPRMC,hhmmss.sss,A,GGMM.MM,P,gggmm.mm,J,v.v, b.b, ddmmyy, x.x, n,m*hh<CR><LF>
Время находится в самом начале в формате hhmmss.sss, далее следует буква A или V, по которой определяется наличие синхронизации со спутниками (достоверность данных).
У меня есть два GPS-приёмника с разъёмом 3,5 мм, купленных на Али в разное время: один - пару лет назад, другой - буквально недавно. Они сильно отличаются по внутреннему устройству, также на новом приёмнике тоньше кабель и разъём угловой, а не прямой.
Вот сообщение $GPRMC со старого и нового приёмников (координаты свои я убрал по понятным причинам):
- Код:
$GPRMC,160015.000,A,XXXX.XXXX,N,XXXXX.XXXX,E,0.000,253.07,251018,,,A*5C
- Код:
$GPRMC,155727.00,A,XXXX.XXXXX,N,XXXXX.XXXXX,E,0.169,,251018,,,A*78
Как видно, в одном из случаев время имеет 3 знака после точки, а в другом - два. Из-за этого позиция буквы A или V в этих строках разная. В прошивке "Спутника" используется простейшая проверка символа на фиксированном месте (том, что для трёх знаков), поэтому часы работают не со всеми датчиками.
То есть, дело в неправильном алгоритме, т.к. стандарт NMEA 0183 допускает любое число знаков в дробной части секунд.
P.S. Всё, написанное выше, получено на основе анализа дизассемблированной прошивки, часы эти я не собирал и не буду.
P.P.S. Могу попробовать сделать прошивки под разное число знаков дробной части. Это поможет, если приёмник выдаёт всегда фиксированное число знаков.
Добрый день граждане коты). В общем собрал эти часы, но модуль из китая который у многих не "коннектится" и у меня тоже не давал мне покоя. Как написал уважаемый *Trigger*, нас интересует строка $GPRMC, подключил я через USB-TTL сей модуль к компу и что я вижу? а модуль который у многих, выводит нам
«GN» — ГЛОНАСС+GPS и т. п. Что бы побороть это, ставим программку U-centr. подключаемся в ней к модулю, предварительно разобрав модуль и припаять провод recive т.к нам нужно в модуль отправить другие настройки. Подключаем к usb-ttl. (указав скорость 9600 и com порт) и в настройках выключаем Глонасс (т.к формат вывода времени может быть только один или GPS или Глонасс). Отключаем всё кроме GPS и SBAS, жмём «Send». Сохраняем конфигурацию. И вывод становится $GPRMC. Часы мгновенно подхватили время. Прикрепляю скриншот u-centr где менять.