Baychi OpenLRS - дружелюбная ЛРС с широкими возможностями )
Я так понимаю все действия по настройке совпадают с другим “железом” ?
да. как я понимаю, в этих прошивках просто переназначены другие выводы атмеги в соответствии с подключением приемника
Выложите тут исправленные фрагменты кода, а я добавлю в дневничек. Так будет гораздо круче.
Что за недочет, и что за глюк? Интересно поподробнее.
Вот это я называю глюком:
// 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;
Тут решение спорное, но работает нормально и на оранже и на оригинальном приемнике.
Уже хрен знает сколько использую Сбас на Байчи и никогда никаких глюков не видел…
А это просто повезло, как я писал в самом начале, если пауза между пакетами попадет в определенный диапазон, то глюки будут.
… Именно по этому алгоритму происходит аппаратный разбор последовательного протокола в атмеге и именно по этому оранжевый приемник работает с OpenLrsNG и не работает с этой прошивкой.
резонный вопрос, в Тини от Эксперта тоже стоит Атмега, почему она работает без проблем?
Я тоже все зарюсь на Байчи, но к сожалению мозгов не хватает залить прошивки.
Всё шьётся через Openlrs Configurator! Уже всё давно описано за нас github.com/axulige/OpenBaychiTX/wiki/3.-Прошивка
не забываем про фьюзы, через бутлоадер их изменить нельзя, нужен ISP программатор.
резонный вопрос, в Тини от Эксперта тоже стоит Атмега, почему она работает без проблем?
Так ответ был в предыдущем сообщении, у Эксперта все разбирается аппаратно Т.к. Сбас там подключается на последовательный порт. И соответственно там все работает.
не забываем про фьюзы
Я чуть выше спрашивал. Оптибут подходит? Дело в том, что у меня был глюк с родным ардуиновским загрузчиком на 100мВт передатчике в режиме приемника. После ряда ФС на 10км приёмник не восстановил связь с ретранслятором. Вернулся домой и сел по отсечке регуля. Вернуть связь помогло передергивание питания на приемник. Прошил оптибут в приёмник и больше такой глюк не повторялся.
Оптибут подходит.
Прошил модуль как приемник(Оранж - ещё раз спасибо Эдуарду), через путти подключился. попробовал менять регистры, вроде всё получается.
Теперь вопросы. 😃
Приемник у меня должен выдавать ппм для автопилота.
В регистр 7=1
Что писать в регистр 5? У меня в ретрансляторе стоит 10 канальный приёмник на 2,4ГГц с ппм выходом.
11-18 регистры отвечают за каналы. Так как нет рации на этот диапазон буду биндить с передатчиком с прописанными каналами и в эти регистры пропишутся каналы из передатчика. И частоты совпадут. И мне частоту не надо будет подстраивать. Всё правильно понял?
Теперь регистры по файлсейву, с 31 по 38. В опенлрснг я жестко(галочками) прописал в третий канал 950. Как здесь это осуществить? У меня АПМ настроен на ФС по 3-каналу.
В опенлрснг я жестко(галочками) прописал в третий канал 950. Как здесь это осуществить?
Это я как раз попросил доделать AndreyI, если он захочет. Только добавлением строк в прошивку.
Пока ФС только кнопкой.
А где вы вообще нашли 31-38 регистры?
Это, видимо, emax добавил. Очень круто! А тогда вопрос к Эдику - можно отключить функцию изменения ФС дистанционно? Хочу, что бы сбросить ФС было невозможно. И выложить код с регистрами ФС сюда. Спасибо.
По остальным вопросам вроде все правильно, по пятому регистру - я летаю с 0, если у меня ППМ на входе.
судя по F14 это чей то самопал…
на Гитхабе у Байчи только F13
Хорошая фишка! В АПМ долботня ФС на аппе настраивать. И слетать никогда не будет. Так надежнее.
Емах несколькими постами выше выкладывал. Но это для оранж 100мвт в режиме приемника. А можно указать ниже 1000мкс?
Регистры с ФС делал для себя. Режим, как раньше тоже работает, можно потом проконтролировать, что туда записалось. Теперь можно изменить и вручную.
Никаких специальных защит от случайного изменения не добавлял. Но слет настроек может быть, только если произвести случайно их переустановку. Или если разрушатся данные в EEPROM, например от неправильных фьюзов.
Но прошивка Байчи при включении контролирует целостность данных в EEPROM.
Можно, (1500+/- 512) т.е. 988-2012 - это длительность PPM. у Байчи 880-2120.
А вы могли выложить код который выводит регистры, или весь исходничек?
И насколько реально попросить вас сделать запрет на переустановку?
С чем связано ограничение на 988? Почему нельзя сделать 950?
Что значит запрет на переустановку? Т.е. блокировать установку значений фс обычным способом?
Байчи так решил. Функция чтения значений фс ограничивает их:
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; // защита от некорретных данных
}
}
Т.е. блокировать установку значений фс обычным способом?
Да, именно!
сделал передатчик на эрфемке и нано прошил кха. вродь работает .приемник еще надо сделать.можете глядя на это видео хоть какойто вывод сделать у меня работает тх ?
Нажмите вкладку Spectrum Analyzer, если график начнёт рисовать значит работает.