Изменяем подписи значений телеметрии FrSky в er9x.

Летаю на коптере с контроллером AIOP v.2, прошивкой MahoWii и управляю Turnigy 9X с FrSky модулем и телеметрией. Контроллер передаёт на экран аппы данные о высоте, о GPS-координатах, о расстоянии от точки взлёта и количестве пойманных спутников и, конечно, о батарее.

Всё прекрасно работало, но, как всегда, хотелось лучше. И как часто бывает, собирался поменять какую-то мелочь, а в результате потратил уйму времени и сил.

Проблема была следующая: для количества спутников и расстояния не предусмотрено специальных полей, поэтому эти числа пишутся под видом температуры с соответствующими подписями: T1=, T2=.
Вот так это выглядит:

Хоть я и помнил, где что находится, всё равно перфекционизм не давал покоя.

Попытался сперва изменить строки с названиями в исходниках er9x. Для этого там предусмотрена строки со всеми возможными подписями. Но так и не получилось скомпилировать их так, чтоб они влезли в 64 килобайта. Даже с отключением всего лишнего и с оптимизацией прошивка получалась 67 килобайт. Перепаивать Atmega64 на Atmega128 не хотелось.

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

  1. Сохранить имеющуюся прошивку и eeprom через eePe. Обязательно сделать резервную копию.
  2. Открыть .bin-файл с прошивкой в любом HEX-редакторе, например, Hex Editor Neo.
  3. Найти строку A1= A2= RSSITSIITim1Tim2AltGaltGspd… Это как раз и есть строка с названиями параметров, которые могут передаваться с борта на землю.
  4. Изменить названия по своему вкусу.
    На каждое поле отводится 4 символа, неиспользуемые надо заполнить пробелами, чтобы следующие за ними байты не сместились. Именно поэтому лучше открывать файл в hex-редакторе, а не в блокноте.
  5. Сохраняем и загружаем изменённую прошивку через eePe вместе с eeprom.

После этого на экране телеметрии появились новые подписи:

Единицы измерения всё равно остались прежними - градусы Цельсия © вместо метров (m). Но поправить их уже не так просто, придётся перекомпилировать.

  • 2111
Comments
HATUUL

Спасибо!

mahowik

У вас что ни статья, то находка! Спасибо!

Вы кстати описывали где нить свой осциллограф на STM32F3 Discovery? ГУИ матлаб? Синхра есть?
github.com/alexeystn/F3-Oscilloscope

AlexeyStn
mahowik;bt141622

Вы кстати описывали где нить свой осциллограф на STM32F3 Discovery? ГУИ матлаб? Синхра есть?
github.com/alexeystn/F3-Oscilloscope

Ещё не описывал. Всё, что там сделано - это лишь захват сигнала четырьмя АЦП, синхронизация по уровню, передача на комп и простейшая отрисовка в Матлабе. На самом деле это не больше 20% от всей разработки осциллографа. Были планы создать аналоговую плату и написать GUI на Qt. Но пока я искал, как реализуется аналоговая часть в других осциллографах, я наткнулся на Neil Scope. Он мне очень понравился, и я собрал его вместо того, чтоб разрабатывать с нуля свой. Сейчас занимаюсь его допиливанием. Возможно, в будущем вернусь к своему осциллографу на STM32F3, адаптировав и упростив хорошие решения из NeilScope, но точно не в ближайшее время.

mahowik

Пока пользуюсь этим www.zeitnitz.eu/scope_en и в принципе хватает его pwm, ppm посмотреть. единственное что можно было бы добавить это развязку на вход, т.к. меандр уж совсем кривой получается. Может есть простая схемка?

AlexeyStn

Ни разу не пользовался осциллографами через звуковую карту. Но полагаю, что у неё внутри есть входные цепи с фильтрами и развязывающими конденсаторам, а не сразу напрямую вход АЦП, оттого и искажения. Честно говоря, сомневаюсь, что их возможно внешней схемой скорректировать.

А нет ли у вас скриншота с искажениями?

mahowik
AlexeyStn;bt141655

Ни разу не пользовался осциллографами через звуковую карту. Но полагаю, что у неё внутри есть входные цепи с фильтрами и развязывающими конденсаторам, а не сразу напрямую вход АЦП, оттого и искажения. Честно говоря, сомневаюсь, что их возможно внешней схемой скорректировать.

А нет ли у вас скриншота с искажениями?

primerno tak…

i da skoree vsego vi pravi, eto imenno iz za filtra vo vhodnoy cepi… i tut osobo ne ispravit’…