usb-адаптер передатчика - альтернативная open-source прошивка

graham

Полетал в симуляторе, вроде все нормально. Выкачал IAR 4.20 полистал код, не нашел определения поледовательности каналов, видимо они выдаются в компьютер в такой же последовательности, в которой приходят. У меня получаются некоторые каналы перепутаные на компьютере 😦. Т.к. в С и СРР я не силен, свободного времени еще меньше чем знаний, подскажите как поменять каналы.

osnwt
graham:

каналы на джойстике все попутаны получились

Да, это особенность прошивки. Я не старался тут сохранять совместимость с оригиналом, поскольку не увидел в этом большого смысла.

Как только начнете работу регульятора для бесколлекторника на PWM3, сообщите, плиз, в личку.

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

подскажите как поменять каналы.

Варианта 3:

  1. (рекомендуемый): в любом известном мне симуляторе назначение каналов может программироваться внутри самого симулятора. В том числе, это относится к FMS, Aerofly Pro Deluxe, RealFlight G3 и Reflex XTR. Там же есть калибровка расходов каналов. Потому я не увидел смысла менять что-то в прошивке и не знаю точно, зачем это сделано в оригинале (вероятно, для общности или совместимости по умолчанию с неким конкретным симулятором).

  2. (частичное решение не для всех симуляторов): назначение каналов задается в USB дескрипторе строками:

PROGMEM char usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] =
{
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x09, 0x04, // USAGE (Joystick)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Pointer)
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0, // END_COLLECTION
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x32, // USAGE (Z)
0x09, 0x33, // USAGE (Rx)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0, // END_COLLECTION
0x09, 0x34, // USAGE (Ry)
0x09, 0x35, // USAGE (Rz)
0x09, 0x36, // USAGE (Slider)
0x09, 0x37, // USAGE (Dial)
0x95, 0x04, // REPORT_COUNT (4)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0 // END_COLLECTION
};

В таком порядке видятся с 1-го по 8-й каналы компьютеру. Назначение их применительно к джойстику очевидно из названий (оси X,Y,Z, вращение по осям Rx, Ry, Rz, ползунок, колесико). Для симулятора эти назначения могут приниматься или не приниматься в расчет (зависит от решения автора симулятора). Можно без особых проблем переставить местами эти обозначения, сохранив их места. Но это будет иметь значение только для джойстика и симуляторов, где стандартные назначения берутся в расчет (думаю, что нигде 😃).

  1. (реальная перестановка, но решение надо писать самому): нужно вводить таблицу перекодировки или просто переписать формирование последовательности каналов в функции usbBuildReport(). В каком порядке будут положены значения из channelData[] в usbReport[] - в таком и будут видны каналы в симуляторе.

Однако, это не написано в моей прошивке, поскольку любой из названных симуляторов позволяет произвольно назначить назначения каналов. Так как едва ли кто-то будет постоянно использовать две прошивки (я бы использовал ту, что больше подходит или нравится), то я не увидел такой проблемы и, соответственно, не поддержал такой возможности.

А с каким симулятором реально проблема?

dmitryu
osnwt:

А с каким симулятором реально проблема?

С любым не RC. ИЛ-2, например.

osnwt
dmitryu:

С любым не RC. ИЛ-2, например.

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

Предположим, что канал руля высоты поступает с пульта по счету 3. Его симулятор хочет увидеть как ось Y стандартного джойстика. Тогда нужно поставить в дескрипторе 0x09, 0x31, // USAGE (Y) на 3-е место, считая сверху (в данном случае - вместо 0x09, 0x32, // USAGE (Z)), а последнее - соответственно, на второе. И эти два канала поменяются местами.

Иначе говоря, следует понять, в какой последовательности идут каналы с передатчика (например, 1 - газ, соответствующий в симуляторе оси Z, 2 - элероны, соответствующие в симуляторе оси X, 3 - руль высоты, соответствующий в симуляторе оси Y, и так далее). И поменять последовательность в дескрипторе в этом порядке, то есть

0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0, // END_COLLECTION
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x32, // USAGE (Z)

поменять на

0x09, 0x32, // USAGE (Z) - 1 канал передатчика
0x09, 0x30, // USAGE (X) - 2 канал передатчика
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0xc0, // END_COLLECTION
0xa1, 0x00, // COLLECTION (Physical)
0x09, 0x31, // USAGE (Y) - 3 канал передатчика

Способ не вполне очевидный, но я не рассчитывал на подобные применения. Однако, любые изменения с точки зрения HID джойстика можно сделать, правильно сформировав этот дескриптор. В принципе, можно сформировать некий набор настроек прошивки, чтобы делать это более удобно. Пусть будет ToDo для очередной версии прошивки, если таковая когда-либо появится. Если нет, то можно переписать ее под себя, сделав указанные выше изменения.

graham
osnwt:

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

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

osnwt:

Варианта 3:

Первым я на данный момент и воспользовался. Если приспичит, попробую 3-ий.

osnwt:

А с каким симулятором реально проблема?

Пока проверил в FMS, к риалфлайту компакт не мог найти после переезда, вещи разгребу все, - найдется.

osnwt
graham:

Первым я на данный момент и воспользовался. Если приспичит, попробую 3-ий.

Если первого достаточно, то зачем тогда остальные? 😃

FMS->Control->Analog control->Joystic interface->Mapping/Calibration - и там все есть.

Пока проверил в FMS, к риалфлайту компакт не мог найти после переезда, вещи разгребу все, - найдется.

Там тоже все есть.

Жаль. А на сколько закрытый? Полностью или можно как-нить стать тестером?

Пока полностью. А дальше время покажет. Сроков никаких нет, поскольку проект, как некоммерческий, идет по остаточному принципу, а времени на все не хватает.

Николай-К

Как и обещал попробовал все прошивки и вот мои результаты:
Пробовал на Win XP Pro SP2, RC - Graupner 314

  1. 2006.07.13 - работает но почти все каналы дергаются
  2. 2006.07.20 - не работает (и в игровых устройствах ее нет)
  3. 2006.08.09 - работает очень хорошо
  4. 2006.08.11 - работает очень хорошо (разницы с предыдущей не увидел)
    И еще попутно вопрос, а что биты конфигурации все должны быть в Off,
    там только SUT0 - сам ставится в On, а то ведь в прошивках которые были выложены
    здесь раньше было - CKOPT-On и SPIEN-On?
    Кабель у меня собран на Atmega8-16PI который питается от 3.3 вольт.
    Для полного результата нужно еще проверить на разных версиях винды и разных
    передатчиках, эта возможность у меня есть но нужно некоторое время.
osnwt
Николай-К:
  1. 2006.07.13 - работает но почти все каналы дергаются

By design. Это уже обсуждали. Хотя у некоторых работает без дрыгов, но это просто удачный USB хост. Причина выявлена. Считать прошивку устаревшей.

  1. 2006.07.20 - не работает (и в игровых устройствах ее нет)

То, что нет в устройствах - странно. Должно просто не работать (у большинства) чтение PPM сигнала. Считать прошивку нерабочей.

  1. 2006.08.09 - работает очень хорошо

Рабочая прошивка с тем же набором опций, что и предыдущая (которая не работает). Считать прошивку баг-фиксом предыдущей.

  1. 2006.08.11 - работает очень хорошо (разницы с предыдущей не увидел)

Разницы и нет в смысле подергивания. Разница только в дополнительном дублировании одного канала на выход контроллера и альтернативный вариант джойстика с дублирующими кнопками (и в этом варианте частота передачи данных на компьютер в 2 раза ниже, чем без кнопок - теоретически 50 и 100 раз в секунду, соответственно. Практически не проверялось).

И еще попутно вопрос, а что биты конфигурации все должны быть в Off,
там только SUT0 - сам ставится в On, а то ведь в прошивках которые были выложены
здесь раньше было - CKOPT-On и SPIEN-On?

Судя по часто появляющемуся тут вопросу о битах конфигурации: я вообще не указывал того, какие биты должны быть прошиты. Должны быть прошиты точно те же самые биты, что и для оригинальной прошивки, поскольку аппаратно устройства идентичны. И отсутствие прошитого бита SPIEN вообще сделает контроллер неперешивающимся по SPI. Поскольку прошивка задумывалась, как drop-in replacement для оригинальной (бросил на место оригинальной и забыл), то акцента на установке битов не делалось.

Кабель у меня собран на Atmega8-16PI который питается от 3.3 вольт.

Если оно работает с оригиналом, то будет работать и с альтернативной версией. Спор по поводу питания от 3.3 вольт кристаллов, работающих на 12 MHz, уже был в соответствующей ветке. Как правило, все работает. Я предпочел питать контроллер от 5 вольт, но выбор этот более-менее произвольный.

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

Самое интересное - проверить на 98 и ME. 98-я, по имеющейся информации, иначе работает с HID джойстиками. Она требует положительных значений передаваемых данных (это условие у меня соблюдается изначально) и не использует USB interrupt для опроса устройства (у меня реализовано оба варианта: как система запросит - так мы ей и ответим).

В любом случае спасибо за информацию всем ответившим. По крайней мере понятно, что хоть у кого-то оно заработало. Хотелось бы еще в том же ряду увидеть сравнение с оригинальной версией, чтобы для себя уяснить, а имело ли смысл все это мероприятие? Я писал для себя, но спустя полгода что-то стукнуло выложить сюда. Может, и зря. Но раз выложил, то хотелось хотя бы понять, имело ли все это смысл…

Николай-К

Попробовал снова прошивки но уже с включенными битами - CKOPT и SPIEN:
2006.08.09 - работать совсем отказалась
2006.08.11 - работает как и прежде отлично
2006.08.11(btn) - тоже работает без проблемм

DrClover
osnwt:

В любом случае спасибо за информацию всем ответившим. По крайней мере понятно, что хоть у кого-то оно заработало. Хотелось бы еще в том же ряду увидеть сравнение с оригинальной версией, чтобы для себя уяснить, а имело ли смысл все это мероприятие? Я писал для себя, но спустя полгода что-то стукнуло выложить сюда. Может, и зря. Но раз выложил, то хотелось хотя бы понять, имело ли все это смысл…

На мой взгляд- Имело !!! и даже не надо сомневаться в этом.
повторюсь - Честь и хвала автору 😃 😃 😃

ЗЫ у меня оригинальная работала нормально тока с SANWA RD6000, c Futaba 9CHP каналы были перетусованы и небыло кнопок (смею предположить что изза инверсии PPM, транзистор на входе стоит)
С Вашей все ОК.ОВ.

graham
DrClover:

ЗЫ у меня оригинальная работала нормально тока с SANWA RD6000, c Futaba 9CHP каналы были перетусованы и небыло кнопок (смею предположить что изза инверсии PPM, транзистор на входе стоит)
С Вашей все ОК.ОВ.

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

DrClover
graham:

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

С футаба 9 она работала - но без кнопок, с санвой нормально с кнопками
Возможно это из за транзистора на входе(РРМ позитив негатив) делал несколько штук себе и друзьям
по полной схеме со стабилизатором 3.3в и транзистором на входе у всех окей, у меня без кнопок 😦
Вэтом проекте как я понял нет разницы в РРМ позитив или негатив
удобно для не сильно рубящих правильно собрал схему- залил прошивку -счастье ! 😃
да и дерганий каналов поменьше.

toxa
DrClover:

ЗЫ у меня оригинальная работала нормально тока с SANWA RD6000, c Futaba 9CHP каналы были перетусованы и небыло кнопок (смею предположить что изза инверсии PPM, транзистор на входе стоит)

У sanwa и futaba разный порядок следования каналов. У futaba 1-элерон 2-руль высоты а у sanwa - 1-руль высоты 2-элероны.

boroda_de

Заинтриговали меня посты тут: скачал, прошил последнюю версию с кнопками (ничего не менял, т.к. компайлера нет а ссылка в доку на демо качает полную версию).
Как уже замечено каналы по сравнению с оригинальной прошивкой расположены по-другому…
Дрожания ручек не заметно, зато имеется небольшое скакание при минимальной длине импульса на двух каналах (из шести)
Передатчик Graupner/JR X412 совсем новый (т.е. резюки в порядке)
Позже протестую с Graupner MX12/JR 2610
Спасибо автору и успехов

osnwt
boroda_de:

компайлера нет а ссылка в доку на демо качает полную версию.

Это не совсем демо - это на самом деле полная eva*luation версия, отличающаяся от retail только отсутствием исходников библиотек. Если ее скачивать через сайт после регистрации (ни к чему не обязывающей), то на указанный email присылают 30-дневную лицензию, позволяющую протестировать пакет без каких-либо ограничений. Если скачать ее по прямой ссылке, то без лицензии запустить продукт не получится, но в определенном смысле эта проблема решаема. Например, путем покупки лицензии. Ну, или поиска в интернете, или т.п.

Buranov_P

Проверил последние прошивки на Win ME и 98. Передатчик - Hitec Focus Heli 5. Работают без проблем FMS и AFPD. Оригинальная прошивка v1.1 не позволяет откалибровать джойстик в этих симуляторах под МЕ и 98.

Теперь замечания/просьба. Дело в том, что без хотя бы одной кнопки откалибровать джойстик в “Игровых устройствах” (в МЕ и 98) не удается. (Или я не знаю как. Кто знает - научите. Только не надо ссылаться на Win XP - там это сделать можно!)) Кнопки, совмещенные с ручками передатчика еще более запутывают ситуацию. Крайне желательно было бы, чтобы хотя бы одна кнопка эмулировалась с клавиатуры или с замыкания ножки микропроцессора на землю.

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

В любом случае большая благодарность автору. Я, например, давно уже собирался сделать адаптер - наконец сделал. (Хотя реальной нужды вроде бы и нет - есть фирменнные RF G2 и Reflex. Пульт RF G2 перекрывает все потребности.) Просто любопытно было поковыряться.

Кстати, если кому интересно. Столкнувшись с проблемой “Неизвестное USB устройство” стал с ней бороться. Были перепробованы все рекомендованные (в соответствующей ветке форума) способы: Питание 5в - 3.6в, конденсаторы на D+ и D-, провод длинный - короткий и тд. Все это давало мизерные результаты. (Хотя и давало. Например, иногда все таки устройство опознавалось). В конце концов подпаял конденсатор 500пф на ножку резонатора (все равно какую) - все заработало как часы! В любых комбинациях - 5в, 3,6в, с конденсаторами на D+ и D-. и без с длинным кабелем и коротким, с любыми прошивками (даже с “неустойчивами” , про заведомо нерабочие я не говорю)… . Померял частоту на резонаторе.Без подпаянного конденсатора 12.06 мгц. С конденсатором на выводе XTAL2 - 12.00, с конденсатором на XTAL1 - 11,93. За точность цифр не ручаюсь - мерялось китайским мультиметром, хотя думаю кварц там заведомо точнее, чем керамический резонатор. Но тенденцию проследить можно… . Кстати, рекомендация включить FUSE bit CKPOT (в оригинальной статье, написано - включить все FUSE… ) как раз и подключает внутренние конденсаторы к резонатору, понижая частоту (в моем случае - недостаточно!). В общем, возникло предположение - а не связаны ли все проблемы у людей с разбросом частот резонатора? У кого чуть ниже - и никаких проблем, а у кого чуть выше… . Впрочем, это каждый может проверить сам. Если не заест лень - попробую поставить внешнюю RC цепочку, и посмотреть, насколько точно нужно подбирать частоту. (В оригинальной статье написано: ± 1%, но в моем случае +1% оказался фатальным!)
В данный момент схема выглядит так: два диода с +5 на питание процессора, конденсатор 0,1 мкф керамический по питанию процессора, никаких резисторов, конденсаторов, стабилитронов на D+ и D- (кстати, резистор с D- должен быть подключен к +5, а не к 3,3в ? по описанию шины, хотя это, наверное, непринципиально. Сигнал с передатчика - через резистор. Итого:
Два конденсатора 0,1мкф (питание проца) и 510 пф (на резонатор)
Два резистора 1,5ком (с D- на +5в) и 10ком (на передатчик)
Два диода КД522 снижают напряжение до 3,6в. (Я все-таки тоже сторонник, чтобы все было по правилам)
ATMEGA8-16PI
Резонатор ZTT 12мГц

Итого 8 элементов. Без проблем работает с удлиннительным USB кабелем 1,6 метра, на раных компах.

9 days later
Yuriy

Решил заменить шнур с Com портом, на шнур USB. Собрал устройство, взял у знакомого программатор, скачал PonyProg, запрограммировал. Подключил к компу - устройство не опознано. Посмотрел осциллографом сигналы на выходе - нет ничего, кроме постоянки на “Data-” и входного сигнала РРМ. На обеих ножках кварца тоже нет ничего. А больше и проверять-то нечего. С микропроцессорами я не знаком, поэтому есть вопросы:

  • встроенный генератор на кварце тоже программируется, или он должен работать автономно?
  • расширение а90 - это тоже НЕХ, я его переименовал с расширением НЕХ, чтобы открыть в программаторе, это допустимо?
  • как-то можно проверить, правильно ли я его запрограммировал и что еще можно посмотреть?
  • может я генерацию щупом срываю, но вроде с делителем 1:10 и емкостью 12 пф.
boroda_de

П1. Чтоб кварц заработал, нужно при прошивке процессора поставить Fuses смотрите тут www.rcdesign.ru/articles/electronics/rcusb

Важно не забыть запрограммировать конфигурационные биты контроллера (fuses). Для данного устройства все биты должны быть установлены в “1” (не запрограммированы). Для этого в PonyProg необходимо снять все флажки в диалоговом окне “Configuration and Security bits”.

П2 Допустимо, я тоже так делал.
Скорее всего у Вас после поправки fuses заработает.

Yuriy

boroda_de спасибо. Я конечно читал, что все биты конфигурации должны быть в 1. Но я почему-то считал, что их достаточно правильно выставить и они зашьются одновременно с основной прошивкой, а оказывается их надо отдельно прошить. Всю голову сломал.

Psw
copperfield:

А кто-нибудь делал джойстик на PIC?

Как раз под рукой случайно оказался 18ф4550 в ДИП корпусе и не нужный USB шнурок - сегодня спаял/запустил пробничек:

в текущий момент одно осевого джоя.
Ну …
Из хороших новостей - на Микрочипе стала бесплатно доступна студенческая 60 дней версия Си для 18 ПИКов. ну и какая-то документация к нему.
Наконец-то я хоть какой-либо проектик на Си для ПИКов самостоятельно скомпилил и он кое-как заработал. Пришлось правда в проект добавить асм файл явного описания конфигурации МК ( не знаю как енто содеять на Си ), ну и подправить конфу для 12 МГц квареца - как у оригинального шнурка.
А дальше - надо править/ваять дескрипторы/прочее, что-бы 16 бит CCP использовать для захвата PPM,
(точность захвата должна быть раз в пять лучше чем выход у Футабы-2048), аппаратный USB должен успевать 8 каналов по 16 бит передавать, ну и усреднять АЦП преобразования - благо макс производительность АЦП около 125 киловыборок/секунду, если 4 канала по 64 раза усреднять - более 400 усреднённых 16 бит преобразований/секунду на каждый канал - более 8 раз быстрее чем надо.
Одним словом - можно/нужно ковырять .
А из интересных ( но как всегда мало доделанных) примерчиков для 18ф4550 на Микрочипе - USB бут лоадер ну и Storage класс.