naza2frsky - адаптер смартпорта для FrSky за 3$

slava135

При сборке дате ошибку TinyGPS\TinyGPS.cpp.o: In function `TinyGPS::TinyGPS()': и далее

slava135

да. версия 1.0.5 (рекомендуемая)
Я до этого TinyGPS подключил как библиотеку, может из за этого. В сборке то код у же есть или наоборот какой то подключенной библиотеки не хватает.
Я пошел тем же путем, но пока стопорит на
int c = GPS_Serial.read();
if (gps.encode©)

Видимо не получает ничего и в условие не входит. Но я библиотеки просто подключал через #include <TinyGPS.h>

Убрал библиотеку из каталога - ошибок нет. Видимо был конфликт. Тестирую

Данных нет. Стопор там же

uint8_t c = GPS_Serial.read();
if (gps.encode©) { // process new gps info

alezz

эээ. Посмотрел внимательно, я там условие одно потерял

slava135

Пробую

Пропущено #if defined(GPS_PROTOCOL_DJI) || defined(GPS_PROTOCOL_UBX) || defined(GPS_PROTOCOL_NMEA)

Теперь в процедуру заходит но дальше в if(GPS_Serial.available() > 0) не проваливается.

Уточню, Мы берем сигнал с пинов RX TX?
Не может быть необходимость опроса? или для GPS датчиков это не свойственно?

Тестирую датчик не подключённый к автопилоту (автономно) если подключить то начинает лезть разный мусор и на TEMP и Full большие цифры появятся потом пропадают.
И начинает выскакивать сообщение о потере телеметрии.

alezz
slava135:

Уточню, Мы берем сигнал с пинов RX TX?
Не может быть необходимость опроса? или для GPS датчиков это не свойственно?

на naza2frsky нужен только RX, ардуино только слушает и команды gps не отправляет. А вот автопилот может переконфигурировать gps под свои нужды и протокол и скорость
И еще ошибку нашел. Исправил, скорее всего из-за нее мусор и валил

slava135

Ничего не могу понять. Уже все перепробовал. По идее в коде все верно.
Но почему не хочет проходить на строку if(GPS_Serial.available() > 0)

alezz
slava135:

Но почему не хочет проходить на строку if(GPS_Serial.available() > 0)

ну значит данных от gps нет ни каких, в буфере последовательно порта пусто

slava135

В этом и странность, при подключении к u-Center - все нормально. Значит данные есть. А тут - хоть тресни.

В примерах используют цикл задержки. Может в этом дело? Я пробовал цикл добавить но тогда начинает отваливаться телеметрия в передатчике. Видимо передача прерывается.

alezz
slava135:

В этом и странность, при подключении к u-Center - все нормально. Значит данные есть. А тут - хоть тресни.

возможно u-Center какие-то команды дает. Подключать от gps модуля только провод передачи и не подключать приема пробовал? В принципе gps модуль можно сконфигурировать под ublox (временно) и попробовать как работает с naza2frsky в таком режиме, протокол ublox я лично проверял, там было все ок. Ну а потом вернуть конфигурацию чтобы с автопилотом работало

slava135

Тоже такая мысль была - попробовал только RX. Работает.
Может порт глючить? Читал есть еще 2 порта RX. Как на них перебросить для пробы?

alezz

на атмега328р (ардуино мини, ардуино нано) увы только один хардварный последовательный порт. Для подключения к смартпорту я использовал софтварный (программный) порт, т.е. эмуляцию, его можно назначить почти на любом цифровом входе. Т.е. теоретически можно оба интерфейса на программные порты повесить, но у них свои ограничения, например по буферу или прерываниям - возможны конфликты. Я точно таким извратом заниматься не буду, проще ардуино мини купить новую. Кстати, если у тебя ардуино нано, были случаи когда запаянная на плате ftdi-шка действительно подсаживала порт RX, людям приходилось резать дорожку. Где-то в этой теме такие случаи были описаны

slava135

Мини Про. Понял. Попробую найти новую. Код по идее должен работать, там уже только переменные проверить. А вот почему не читает - нужно копать.
Спасибо за помощь. Разберусь с портом, может тогда дальше вопросы появятся.

alezz
slava135:

Мини Про

Ну тогда очень сомнительно что виновата ардуинка т.к. через этот же порт она шьется и шьется, как я понял, успешно. Кстати я снова ошибку нашел, она не критична, работать должно было и с ней, но для порядка выкладываю

slava135

Данные пошли. Заменил uint8_t c = GPS_Serial.read(); на int c = GPS_Serial.read();

Теперь нужно разобраться с корректностью данных

alezz
slava135:

Данные пошли. Заменил uint8_t c = GPS_Serial.read(); на int c = GPS_Serial.read();

ну странно конечно

slava135:

Теперь нужно разобраться с корректностью данных

раз данные пошли, обрати внимание на пост выше 😉

slava135

Танцы с бубном 😃
Да, посмотрел. попробую данные покрутить и до ума довести.
Как я понял высота показывается над уровнем моря и что бы высчитать реальную высоту нужно отнять домашнюю точку?

alezz
slava135:

Как я понял высота показывается над уровнем моря и что бы высчитать реальную высоту нужно отнять домашнюю точку?

Имхо это уже косметика, да можно после строки

gps_altitude = gps.f_altitude();

добавить строку

if ((home_altitude == 0) && (sat_visible > 5)) home_altitude = gps_altitude;

slava135

Странные координаты получаю 344.5128E 534.5516N
Для Москвы должны быть 37 и 55

Что то не так в разборе при выводе?

alezz
slava135:

Странные координаты получаю 344.5128E 534.5516N
Для Москвы должны быть 37 и 55
Что то не так в разборе при выводе?

обрати внимание как для ublox координаты считаются

latitude = (int32_t)(get_ubx_latitude()*10000000);
longitude = (int32_t)(get_ubx_longitude()*10000000);

возможно и для nmea такая операция нужна