Альтернативная прошивка к FlySky/Turnigy/I-Max/Eurle (Кодер Fokus-a - MSV)

Aleksey_Gorelikov

Решил собрать в одну кучу материалы с разных веток форума. Надеюсь, администраторы не против.

Немного о прошивке Флайскаев и их ребрендов:

Собственно, проц не “закрыт”, обычная атмега 64. Для тех, кто знаком с атмегами никаких трудностей возникнуть не должно.
Это сообщение скорее для тех, кто не знаком, но хочет познакомиться.

  1. Программатор. Их море. От примитивных из одного разъема и 5 проводов до… тоже примитивных на одной\двух микросхемах. Для “попробовать” - 5 проводов достаточно. Понравится - определитесь сами чего вам хочется. Собственно, по этому пункту - просите у гугла “программатор AVR” и выбирайте на вкус и цвет.

  2. Подключаем программатор к аппаратуре.
    Хотя, на схеме аппаратуры разъем указан, в действительности его нет. Придется подпаиваться прямо к контактам на плате. Благо это не сложно и проводов у нас всего 5.

Поехали:

Присопливливаемся.

  1. GND ( у меня - черный, на фотке плохо видно.)
  2. MISO (PDO) ( фиолетовый)
  3. MOSI (PDI) ( синий )
  4. CLK (Желтый)
  5. Reset (Белый)

Еще у меня видно красный - это +5, питание проца. (я аккумуляторы не вставлял, а взял питание от усб)

Готово. Можно подключить программатор к компу и включить передатчик

3а). Прога программатора.
Я пользуюсь avrprog из комплекта avr studio.

Запускаем, тычем кнопку advanced, нажимаем read. У нас считались лок-биты, фьюзы. Запоминаем как было. Может пригодится.
Ничего не меняем!!!
Жмем Close.

В основном окне - все понятно. Имя файла, и кнопки “read eprom”,“write eprom”,“read flash”,“write flash”.
read - считать, write - записать. Рекомендую считать и сохранить в файле ваш “родной” флешь и епром.
Зачем это надо? Если соберетесь эксперементировать с прошивками, то вполне возможно вам захочется потом вернуть все назад “как было”.
Вполне возможна ситуаций, когда при записи епрома микроконтроллером-сядет аккумулятор и содержимое епрома испортится. Имея копию вы сможете его восстановить сами. В противном случае - передатчик будет противно пищать, писать “eprom error” и ждать, когда вы его отправите в сервис.
(аналогично “BackUP error” в спектрумах DX7.

Последовательность действий: придумали имя файла, нажали реад епром. Дождались окончания процесса. Изменили имя файла, нажали реад флешь. Теперь у вас есть полная копия содержимого памяти микроконтроллера. Даже если вы вдруг сожгете проц - все что вам нужно для восстановления у вас есть. Надо будет лишь впаять новый микроконтроллер и нажать заветные кнопочки “врайт флешь”, “врайт епром”.

4а) Многие пользуются встроенным программатором из CodeVision. Приложу скриншоты из него. Смысл тот же самый, различия лишь в оформлении фьюзов.

Считываем фьюзы
Нажимаем “Yes”. Посмотрели? Запомнили? Снимаем галочку “program fuse” чтобы ничего не испортить.

Теперь немного о прошивках. Прошивки отличаются. Я заливал прошивки, выложенные ранее на форуме. Они работают только со своим епромом. Раз структура епрома менялась, значит китайцы что-то доробатывали. Возможно у многих появится желание попробовать прошивки поновее. Пробуйте, но на свой страх и риск. Дело в том, что обычно в епроме хранятся константы калибровки стиков. Если другая прошивка не заработает с вашим епромом - залейте ее родной епром. Но при этом обязательно проверьте калибровку стиков и работоспособность самой аппы при крайних положениях стиков и включенных микшерах. Возможно придется подгонять нейтрали стиков механически. Как откалибровать стики програмно или сбросить епром в “настройки по умолчанию” - я не знаю.

Помните, вы эксперементируете на свой страх и риск!

Чуток поковырялся с прошивкой MSV. Она показала личико.

[/QUOTE]

Немного поправил внешний вид. Совсем чуточку.

Во вложении то, что получилось.
А получилось: программа “передатчик Fokus-а в ревизии MSV 1.9” с урезанным функционалом.
Отсутвует измеритель тока в антене, термометр, тахометр, трехпозиционный переключатель SW-2. Работает одна “крутилка” из имеющихся во флайскае трех. Увы, в варианте MSV в eeprom процессора влезло только 3 модели. Возможно я увеличу это кол-во до 7-8. Если не хотите ждать - поменяйте процессор на ATmega128 и перекомпилируйте проект. Будет 7 моделей.

Список “литературы”:
rcopen.com/forum/f8/topic28745
rcopen.com/forum/f8/topic152759
rcopen.com/forum/f4/topic139588

Хочу выразить благодарности всем участникам данных конференций. Отдельные благодарности Fokus-у, MSV, Vad64.

Как уже писал ранее - я не буду развивать и поддерживать этот проект. Рассматривайте его как отправную точку.
Я не несу ни какой ответвенности за последствия использования данного програмного обеспечения и “кривых ручек”.

Желаю всем удачи.

З.Ы. Я ничего не тестировал. Наткнетесь на баги - пишите, возможно поправлю…

Stepan_M

Александр! Огромное спасибо за вашу работу! Собираюсь прошить свою Турнигу 9.

Подскажите программатор с данного ресурса avr.nikolaew.org/progr.htm, COM портовый подойдет?

И еще, можно ли закрепить DB 9 колодку на корпусе передатчике постоянно для смены прошивок, на работе микроконтроллера это не скажется?

Заранее спасибо.

ВитГо

Пойдет !

Только компорт должен быть настоящий на компе, а не эмулируемый (обычно на нотиках)

на счет колодки - не скажется…
осталось только для нее найти место и красиво закрепить…

Aleksey_Gorelikov

Ну что, так никто и не попробовал? 😃 Один “баг” нашел. Точнее наткнулся на него. Исправлять еще не лез. (никому ж не нужно…)

ВитГо

нужно Алексей!

просто некогда было…
сегодня полетаю (в 19-00) на старой прошивке а потом попробую ту что ты выложил…

leprud

Нужно, обязательно нужно!
Мне вот железяка, стараниями нашей почты все никак не придет, чтоб нормально все опробовать, а не в протеусе…

Aleksey_Gorelikov

баг не особо критичный. Не запоминаются настройки алармов батарейки. Но может есть еще…

Stepan_M

Александр, очень нужна прошивка. Приступил к изготовлению программатора и сегодня наверное запаяю разъем на передатчик, будет он у меня как спутниковый тюнер - всегда готов к прошивке. К концу недели буду тестировать.
Та версия прошивки что на моей турниги - глючная, летать мешает. Глюк такой - при переключении миксера eleflap сбивается триммер руля высоты. Тестером еще не лазил может там банально напряжение прыгает на потенциометрах, но вашу прошивку залью обязательно.

lookeech

это не прошивка, это глюки в контактах/резисторах.

Stepan_M

Установил разъем 9 ти штырьковый от ком порта.

Место нашлось рядом с тренерским разъемом. Встал как родной.

Вот кому понравиться дарю ноу хау. Прижимаем разъём с обратной стороны и начинаем греть железяку паяльником одновременно надавливая. Железка разъема проходит насквозь до ушек - отверстие получается идеальное. Мощный паяльник ненужен достаточно 40 ватт.

2 lookeech бага проявляет себя только если в меню активирован данный микс. Если он не активен реакции на действия тумблера нет.

Stepan_M

Спаял программатор на ком порт, не работает. Нет ответа микроконтроллера. Кто какими программаторами пользуется для прошивки LPT / COM ?
Какие установки компорта ставить по умолчанию 9600.
Памагите!😁

Stepan_M

Насколько он чувствителен к длине провода?
У меня внутри передатчика 15 см шлейф от разьема.

ВитГо

Посмотрел исходники альтернативной прошивки с code.google.com/p/th9x

Многие вещи стали и понятнее 😃

Если Алексей не против - может кидать сюда найденные и придуманные наработки ?

Например вот конфигурация портов для меги в аппе:
взято отсюда -> code.google.com/p/th9x/source/browse/…/th9x.h


Под номером бита порта указано направление работы:
 O - Оut (выход)
 i - In (вход)
 - - не подключено
//PORTA  7      6       5       4       3       2       1       0
 //       O      O       O       O       O       O       O       O
 //       ------------------------ LCD_DAT -----------------------
 //
 //PORTB  7      6       5       4       3       2       1       0
 //       O      i       i       i       i       i       i       O
 //       light  KEY_LFT KEY_RGT KEY_UP  KEY_DWN KEY_EXT KEY_MEN  PPM
 //
 //PORTC  7      6       5       4       3       2       1       0
 //       -      -       O       O       O       O       O       -
 //       NC     NC    LCD_E   LCD_RNW  LCD_A0  LCD_RES LCD_CS1  NC
 //
 //PORTD  7      6       5       4       3       2       1       0
 //       i      i       i       i       i       i       i       i
 //     TRM_D_DWN _UP  TRM_C_DWN _UP   TRM_B_DWN _UP   TRM_A_DWN _UP
 //
 //PORTE  7      6       5       4       3       2       1       0
 //       i      i       i       i       O       i       i       i
 //     PPM_IN  ID2    Trainer  Gear   Buzzer   ElevDR  AileDR  THRCT
 //
 //PORTF  7      6       5       4       3       2       1       0
 //       ai     ai      ai      ai      ai      ai      ai      ai
 // ANA_ BAT   PITT_TRM HOV_THR HOV_PIT  STCK_LH STCK_RV STCK_LV STCK_RH
 //                                      rud    thro   elev   aile
 //PORTG  7      6       5       4       3       2       1       0
 //       -      -       -       O       i               i       i
 //                            SIM_CTL  ID1      NC      RF_POW RuddDR
Aleksey_Gorelikov
ВитГо:

Если Алексей не против - может …

Я всегда только “ЗА”. Конечно, не против.

Например вот конфигурация портов для меги в аппе:

Я вроде бы сконфигурировал. 😃

З.Ы. Передатчик отдал хозяину. Так что теперь буду учавствовать лишь советами. На крайний случай - в протеусе посимулировать попробую.

ВитГо

Алексей, разбираюсь тут в lcd.cpp - и вижу один вызов который никак не могу найти 😦


  for(char i=5; i!=0; i--){
     uint8_t b = pgm_read_byte(q++); // вызов !
     if(p<pmax) *p++ = inv ? ~b : b;
   }

Умом понимаю что это просто чтение байта из памяти (причем судя по написанному в simpgmspace.h - чтение из программной памяти) - а вот как найти эту подпрограмму ?

p.s. я почти все что касается вывода на экран собрал в lcd.cpp чтобы можно было использовать в своих целях… а вот с этим вызовом чтото никак 😦
файла simpgspace.cpp на сайте нет 😦 спрятан или его может и не быть и достаточно только .h файла ?

p.s. не пиннайте сильно… просто для AVR не программировал поэтому хочу найти уже готовые подпрограммы которые потом можно будет логикой связывать

в simpgspace.h написано только


#define PROGMEM
 #define pgm_read_byte(address_short) (*(uint8_t*)(address_short))
leprud

По синтаксису С, pgm_read_byte используется как наглядный макрос, т.е. в выше приведенном примере pgm_read_byte(q++) и (*(uint8_t*)(q++)) есть абсолютно одинаковые и взаимозаменяемые вещи.
Точно так же, через #define задаются псевдонимы констант, портов и пр.

ВитГо

ааа, понял !! то есть этого #define достаточно и его просто нужно включить в текст lcd.cpp ?

а нужно влключать только
#define pgm_read_byte(address_short) (*(uint8_t*)(address_short))
или все таки две строчки:
#define PROGMEM
#define pgm_read_byte(address_short) (*(uint8_t*)(address_short))

эхх… жду не дождусь окончания рабочего дня… чтобы дома загнать то что получилось в компилятор и проверить…

leprud

Достаточно одной строки.
#define PROGMEM видимо нужен для флагов компиляции и где-нибудь дальше по тексту есть {ifdef PROGMEM}

(Все это лишь по моему мнению, я исходники их пока не читал)