-
Ответ: USB контроллер джоистика
2 GO.
Имхо нет. Тут (на этом алгоритме) получается другое, появляется виртуальное нажатие еще одной кнопки, если нажаты три в углах матрицы.
2 MeanDOG.
Тогда (для внешних 16-бит АЦП) придется освобождать SPI, заводить двухполярное +/- 12В и маньячить с разводкой и питанием. USB-шные +5В звенят сильно.
2 ALL
вот здесь
http://www.gaw.ru/html.cgi/txt/app/micros/avr/index.htm
и особенно вот здесь
http://www.atmel.ru/Articles/Articles.htm
есть русские доки связанные с АВРами.
И еще http://home.tula.net/algrom/russian.html - супер! Графический ассемблер, прошивальщик,отладчик,симулятор. Больше года работаю с ним. Жаль для х86 ничего подобного нет.
Вдогонку. Кстати, рекомендую посмотреть в сторону
AtMega48-20PI(ai) - у них розница должна быть меньше 100 рублей, а так это функционально и по-пиново полные аналоги Мега8
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от LazyCamel
2 GO.
Имхо нет. Тут (на этом алгоритме) получается другое, появляется виртуальное нажатие еще одной кнопки, если нажаты три в углах матрицы ...
Имхо, это как раз и значит, что независимого нажатия кнопок (больше двух, и то не во всех случаях), не получится без применения диодов!
Однако, во многих клавах матрица пленочная и без диодов и распознают они гораздо большеее количество нажатых/отпущенных кнопок.. :confused: Im wondering какой алгоритм? :confused:
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от LazyCamel
Вдогонку. Кстати, рекомендую посмотреть в сторону
AtMega48-20PI(ai) - у них розница должна быть меньше 100 рублей, а так это функционально и по-пиново полные аналоги Мега8
Интересно, AtMega48-20PI прошьется без ошибок на программаторе, который его не знает (в частности PicProg - он знает только ATmega8)?
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от MeanDog
Для стандартного джоя 10 разрядов вполне достаточно. Но я думаю о 16-и разрядном АЦП с перспективой эго использования в качестве точного контрольного измерительного прибора. Он тоже пригодится для мерения сигналов с большим динамическим диапазоном. В этом случае усиление или гашение сигнала может быть исполнено простыми програмными алгоритмами.
В этом что-то есть!
Если не заморачиваться с АЧХ АЦП, то можно обойтись встроенным компаратором AVR! (интегрирующий АЦП).
Цитата:
Сообщение от LazyCamel
Тогда (для внешних 16-бит АЦП) придется освобождать SPI, заводить двухполярное +/- 12В и маньячить с разводкой и питанием. USB-шные +5В звенят сильно.
На этот случай предлагаю применить старинные CPU AT89C5X. Если для них написать софтовый контроллер USB, то им просто цены не будет! (в плане функциональности - практически полная микроЭВМ! ;) ).
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от GO!
Имхо, это как раз и значит, что независимого нажатия кнопок (больше двух, и то не во всех случаях), не получится без применения диодов!
Однако, во многих клавах матрица пленочная и без диодов и распознают они гораздо большеее количество нажатых/отпущенных кнопок.. :confused: Im wondering какой алгоритм? :confused:
алгоритм очень простой - последовательный опрос а не паралельный. он состоит в том что на (например) строку матрицы (только одну) подается "1" и при этом считываются все столбцы которых не много (примерно 4 - 6).
итого получаем дофигище кнопок.
Таким алгоритмом я сейчас и планирую заняться. Тоесть реализовать на данной базе.
Планирую сделать електронику : 12-18 осей , что с технической точки зрения вполне реально
32 - 128 кнопок это сли не заниматься извращениями, Если немножко поизвращаться , то можно на этом контролере реализовать 256 или даже 512 кнопок. Но это всё только с хардовой части. Тут возникает загвоздка с временем обработки всего этого счастья и с перидачей и восприимчивости собсно винды к устройствам с таким не хилым количеством всяких кнопочек.
Но впринципе никому такое счастье не нада. Пока я решил сделать вариант с 12 осей 28 кнопок 1 хат
ПС я решил посмортеть на стоимость АЦП 12 14 и 16 разрядов , я просто ОФИГИНЕЛ !!!! это просто кАААшмААр !!! от 100 уе !!
а мультиплексоры блин от 20 уе !!! просто маразм !! пришлось купить наши старые аж по 0.2 бакса за штуку :)
вобщем вот пытаюсь вьехать сейчас в ХИД устройства и особенно есть ли у них ограничения на количество осей и кнопок так как не хотелось бы пролететь :rolleyes:
ППС впринципе можно сделать свой 12 максимум 14 разрядный АЦП на основе имеющегося 8ти разрядного АЦП и дето достать 8 розрядный ЦАП.
-
Ответ: USB контроллер джоистика
Ограничение по осям и кнопкам в ДиректХ - 8 осей, 128 кнопок. Если через WinAPI работать, то 6 осей.
Можно оси на разные джои замапить, тогда ограничение по осям и кнопкам обойдешь.
Но нафига 12 осей???
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от UIV
Ограничение по осям и кнопкам в ДиректХ - 8 осей, 128 кнопок. Если через WinAPI работать, то 6 осей.
Можно оси на разные джои замапить, тогда ограничение по осям и кнопкам обойдешь.
Но нафига 12 осей???
Про ограничения пасиба.
А зачем 12 , так это очень просто - для ИЛ2 поидее нужно 10 ну а 12 - так получается 8) можно конечно оставить только 10 , но както обидно чтоли , что максимум всего только 8 :(
буду смотреть . Но во всяком случае , почему если можно сделать больше - делать меньше ??? Ведб помоему чем больше осей , тем больше функций на них можно повесить.
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от GO!
Имхо, это как раз и значит, что независимого нажатия кнопок (больше двух, и то не во всех случаях), не получится без применения диодов!
Однако, во многих клавах матрица пленочная и без диодов и распознают они гораздо большеее количество нажатых/отпущенных кнопок.. :confused: Im wondering какой алгоритм? :confused:
Там матрица большая.. где-то есть у меня зарисовка
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от UIV
Ограничение по осям и кнопкам в ДиректХ - 8 осей
На устройство или вообще? Если вообще, то мне очень интересно, как в Ил-2 работают 10 осей. А они работают - проверено.
-
Ответ: USB контроллер джоистика
вот возник вопрос.
где найти описания ко всем устройствам и параметрам состояния которых можно перидавать с помошью рапортов ХИД устройств.
однако 8) зашел на сайт ХИД устройств , кажется чтото подобное нашел , но чот у меня не качается 8( "HID Usage Tables" это оно ????
-
Ответ: USB контроллер джоистика
BAG
Сайт - это www.usb.org? Вроде там все качалось.
Если хочешь, я тебе на мыло могу скинуть "Введение в разработку HID устройств" (360к) и "Описание USB шины" (450 к) - оба на русском, в pdf - только там не очень много информации.
-
Ответ: USB контроллер джоистика
Rik если не влом выложи их на форум pls.:))
-
Вложений: 3
Ответ: USB контроллер джоистика
Вот один, второй не влезает, млин. Завтра или раром запакую, или разрежу надвое.
Вот, добавил.
-
Ответ: USB контроллер джоистика
Кстати, сегодня мне достался контроллер - спасибо Максу и Илье. Только и успел, что спаять, запрограммировать и проверить 2 оси и несколько кнопок - все ОК, только хатка вместо "вниз" отрабатывает "влево-вниз", наверное, где-то соплю припоя повесил. Завтра продолжу танцы.
-
Ответ: USB контроллер джоистика
Рик спасибо.
Да контролер работает , вот сейчас читаю ... прсвещаюсь по поводу улучшений.
Вот надыбал такую штучку AT43USB351M , но таких в Киеве нету (( я смотрел - не нашёл.
Если не тяжело , можешь мне отправить на емейл , так как я имею очень ограниченный доступ сюда на форум , и качать сейчас не могу .. а до среды ждать чтото не хочеться. Только тогда у меня будет возможность скачать (((
мой емейл. buddy_bag@ipnet.kiev.ua
-
Ответ: USB контроллер джоистика
-
Ответ: USB контроллер джоистика
-
Ответ: USB контроллер джоистика
По поводу меги 48. На самом деле это обычная мега8 сделаная по новому тех.процессу(0.25 вместо 0.35), с отбракованной половиной памяти.
Поэтому дешевле. Все программаторы что умеют програмить Мега8, апвтоматически умеют програмить и Мега88/48. Только для Мега48 надо самому следить за памятью, чтобы предел не привысить.
http://efo.ru/components/atmel/tables/avr.htm
Цены:
http://efo.ru/doc/Atmel/Atmel.pl?530
По поводу осей и кнопок.
Имхо больше 6-8 осей в одном устройстве извращаться не сильно-то эффективно.
Дешевле повесить еще одно устройство на УСБ.
Второе - по кнопкам. Любой 8-10 битный АЦП легко превращается в 16 кнопок.
Достаточно собрать последовательно цепь из резисторов каждый из которых вдвое больше предыдущего. А кнопки будут просто его шунтированть(закорачивать) вот тебе и минимум 8 независимых кнопок на 1-ой ноге джоя.
Про направление развития/удешевления/унификации.
Есть такой хороший АВР - Attiny26. Если у него перепрограмить ногу РВ1 как ИНТ0, то получается контроллер УСБ с 8 АЦП. А это 5 осей (тангаж,крен,раддер,2газа или шаг/газ)+2 хатки+16 кнопок. В 20-ногом корпусе. 8 байт дескриптор.
Легко поместится в спичечном коробке :-)
Про средства отладки для АВР - симулятор, с возможностью эмуляции внешних деталей (включая виртуальные осицилограф и генераторы сигналов) :
http://www.amctools.com/
если кто хочет ковыряться для себя для дома в АВР - маст хэв однозначно.
-
Ответ: USB контроллер джоистика
вот блин фигня , !! я писал ответ примерно минут 15 и тут зараза експлорер закрылся !! вот гадёныш !!
в кратце что я хотел сказать ..
исспользовать вход АЦП для кнопок это всёравно что фотоаппаратом гвозди забивать !! просто бред так как с помошью 2х портов можно реализовать сдоровую матрицу кнопок.
если например порт А - 4 бита порт В 6 бит
не исспользуя внешних микросхем имеем матрицу 6*4= 24 кнопки (опрос строк последовательный, что даёт возможность ликвидировать неоднозначности при нажатии комбинаций кнопок)
при исспользовании внешнего мультиплексора 1 на 8 .
К входу подключаем "1" , к адресным входам 3 бита порта В . В такм случае получаем матрицу уже размеро 8*(3+4)=56 независимых кнопок
Если в обеих случаях посмотреть время приобразования , то оно будет меньше чем время необходимое АЦП на оцифровку аналогового сигнала.
вобщем забивать гвозди фотоаппаратом это маразм.
-
Ответ: USB контроллер джоистика
имею вопрос к создателю САБЖА.
Скажи пожалуйста , сбор информации с датчиков (входов контролера) джоя идёт во время промежутков ожидания запроса от ЮСБ ХОСТа на поставку информации (для каждого пакета отдельно или нет) , или уже после полученя запроса контролер начинает этот сбор ??
тоетсь к чему я это : будет ли кртично если время сбора информации возрастёт с максимума сейчас возможного и равного 1.5мс до максимально возможного промежутка например в 3 мс ??
откуда эти цифры: взяты на сонове того что написано , что приобразовние АЦП максимум 250мкс .... хм ... но если посмотреть что получается.....
У тебя 6 осей каждая из них обрабатывается в режиме единичного опроса входов , тоесть на такой опрос нужно 25 тактов АДС
после подсчётов получилос что на опрос 6ти осей нужно 825мкс
так вот всётаки этот опрос как я понял ведётся после того как был получен запрос на информацию , или всётаки в промежутках между опросами ???
просто например в опосе есть такой фрагмент
out ADMUX, temp0
sbi ADCSRA, ADSC ; start conversion
WaitForADC_10:
sbic ADCSRA, ADSC
rjmp WaitForADC_10
in temp0,ADCL
in temp1,ADCH
так вот в промежутке
WaitForADC_10:
sbic ADCSRA, ADSC
rjmp WaitForADC_10
наблюдается явный простой , так как АЦП работает как независимое устроёство поралельно всем контролеру , так в эти промежутки времени можно внести например другую обработку чего либо , так как они состовляют примерно 135 микросекунд , а это 1680 тактов при частоте 12МГц .. впринципе достаточно сУрьёзный промежуток :)
я вот просто собираюсь добавить осей и мне эта информация очень и очень нужна
Я просто не смог точно покачто понять механизм общения по ЮСБ , из твоего кода.
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от BAG
имею вопрос к создателю САБЖА.
Скажи пожалуйста , сбор информации с датчиков (входов контролера) джоя идёт во время промежутков ожидания запроса от ЮСБ ХОСТа на поставку информации (для каждого пакета отдельно или нет) , или уже после полученя запроса контролер начинает этот сбор ??
Сбор ведется в промежутках между запросами. Я кажется писал об этом. В цикле Main вызывается процедура ProcJoystickRequest, которая опрашивает входы. Она вызывается по установке флага JoystickDataRequestBit. Этот флаг устанавливается в процедуре ProcessEndpoint1 когда закончена пересылка ответа на USB запрос. Эта процедура вызывается из INT0handler по получении пакета данных для опроса Endpoint1 по USB.
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от BAG
исспользовать вход АЦП для кнопок это всёравно что фотоаппаратом гвозди забивать !! просто бред так как с помошью 2х портов можно реализовать сдоровую матрицу кнопок.
О. Наконец то пошла дисскусия/обсуждение. :-)
Во-1. О гвоздях и фотоаппаратах. Ты считаешь что использования 3 (лишних) выходов штатного АЦП для 24 кнопок это хуже чем использование 10 выводов для матрицы кнопок ?
Во-2. Опрос АЦП (13 тактов 200кГц АЦП) - 65 мкс, из которых непосредственно на код - 2-4 такта МК. Никто кстати не мешает задрать скорость АЦП выше, ценой увеличения тока потребления - читай даташит внимательнее.
Цитата:
Сообщение от BAG
Если в обеих случаях посмотреть время приобразования , то оно будет меньше чем время необходимое АЦП на оцифровку аналогового сигнала.
Да-да-да... :-)
in temp,ADCH для АЦП
против цикла(точнее 2-х) и ксоров/сдвигов для 6Х4 матрицы.
Загрузи в AVR Studio или VMLAB и посмотри растактовку.
Мне рассказывать про дребезг контактов и почему в джойстиках на кнопках тройная буфферизация и какая обработка, прежде чем отдать состояние кнопок в порт ?
Цитата:
Сообщение от BAG
вобщем забивать гвозди фотоаппаратом это маразм.
Открой ЛЮБОЙ нормальный джойстик и посмотри КАК там сделана хатка.
Или ты считаешь что вся рота идет не в ногу и страдает МАРАЗМОМ, один ты в ногу...
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от LazyCamel
О. Наконец то пошла дисскусия/обсуждение. :-)
Во-1. О гвоздях и фотоаппаратах. Ты считаешь что использования 3 (лишних) выходов штатного АЦП для 24 кнопок это хуже чем использование 10 выводов для матрицы кнопок ?
Да я считаю что это хуже , так как это вопервых медленнее и вовторых имеет значительно меньшую точность - остутсвие какой-либо возможности реализовать комбинации кнопок которые повешены на один вход АЦП
Цитата:
Сообщение от LazyCamel
Во-2. Опрос АЦП (13 тактов 200кГц АЦП) - 65 мкс, из которых непосредственно на код - 2-4 такта МК. Никто кстати не мешает задрать скорость АЦП выше, ценой увеличения тока потребления - читай даташит внимательнее.
65 мкс лишь в том случае , если мы имеем потоковый опрос входов АЦП , а если всётаки единичный опрос , то 125 мкс.
Для справки при частоте 12МГц 1 такт это аж 0.08мкс помоему это маленькое время .. и за 65 мкс пройдет всеголишь 800 тактов, за которые можно не то что матрицу всю опросить , но и дребезг исключить !
Цитата:
Сообщение от LazyCamel
Да-да-да... :-)
in temp,ADCH для АЦП
ты забыл
. out ADMUX, temp0
. sbi ADCSRA, ADSC
WaitForADC:
. sbic ADCSRA, ADSC
. rjmp WaitForADC
а это дофигише времени простоя !!
и только потом
in temp,ADCH для АЦП
Цитата:
Сообщение от LazyCamel
против цикла(точнее 2-х) и ксоров/сдвигов для 6Х4 матрицы.
Загрузи в AVR Studio или VMLAB и посмотри растактовку.
а для того чтоб это сделать быстро нужно не делать это в тупую !!
знаешь есть такая команда как
SWAP Rd Перестановка тетрад Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) 1 цикл
и еще есть такая команда как add adc rol ror ну и некоторые другие ... ну уж поверь что они все выполнятся раз в 20 быстрее чем твои на основе АЦП !
Цитата:
Сообщение от LazyCamel
Мне рассказывать про дребезг контактов и почему в джойстиках на кнопках тройная буфферизация и какая обработка, прежде чем отдать состояние кнопок в порт ?
А мне вспомнить что есть такие вещи как кнопки БЕЗ дребезга , или с очень малым дребезгом ?? который может быть устранён просто двойным буфером. А также никто тебя не заставлят считывать кнопки с периодичностью соизмеримой с их дребезгом !! периода опроса в 20-30мс достаточно для ликвидации дребезга большинства "нормальных" кнопок
Цитата:
Сообщение от LazyCamel
Открой ЛЮБОЙ нормальный джойстик и посмотри КАК там сделана хатка.
Или ты считаешь что вся рота идет не в ногу и страдает МАРАЗМОМ, один ты в ногу...
уляля ... я ЗНАЮ как делается хатка !! она НОРМАЛЬНО делается с помошью 4х кнопок !!! а не целого канала АЦП !!! только не нужно говорить что лишний канал АЦП можно занять хаткой вместо того , чтоб исспользовать его для оси например или ещё чегонить хитрого.
Покарйней мере все джои которые я держал в руках с 8ми позиционным хатом имели реализацию оного на 4х кнопках !!!
-
Ответ: USB контроллер джоистика
да еще вот забыл ..
ты где это видел НОРМАЛЬНЫЙ джойстик ????? есть хоть один такой а ???
А если такие есть , то почему тут народ всякой фигнёй мается ??? разнообразные приспособы делает ???? датчики нафиг выбрасывает !!!
Почем тогда на половине джоев не хватает осей ?? может потому , что очень умные "дятлы" исспользуют для хета каналы АЦП ??? или потому, что ктото делает джойстик за 20 баксов а продаёт его за 400 ????? и ставит в него такую електроонику которой бы не в джойстике стоять а в аквариуме рыбкам реле переключать !!! а не заниматься измерением угловых перемещений!!!
и вообще ты гденибуть видел механику джойстика нормально исполненную в металле с подогнанными деталями и подшипниками ????
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от MeanDog
Сбор ведется в промежутках между запросами. Я кажется писал об этом. В цикле Main вызывается процедура ProcJoystickRequest, которая опрашивает входы. Она вызывается по установке флага JoystickDataRequestBit. Этот флаг устанавливается в процедуре ProcessEndpoint1 когда закончена пересылка ответа на USB запрос. Эта процедура вызывается из INT0handler по получении пакета данных для опроса Endpoint1 по USB.
Спасибо. Ты мне очень помог.
Такой еще вопрос.
если создавать репорт дескриптор с помошью изнего тула , то он не пашет вообще 8)))
а также было замечено что дравами поддерживаются только некоторые оси ... большинство осей не поддерживаетс (( с чем это может быть связанно ??? вот например с страницы Simulation Controls пашут только Газ и Рудер , а остальные просто не хотят восприниматься !!! или может я чтото не так делаю ??? Хотя очень всё это странно... я всё по спецификации делал.
вот собственно при описании твоей структуры таким дескриптором
пашут только оси Х У и Газ с Рудом ....
пробовал вместо газа и руда подставлять другие с тойже страницы - ФОНАРЬ !!!! не работают ((( меня это сильно огорчает. В чём тут ошибка ??
пытался обьединять проблемные оси в разнообразные колекции - не помогает - не пашут всёравно ((
db 5h, 1h ; USAGE_PAGE (Generic Desktop)
db 15h, 0h ; LOGICAL_MINIMUM (0)
db 9h, 4h ; USAGE (Joystick)
db a1h, 1h ; COLLECTION (Application)
db 5h, 2h ; USAGE_PAGE (Simulation Controls)
db 85h, 1h ; REPORT_ID (1)
db 9h, bah ; USAGE (Rudder)
db 9h, bbh ; USAGE (Throttle)
db 9h, b1h ; USAGE (Aileron Trim)
db 9h, b9h ; USAGE (Elevator Trim)
db 15h, 81h ; LOGICAL_MINIMUM (-127)
db 25h, 7fh ; LOGICAL_MAXIMUM (127)
db 75h, 8h ; REPORT_SIZE (8)
db 95h, 4h ; REPORT_COUNT (4)
db 81h, 2h ; INPUT (Data,Var,Abs)
db 5h, 1h ; USAGE_PAGE (Generic Desktop)
db 9h, 1h ; USAGE (Pointer)
db a1h, 0h ; COLLECTION (Physical)
db 9h, 30h ; USAGE (X)
db 9h, 31h ; USAGE (Y)
db 16h, 0h, feh ; LOGICAL_MINIMUM (-512)
db 26h, ffh, 1h ; LOGICAL_MAXIMUM (511)
db 75h, ah ; REPORT_SIZE (10)
db 95h, 2h ; REPORT_COUNT (2)
db 81h, 2h ; INPUT (Data,Var,Abs)
db c0h ; END_COLLECTION
db 9h, 39h ; USAGE (Hat switch)
db 35h, 0h ; PHYSICAL_MINIMUM (0)
db 46h, 3bh, 1h ; PHYSICAL_MAXIMUM (315)
db 15h, 0h ; LOGICAL_MINIMUM (0)
db 25h, 7h ; LOGICAL_MAXIMUM (7)
db 65h, 14h ; UNIT (Eng Rot:Angular Pos)
db 75h, 4h ; REPORT_SIZE (4)
db 95h, 1h ; REPORT_COUNT (1)
db 81h, 2h ; INPUT (Data,Var,Abs)
db 85h, 2h ; REPORT_ID (2)
db 5h, 9h ; USAGE_PAGE (Button)
db 19h, 1h ; USAGE_MINIMUM (Button 1)
db 29h, 18h ; USAGE_MAXIMUM (Button 24)
db 15h, 0h ; LOGICAL_MINIMUM (0)
db 25h, 1h ; LOGICAL_MAXIMUM (1)
db 75h, 1h ; REPORT_SIZE (1)
db 95h, 18h ; REPORT_COUNT (24)
db 55h, 0h ; UNIT_EXPONENT (0)
db 65h, 0h ; UNIT (None)
db 81h, 2h ; INPUT (Data,Var,Abs)
db c0h ; END_COLLECTION
Ах да , чуть не забыл.
С окончанием коллекции тоже пришлось помучаться ... просто стандартный конец С0 приходиться заменять пустышками как и у тебя .... Это просто взято сразу из едитора....