Baychi OpenLRS - дружелюбная ЛРС с широкими возможностями )

AndreyI
Shuricus:

Выложите тут исправленные фрагменты кода, а я добавлю в дневничек. Так будет гораздо круче.

Что за недочет, и что за глюк? Интересно поподробнее.

Вот это я называю глюком:
// byte i=(val+TICK_IN_BIT/2)/TICK_IN_BIT; // сколько бит формируем (оригинальна строка)
word i=(val+TICK_IN_BIT/2)/TICK_IN_BIT; // сколько бит формируем (исправленая строка)

Переменная val это длительность импульса (значение таймера), размерность переменной 16 разрядов, при этом разрядность i назначается всего в восемь разрядов. Как следствие при определенном значении паузы между пакетами, эта самая пауза программой не увидится. Например при значении val=15530, прога не поймет что это пауза между пакетами и будет пытаться разобрать ее на байты.

Вот это я называю недочетом:
if(++pktPtr >= SBUS_PKT_SIZE) {
endPkt();
// break; // Оригинал
// } // Оригинал
} // Правка
break; // Правка

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

Изменение для SBUS2:
if(pktPtr >= SBUS_PKT_SIZE && eCntr1 == 0 && // если набран кворум, нет ошибок по четности
// sbusPkt[0] == 0x0F && sbusPkt[24] == 0x00 ) { // проверяем начало и конец (оригинальная строка)
sbusPkt[0] == 0x0F && (sbusPkt[24] == 0x00 || sbusPkt[24] == 0x04 || sbusPkt[24] == 0x14 || sbusPkt[24] == 0x24 || sbusPkt[24] == 0x34)) { // проверяем начало и конец (исправленая строка)

Смысл в том что современные приемники поддерживающие SBUS2, да же в режиме простого SBUS, в конце пакета передают не 0, а другие значения. Все они отражены выше.

Ну и для корректного определения ФС с оранжевого приемника, пришлось сделать такое изменение:
if(sbusPkt[23]&0x8 || sbusPkt[23]&0x10) return false;

Тут решение спорное, но работает нормально и на оранже и на оригинальном приемнике.

Plohish:

Уже хрен знает сколько использую Сбас на Байчи и никогда никаких глюков не видел…

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

Plohish
AndreyI:

… Именно по этому алгоритму происходит аппаратный разбор последовательного протокола в атмеге и именно по этому оранжевый приемник работает с OpenLrsNG и не работает с этой прошивкой.

резонный вопрос, в Тини от Эксперта тоже стоит Атмега, почему она работает без проблем?

emax

не забываем про фьюзы, через бутлоадер их изменить нельзя, нужен ISP программатор.

AndreyI
Plohish:

резонный вопрос, в Тини от Эксперта тоже стоит Атмега, почему она работает без проблем?

Так ответ был в предыдущем сообщении, у Эксперта все разбирается аппаратно Т.к. Сбас там подключается на последовательный порт. И соответственно там все работает.

khomyakk
emax:

не забываем про фьюзы

Я чуть выше спрашивал. Оптибут подходит? Дело в том, что у меня был глюк с родным ардуиновским загрузчиком на 100мВт передатчике в режиме приемника. После ряда ФС на 10км приёмник не восстановил связь с ретранслятором. Вернулся домой и сел по отсечке регуля. Вернуть связь помогло передергивание питания на приемник. Прошил оптибут в приёмник и больше такой глюк не повторялся.

khomyakk

Прошил модуль как приемник(Оранж - ещё раз спасибо Эдуарду), через путти подключился. попробовал менять регистры, вроде всё получается.
Теперь вопросы. 😃
Приемник у меня должен выдавать ппм для автопилота.
В регистр 7=1
Что писать в регистр 5? У меня в ретрансляторе стоит 10 канальный приёмник на 2,4ГГц с ппм выходом.
11-18 регистры отвечают за каналы. Так как нет рации на этот диапазон буду биндить с передатчиком с прописанными каналами и в эти регистры пропишутся каналы из передатчика. И частоты совпадут. И мне частоту не надо будет подстраивать. Всё правильно понял?
Теперь регистры по файлсейву, с 31 по 38. В опенлрснг я жестко(галочками) прописал в третий канал 950. Как здесь это осуществить? У меня АПМ настроен на ФС по 3-каналу.

Shuricus
khomyakk:

В опенлрснг я жестко(галочками) прописал в третий канал 950. Как здесь это осуществить?

Это я как раз попросил доделать AndreyI, если он захочет. Только добавлением строк в прошивку.
Пока ФС только кнопкой.

А где вы вообще нашли 31-38 регистры?

khomyakk

Александр, а остальные вопросы можешь прокомментировать?
31-38-й у меня отображается в путти

Shuricus

Это, видимо, emax добавил. Очень круто! А тогда вопрос к Эдику - можно отключить функцию изменения ФС дистанционно? Хочу, что бы сбросить ФС было невозможно. И выложить код с регистрами ФС сюда. Спасибо.

По остальным вопросам вроде все правильно, по пятому регистру - я летаю с 0, если у меня ППМ на входе.

Plohish

судя по F14 это чей то самопал…
на Гитхабе у Байчи только F13

Shuricus

Хорошая фишка! В АПМ долботня ФС на аппе настраивать. И слетать никогда не будет. Так надежнее.

khomyakk

Емах несколькими постами выше выкладывал. Но это для оранж 100мвт в режиме приемника. А можно указать ниже 1000мкс?

emax

Регистры с ФС делал для себя. Режим, как раньше тоже работает, можно потом проконтролировать, что туда записалось. Теперь можно изменить и вручную.
Никаких специальных защит от случайного изменения не добавлял. Но слет настроек может быть, только если произвести случайно их переустановку. Или если разрушатся данные в EEPROM, например от неправильных фьюзов.
Но прошивка Байчи при включении контролирует целостность данных в EEPROM.
Можно, (1500+/- 512) т.е. 988-2012 - это длительность PPM. у Байчи 880-2120.

Shuricus

А вы могли выложить код который выводит регистры, или весь исходничек?
И насколько реально попросить вас сделать запрет на переустановку?

С чем связано ограничение на 988? Почему нельзя сделать 950?

emax

Что значит запрет на переустановку? Т.е. блокировать установку значений фс обычным способом?

Байчи так решил. Функция чтения значений фс ограничивает их:
void load_failsafe_values()
{
for(byte i=0; i<RC_CHANNEL_COUNT; i++) {
Servo_Buffer[i] = (EEPROM.read(FS_EEPROM_ADR+(2*i)) * 256) + EEPROM.read(FS_EEPROM_ADR+(2*i)+1);
if(Servo_Buffer[i] < 1760 || Servo_Buffer[i] > 4240) Servo_Buffer[i]=3000; // защита от некорретных данных
}
}

Shuricus
emax:

Т.е. блокировать установку значений фс обычным способом?

Да, именно!

Drakon2063

youtu.be/LwX79okfxfo

сделал передатчик на эрфемке и нано прошил кха. вродь работает .приемник еще надо сделать.можете глядя на это видео хоть какойто вывод сделать у меня работает тх ?

leesicin

Нажмите вкладку Spectrum Analyzer, если график начнёт рисовать значит работает.

Shuricus

Зачем с прошивками Кха писать в эту тему??? Это тема прошивки Байчи.