Можно ли уменьшить время обработки GPS модуля?
- Войдите на сайт для отправки комментариев
Доброе время суток всем.
Стоит задача GPS трекера с опросом дополнительных сенсоров с записью данных на SD карту
Имеется NEO6 подключенный по SoftSerial и библиотека TinyGPS
Примерно каждую секунду исправно приходят c GPS данные на скорости 9600. Каждую же секунду опрашиваются дополнительные сенсоры и весь пакет пишется в файл на SD-карту. Проблема в том, что данные с сенсора мне нужно считывать каждые 100мс. Ну хотя бы 200мс. А обработка одного IMEI запросв от GPS занимает не менее 600 мс. Во время обработки пакета GPS я ничего делать не могу, иначе теряется часть данных GPS.
Вот как бы запихать весь IMEI пакет в буфер не задействуя прерывания контроллера (или хотя бы не конфликтуя с другими обработчиками), а затем обработать буфер зараз?
Поможет ли мне как-то аппаратный порт Атмеги с его 64к буффером? (На скорости 9600 это 64мс, не уверен, что остальные обработчики сенсоров у меня уложатся в это время ине позволят переполнится такому маленькому буферу)
Может аппаратное решение есть? (Хоть отдельну мегу ставь на эту задачу).
neo6 сам пукает пакеты раз в секунду, а не по запросу, поэтому в tiny также стоит ожидание 1 сек на serialread, есть софтина от u-blox которая позволяет что то конфигурить, я с ней не разбирался, но знаю что можно менять скорость инрерфейса , попробуйте
Да. И скорость можно увеличить. И другой протокол применить - UBX. Может он более лаконичный чем IMEI
На NEO-5/6 я выставлял частоту пакетов до 10Гц и скорость 115К , если я не ошибаюсь. В даташите ессть АТ комманды для выставления этих параметров.
Получилось выставить скорость на NEO6 115200 5Гц, НО
1. Протокол UBX не работает, когда его выставляешь в конфигураторе - ничего не идет
2. Скорость порта и опроса произвольно сбрасываются на значение по умолчанию 9600/1Гц
3. Описание АТ команд в даташите я не нашел (((
В связи с этим вопрос. Можно ли как то обновить прошивку модуля? (Может у меня глючная)
Где взять АТ команды, чтобы выставить конфигурацию модуля при помощи Ардуины, а не утилитой U-center?
NEO6 теоретически не перепрошивается. Практичеки можно попроборвать, если найдёте прошивку. Можно сохранять/восстанавливать конфигурацию.
Можно подстроить частоту отправки в порт - http://mysku.ru/blog/aliexpress/39669.html#cfg-rate - однако, я заметил, что с определённой частоты, модуль "начинает тормозить" и может на высокой частоте передавать данные, которые изменяются-то на низкой частоте - в результете имеем неэффективное использование интерфейса.
В той же статье есть и ссылка на документацию, исползование UBX-протокола позволит Вам повысить эффективность использования интерфейса, но не повысит эффективность самого модуля - протсо по Serial будет гнаться меньше лишней информации. Команды настройки модуля можно взять из документации или посмотреть в какой-то из этих консолей, настраивая в проге.
Я заметил, что на высокой скорости протокола, не всегда с Ардуины удаётся поймать длинную строку NMEA, если при этом еще происходит обработка прерываний, поэтому порт у меня работает на частоте 4800. Параллельно происходит не так уж много процессов - по прерыванию пересчитывается каданс и (частота), сохраняется в переменную и переключаются светодиоды. Когда у меня еще опрашивалась кнопка после блока if (Serial.available()) {} , на частоте COM-порта выше 9600, я терял части строк NMEA.
Ну и самое главное - то, что не устраивает меня в этом модуле! Не подскажите ли,
как повысить точность NEO6?!
С такой точностью, как у него, я вообще собираю данные раз в 5 секунд и всеравно имею погрешность метров 5, а кода стою на месте, его может мотать и на 40 метров T_T. ПОэтому, имхо, нет надобности разгонять интерфейс работы с этим данным GPS-модулем (другой, поточнее, может и будет смысл опрашиваь чаще).