usb-адаптер передатчика - альтернативная open-source прошивка
компайлера нет а ссылка в доку на демо качает полную версию.
Это не совсем демо - это на самом деле полная eva*luation версия, отличающаяся от retail только отсутствием исходников библиотек. Если ее скачивать через сайт после регистрации (ни к чему не обязывающей), то на указанный email присылают 30-дневную лицензию, позволяющую протестировать пакет без каких-либо ограничений. Если скачать ее по прямой ссылке, то без лицензии запустить продукт не получится, но в определенном смысле эта проблема решаема. Например, путем покупки лицензии. Ну, или поиска в интернете, или т.п.
Проверил последние прошивки на 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 метра, на раных компах.
А кто-нибудь джойстик на PIC?
www.gamma.spb.ru/articles.php?i=29
С аппаратной поддержкой USB 2.0 и CCP должно стабильней работать.
Решил заменить шнур с Com портом, на шнур USB. Собрал устройство, взял у знакомого программатор, скачал PonyProg, запрограммировал. Подключил к компу - устройство не опознано. Посмотрел осциллографом сигналы на выходе - нет ничего, кроме постоянки на “Data-” и входного сигнала РРМ. На обеих ножках кварца тоже нет ничего. А больше и проверять-то нечего. С микропроцессорами я не знаком, поэтому есть вопросы:
- встроенный генератор на кварце тоже программируется, или он должен работать автономно?
- расширение а90 - это тоже НЕХ, я его переименовал с расширением НЕХ, чтобы открыть в программаторе, это допустимо?
- как-то можно проверить, правильно ли я его запрограммировал и что еще можно посмотреть?
- может я генерацию щупом срываю, но вроде с делителем 1:10 и емкостью 12 пф.
П1. Чтоб кварц заработал, нужно при прошивке процессора поставить Fuses смотрите тут www.rcdesign.ru/articles/electronics/rcusb
Важно не забыть запрограммировать конфигурационные биты контроллера (fuses). Для данного устройства все биты должны быть установлены в “1” (не запрограммированы). Для этого в PonyProg необходимо снять все флажки в диалоговом окне “Configuration and Security bits”.
П2 Допустимо, я тоже так делал.
Скорее всего у Вас после поправки fuses заработает.
boroda_de спасибо. Я конечно читал, что все биты конфигурации должны быть в 1. Но я почему-то считал, что их достаточно правильно выставить и они зашьются одновременно с основной прошивкой, а оказывается их надо отдельно прошить. Всю голову сломал.
А кто-нибудь делал джойстик на PIC?
Как раз под рукой случайно оказался 18ф4550 в ДИП корпусе и не нужный USB шнурок - сегодня спаял/запустил пробничек:
в текущий момент одно осевого джоя.
Ну …
Из хороших новостей - на Микрочипе стала бесплатно доступна студенческая 60 дней версия Си для 18 ПИКов. ну и какая-то документация к нему.
Наконец-то я хоть какой-либо проектик на Си для ПИКов самостоятельно скомпилил и он кое-как заработал. Пришлось правда в проект добавить асм файл явного описания конфигурации МК ( не знаю как енто содеять на Си ), ну и подправить конфу для 12 МГц квареца - как у оригинального шнурка.
А дальше - надо править/ваять дескрипторы/прочее, что-бы 16 бит CCP использовать для захвата PPM,
(точность захвата должна быть раз в пять лучше чем выход у Футабы-2048), аппаратный USB должен успевать 8 каналов по 16 бит передавать, ну и усреднять АЦП преобразования - благо макс производительность АЦП около 125 киловыборок/секунду, если 4 канала по 64 раза усреднять - более 400 усреднённых 16 бит преобразований/секунду на каждый канал - более 8 раз быстрее чем надо.
Одним словом - можно/нужно ковырять .
А из интересных ( но как всегда мало доделанных) примерчиков для 18ф4550 на Микрочипе - USB бут лоадер ну и Storage класс.
(ограничение программного 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 байта передачи за раз - вполне хватает для передачи всего одним пакетом.
Ну … Помог бы мне кто с дескриптором/прочим
а самому думать - пока не получается.
Нашёл 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 байт и один байт АЦП рассовал по старшим байтам всех каналов - толку пока ноль, ни кнопки ни каналы не шевелятся.
В итоге - каналы джоя появились на свет, но - молча стоят по центру.
Оказалось, что такая ерунда при различной не стыковке в дескрипторах.
В итоге Сделал себе напоминалку - код не связан/не вылизан:
// При смене формата джоя как минимум менять:
// 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 коннектора.
Теперь можно играцца дальше.
А у меня не работает что-то. Девайс шьется, фузы зашил, прошивку залил, устройство неопознано. Светодиодная мигалка заработала. Ошибок в подключении вроде нету -)
Может, провод мгтф на юсб не подходит? 4 провода, где то 10 см. 😃
Последнюю прошивку залил вполне нормально работает, только когда ручками шевелишь почемуто кнопки мигают (когда в виндах смотришь), кстати попутно выяснил что мега 8-8 нормально работает на 12 мГц, видать просто маркировка разная а чип один.
Последнюю прошивку залил вполне нормально работает, только когда ручками шевелишь почемуто кнопки мигают (когда в виндах смотришь)
Так и быть должно, поскольку кнопки просто дублируют состояния каналов. Если канал меньше 50%, то кнопка выключена (погашена). Если больше 50%, то включена (светится).
Я не знаю, какой смысл это было делать (думаю, что симуляторы позволяют правильно интерпретировать и аналоговые каналы самостоятельно, без помощи искусственно введенных кнопок), но раз просили - сделал.
По поводу независимых от каналов кнопок (был такой вопрос): сделать их управление от клавиатуры проблематично, так как это повлечет за собой свой драйвер на Windows. А вот сделать их зависимыми от кнопок, подключенных к Mega8 - это очень просто. Достаточно один раз при инициализации прошивки включить pull-up резисторы на соответствующих пинах (куда подключить кнопки), а потом читать состояние этих битов, укладывать их в байт и вставлять его при формировании HID Report вместо сравнения каналов с 50%. Это легко сделать самому - на то и открытые исходники.
Я так понял, что полярность сигнала по барабану? у меня на входе транзистора нет просто рез на 10к стоит.
По поводу джойстика на пике, это изврат конкретный, особенно если посмотреть на цены пиков и ужаснуться сразу и навсегда забыть про пики.
По поводу джойстика на пике, это изврат конкретный, особенно если посмотреть на цены пиков и ужаснуться сразу и навсегда забыть про пики.
Не понял. PIC18F2550 стоит в розницу $5,74, итого себестоимость комплектухи со всей обвязкой - $10-15. В каком месте ужасаться?
Я так понял, что полярность сигнала по барабану? у меня на входе транзистора нет просто рез на 10к стоит.
Да.
Не понял. PIC18F2550 стоит в розницу $5,74, итого себестоимость комплектухи со всей обвязкой - $10-15. В каком месте ужасаться?
ATMEGA8-16AU 1.376 $ (MT-System, СПб, розница от 1 шт.).
Ужасаться, может, и не стоит. Но разница - цена аппаратного USB, который, конечно, вещь приятная, но насколько оно потребно в данном применении - вопрос субъективный.
А подскажите в чем проблема - не убрать газ полностью, 3-й канал. WinXP. Раньше со шнурком на COM порт таких проблем не было, а теперь никак не остановиться. А в остальном все нормально. При калибровке все нормально показывает - столбик от нуля до полного заполнения.
А подскажите в чем проблема - не убрать газ полностью, 3-й канал. WinXP. Раньше со шнурком на COM порт таких проблем не было, а теперь никак не остановиться. А в остальном все нормально. При калибровке все нормально показывает - столбик от нуля до полного заполнения.
Если столбик от нуля до 100%, то, возможно, есть смысл проверить калибровку в самом симуляторе. У меня была подобная проблема (которая отложила публикацию на довольно большой срок): не работала пара каналов в AFPD. В джойстике все нормально, а в симе по нулям. Но я им не пользовался и поставил только для проверки работы устройства. Сваливал на дескрипторы и т.п. Но так как было не слишком нужно - не возился. И только потом дошло, что в нем есть своя калибровка. И тогда неработающие каналы нашлись и заработали. Возможно, это поможет.
По поводу пиков, действительно чему ужасаться, всего лишь в ~четыре раза большая цена, фигня какая (особенно в массовом производстве)
Да, и где он за пять баксов? я на вскидку поискал дешевле 8-ми (оптом) не нашел, ссылку дайте плиз, может там и меги по 50центов есть
Если столбик от нуля до 100%, то, возможно, есть смысл проверить калибровку в самом симуляторе. У меня была подобная проблема (которая отложила публикацию на довольно большой срок): не работала пара каналов в AFPD. В джойстике все нормально, а в симе по нулям. Но я им не пользовался и поставил только для проверки работы устройства. Сваливал на дескрипторы и т.п. Но так как было не слишком нужно - не возился. И только потом дошло, что в нем есть своя калибровка. И тогда неработающие каналы нашлись и заработали. Возможно, это поможет.
Cтолбик от нуля до 100% именно в FMS, честно говоря, я в джойстик и не заглядывал. А если в FMS снимаю реверс - то минимальный газ - это ручка от себя и в этом случае газ сбрасывается полностью.
Попробовал зайти в джойстик из панели управления - там не отображается столбик руля высоты, хотя крестик перемещается, после калибровки джойстика, в FMS заново откалибровал, но все осталось также.
Блин, было бы неплохо помечать в имени файла где сорсы, а где бинарники ибо описалово читать долго, а в поисках альтернативной опенсорс прошивки накачал архивов, в хесов там нету. А где есть, так вроде ниже написано, что она нерабочая.
Вощем, разобрался я со своими багами. Керамический резонатор частоту держал плохо. Мега заводилась, но работала не ровно на 12.000. После впайки нормального кварца шнур наконец таки определился.