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

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 класс.

Psw
osnwt:

(ограничение программного USB как low-speed device).
>>>
пример того, как можно делать USB HID дескрипторы
>>>
Еще оптимальнее было бы переписать out_joystick_btn так, чтобы передавать не 8-ми, а 10-ти битные значения каналов.

Ну … Помог бы мне кто с дескриптором/прочим - потому как HID Descriptor Tool не нашёл почему-то,
а самому думать - пока не получается.
Иными словами, хочу попробовать на 18ф4550 заменить текущий дескриптор ОДНО осевого джоя из
примера Урок #2. Создание USB 2.0 совместимого HID-устройства типа джойстик:
// Старый одноосевой Джой дескриптор
// 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
// 0x15, 0x00, // LOGICAL_MINIMUM (0)
// 0x09, 0x04, // USAGE (Joystick)
// 0xa1, 0x01, // COLLECTION (Application)
// 0x05, 0x02, // USAGE_PAGE (Simulation Controls)
// 0x09, 0xbb, // USAGE (Throttle)
// 0x15, 0x00, // LOGICAL_MINIMUM (0)
// 0x26, 0xff, 0x00,// LOGICAL_MAXIMUM (255)
// 0x75, 0x08, // REPORT_SIZE (8)
// 0x95, 0x01, // REPORT_COUNT (1)
// 0x81, 0x02, // INPUT (Data,Var,Abs)
// 0x05, 0x09, // USAGE_PAGE (Button)
// 0x19, 0x01, // USAGE_MINIMUM (Button 1)
// 0x29, 0x08, // USAGE_MAXIMUM (Button 8)
// 0x15, 0x00, // LOGICAL_MINIMUM (0)
// 0x25, 0x01, // LOGICAL_MAXIMUM (1)
// 0x75, 0x01, // REPORT_SIZE (1)
// 0x95, 0x08, // REPORT_COUNT (8)
// 0x55, 0x00, // UNIT_EXPONENT (0)
// 0x65, 0x00, // UNIT (None)
// 0x81, 0x02, // INPUT (Data,Var,Abs)
// 0xc0 // END_COLLECTION
на дескриптор, описывающий 8 - 10 штук 16 бит осей и 8 кнопок.
Ограничения длинны - макс 64 байта передачи за раз - вполне хватает для передачи всего одним пакетом.

Psw
Psw:

Ну … Помог бы мне кто с дескриптором/прочим
а самому думать - пока не получается.

Нашёл HID Descriptor Tool, не особо помогает, вот что вставил:
// Пытаюсь модифицировать дескриптор для 16 бит 9 каналов джойстика и 8 кнопок -
// получается 19 байт надо передавать.
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x27, 0xff, 0xff, 0x00, 0x00, // LOGICAL_MAXIMUM (65535)
0x75, 0x10, // REPORT_SIZE (16)
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)
0x09, 0x38, // USAGE (Wheel)
0x95, 0x05, // REPORT_COUNT (5)
0x81, 0x82, // INPUT (Data,Var,Abs,Vol)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x95, 0x08, // REPORT_COUNT (8)
0x75, 0x01, // REPORT_SIZE (1)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x08, // USAGE_MAXIMUM (Button 8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
В итоге - каналы джоя появились на свет, но - молча стоят по центру.
Хотя я буфер передачи удлиннил до 20 байт и один байт АЦП рассовал по старшим байтам всех каналов - толку пока ноль, ни кнопки ни каналы не шевелятся.

Psw
Psw:

В итоге - каналы джоя появились на свет, но - молча стоят по центру.

Оказалось, что такая ерунда при различной не стыковке в дескрипторах.
В итоге Сделал себе напоминалку - код не связан/не вылизан:
// При смене формата джоя как минимум менять:
// 1. Длинна дескриптора HID_RPT01_SIZE в USBCFG.H
// 2. Количество Передаваемыхбайтов HID_INT_IN_EP_SIZE в USBCFG.H
// 3. Макс размер передаваемого буфера EP0_BUFF_SIZE = 8 в USBCFG.H
// 4. Структура передаваемого буфера в User_Joy.c
// 5. Количество байт в Вызов передачи данных HIDTxReport(buffer,2) в User_Joy.c ;
В текущий момент сделано 9 каналов по 16 бит и 8 кнопок - но девятого канала ни AFPD ни утилита калибровки джоев не видит, уберу его.
Сегодня затолкал/термо вклеил 18ф4550 и разъем USB в пультик от DF5#4 соосничка - в параллель к родному кодеру, перед кренкой диодик на всяк случай поставил, что-бы от USB питание на вых каскад не шло. Быть может поторопился, но вроде Микрочип USB бут лоадер тоже работает кое-как - обновлять по USB шнурку прошивки джоя вроде получается, потому и вклеил - без ICSP коннектора.
Теперь можно играцца дальше.

Pa5ha

А у меня не работает что-то. Девайс шьется, фузы зашил, прошивку залил, устройство неопознано. Светодиодная мигалка заработала. Ошибок в подключении вроде нету -)

Может, провод мгтф на юсб не подходит? 4 провода, где то 10 см. 😃

AVK

Последнюю прошивку залил вполне нормально работает, только когда ручками шевелишь почемуто кнопки мигают (когда в виндах смотришь), кстати попутно выяснил что мега 8-8 нормально работает на 12 мГц, видать просто маркировка разная а чип один.

osnwt
AVK:

Последнюю прошивку залил вполне нормально работает, только когда ручками шевелишь почемуто кнопки мигают (когда в виндах смотришь)

Так и быть должно, поскольку кнопки просто дублируют состояния каналов. Если канал меньше 50%, то кнопка выключена (погашена). Если больше 50%, то включена (светится).

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

По поводу независимых от каналов кнопок (был такой вопрос): сделать их управление от клавиатуры проблематично, так как это повлечет за собой свой драйвер на Windows. А вот сделать их зависимыми от кнопок, подключенных к Mega8 - это очень просто. Достаточно один раз при инициализации прошивки включить pull-up резисторы на соответствующих пинах (куда подключить кнопки), а потом читать состояние этих битов, укладывать их в байт и вставлять его при формировании HID Report вместо сравнения каналов с 50%. Это легко сделать самому - на то и открытые исходники.

AVK

Я так понял, что полярность сигнала по барабану? у меня на входе транзистора нет просто рез на 10к стоит.

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

gosha-z
AVK:

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

Не понял. PIC18F2550 стоит в розницу $5,74, итого себестоимость комплектухи со всей обвязкой - $10-15. В каком месте ужасаться?

osnwt
AVK:

Я так понял, что полярность сигнала по барабану? у меня на входе транзистора нет просто рез на 10к стоит.

Да.

gosha-z:

Не понял. PIC18F2550 стоит в розницу $5,74, итого себестоимость комплектухи со всей обвязкой - $10-15. В каком месте ужасаться?

ATMEGA8-16AU 1.376 $ (MT-System, СПб, розница от 1 шт.).

Ужасаться, может, и не стоит. Но разница - цена аппаратного USB, который, конечно, вещь приятная, но насколько оно потребно в данном применении - вопрос субъективный.

Yuriy

А подскажите в чем проблема - не убрать газ полностью, 3-й канал. WinXP. Раньше со шнурком на COM порт таких проблем не было, а теперь никак не остановиться. А в остальном все нормально. При калибровке все нормально показывает - столбик от нуля до полного заполнения.

osnwt
Yuriy:

А подскажите в чем проблема - не убрать газ полностью, 3-й канал. WinXP. Раньше со шнурком на COM порт таких проблем не было, а теперь никак не остановиться. А в остальном все нормально. При калибровке все нормально показывает - столбик от нуля до полного заполнения.

Если столбик от нуля до 100%, то, возможно, есть смысл проверить калибровку в самом симуляторе. У меня была подобная проблема (которая отложила публикацию на довольно большой срок): не работала пара каналов в AFPD. В джойстике все нормально, а в симе по нулям. Но я им не пользовался и поставил только для проверки работы устройства. Сваливал на дескрипторы и т.п. Но так как было не слишком нужно - не возился. И только потом дошло, что в нем есть своя калибровка. И тогда неработающие каналы нашлись и заработали. Возможно, это поможет.

AVK

По поводу пиков, действительно чему ужасаться, всего лишь в ~четыре раза большая цена, фигня какая (особенно в массовом производстве)
Да, и где он за пять баксов? я на вскидку поискал дешевле 8-ми (оптом) не нашел, ссылку дайте плиз, может там и меги по 50центов есть

Yuriy

Если столбик от нуля до 100%, то, возможно, есть смысл проверить калибровку в самом симуляторе. У меня была подобная проблема (которая отложила публикацию на довольно большой срок): не работала пара каналов в AFPD. В джойстике все нормально, а в симе по нулям. Но я им не пользовался и поставил только для проверки работы устройства. Сваливал на дескрипторы и т.п. Но так как было не слишком нужно - не возился. И только потом дошло, что в нем есть своя калибровка. И тогда неработающие каналы нашлись и заработали. Возможно, это поможет.

Cтолбик от нуля до 100% именно в FMS, честно говоря, я в джойстик и не заглядывал. А если в FMS снимаю реверс - то минимальный газ - это ручка от себя и в этом случае газ сбрасывается полностью.
Попробовал зайти в джойстик из панели управления - там не отображается столбик руля высоты, хотя крестик перемещается, после калибровки джойстика, в FMS заново откалибровал, но все осталось также.

Pa5ha

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

Вощем, разобрался я со своими багами. Керамический резонатор частоту держал плохо. Мега заводилась, но работала не ровно на 12.000. После впайки нормального кварца шнур наконец таки определился.

osnwt
Pa5ha:

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

К сожалению, если “описалово читать долго”, то помочь мало чем могу.
Ибо, в описалове было написано, что скомпилированная прошивка (а то и несколько в разных вариантах) находится в каждом архиве с исходниками, в подкаталоге Release/EXE. Файл *.a90 - это обычный hex. Его можно переименовать, а можно шить и прямо так. Отдельного файла только с hex не публиковалось с момента выкладывания первого исходника, так как размер и так смешной, а первой целью было выкладывание именно исходников для экспериментов и модификаций заинтересованными людьми, и только потом - собственно, прошивки. А если исходники не нужны, то есть оригинальная прошивка, которая вполне работоспособна.

Pa5ha

Прошу прощения, смутило расширение просто.

Относительно идей.
если с одним контроллером задача точного измерения временного промежутка нерешаема, то может поставить второй, какой-нить попроще, типа 2313, им принимать ппм и результат выбрасывать на какой-нить порт? А мегой просто в idle принимать информацию о каналах и обновлять. Если бы не учёба, то попробовал бы переписать MJoy и соорудить сей девайс. Ну получилось бы чуть побольше, чем на пике…

gosha-z
AVK:

По поводу пиков, действительно чему ужасаться, всего лишь в ~четыре раза большая цена, фигня какая (особенно в массовом производстве)
Да, и где он за пять баксов? я на вскидку поискал дешевле 8-ми (оптом) не нашел, ссылку дайте плиз, может там и меги по 50центов есть

Вот! Ближайшие ко мне. Там же - макетка для SOIC’овского 2550 с кварцем, ICSP портом и просто выводами. Атмелом не торгуют.

18 days later
Николай-К

Вчера юзал вашу прошивку с Graupner MC-20, сразу могу сказать, что все восемь каналов работают, с оригинальной прошивкой с данного сайта не работал 7й канал, цитирую ответ разработчиков на мой вопрос по этому поводу:
“Канал уходит в систему.
Просто WinXP не показывает в панели управления ось “Вращение Z”,
а именно на нее по умолчанию назначен 7й канал.”
С альтернативной прошивкой все отлично - пробовал на симуляторе AFPD навесил управление на все восемь каналов.

4 months later
Psw

Зима, холодно, поворошил старый проектик слегка.

Psw:

усреднять АЦП преобразования - благо макс производительность АЦП около 125 киловыборок/секунду, если 4 канала по 64 раза усреднять

Слегка напутал с производительностью АЦП у 18ф4550 - не учёл время выборки, с его учётом получилось 65+ КГц.
В целом проект слишком сложен для меня, так и не знаю, как там работает УСБ.
Ну усреднил по 256 разиков 4 канальчика и получил 60+ Гц частоту измерений, 13 бит на выходе оставил.
16 бит каналы всё-таки дрожат слегка в калибровке винды, размах дрожания около 4 из 16 передаваемых битов.
Четыре младших канала от АЦП, два старших от кнопок, два не задействованы ( им ничего не присваивается) хотя в комп они передаются.
Шьётся через УСБ бут лоадер вполне успешно.
Правда, при отладке с перепугу пришлось всё-таки ICSP разъём припаять на всяк случай.
Теперь у меня есть наконец-то отдельный пультик от DF 5#4 для симулятора - а сам DF 5#4 пока без шестерён лежит, отдыхает.
Вот бы ещё точный вход/выход ППМ прицепить к ентому проектику - хорошая была бы заготовка для добавления каналов к имеющемуся ППМ сигналу или гибкого смешивания тренер/ученик и прочих мелких надобностей.

AVK:

всего лишь в ~четыре раза большая цена, фигня какая (особенно в массовом производстве)

А кто здесь собирается массовое производство организовывать ?
Кроме того, за доп. деньги даётся доп. оборудование.
Ну и прочие мелочи.