-
Вложений: 2
USB контроллер джойстика
Привет всем,
Сегодня заставил работать свой USB контролер джоистика на ATMega8.
Пока все на макетке и толко 2 оси по 10 бит. Но расширить и доделать проблем уже небудет.
Для опробования подключил к резисторам своево старого Logitech Wingman Attack. Так что заметное в местах дрожание - это старые резюки.
Добавил картинки тэстера до и после калибровки. До калибровки видна разрешающая способность АЦП, но зато диапазон неполный из за неполного хода резисторов.
После калибровки в Виндозе диапазон стал полный. Зато разрешение уменшилось с 1024 до 780. Хотя, думаю, 780 вполне достаточно. Сравнивая с моим АБ2 это в три раза лучше.
Разрешение, конечно, зависит от хода резюков и разных случаях будет разным. С этим можно игратся.
Провода к резюкам поставил микрофонные экранированные так как с простыми проводами были наводки. Теперь если резюк недрожит число от АЦП стойт как вкопанное. Что, считаю, есть весьма хорошо.
Потом сфоткаю и выложу как все выглядит.
MeanDog
-
Ответ: USB контроллер джоистика
однако, респект! а как в виндах видится? как обычный джой или нужны спец драйвера?
-
Ответ: USB контроллер джоистика
Обычный джой. Никаких дополнителных драйверов.
Можно легко всякие различные конфигурации сделать - кнопки, хатки и т.п.
-
Ответ: USB контроллер джоистика
ЗдОрово!
а мой что то пока не оживает
поделись что в качестве usb интерфейса используешь?
по моему даже половины от 780 вполне хватает для всего кроме РУСа
чтоб не шумела совсем можно добавить сглаживание или просто последний разряд совсем отбросить.
если будешь делать на плате бери мегу в планаре у нее каналов больше
или вообще лучше 16 у 8 для всех кнопок портов маловато
-
Ответ: USB контроллер джоистика
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от Maxix
ЗдОрово!
а мой что то пока не оживает
поделись что в качестве usb интерфейса используешь?
по моему даже половины от 780 вполне хватает для всего кроме РУСа
чтоб не шумела совсем можно добавить сглаживание или просто последний разряд совсем отбросить.
если будешь делать на плате бери мегу в планаре у нее каналов больше
или вообще лучше 16 у 8 для всех кнопок портов маловато
Весь USB протокол обрабатывается програмой контролера. Часть кода брал у Игоря Цэско. Используется класс HID чтобы исключить надобность дополнительных драйверов.
Бит сбрасывать, думаю, не надо. Все разрешится исползованием качественных датчиков - магнитных или оптических.
Насчет платы нужно будет опдумать. Пока контролер в DIP корпусе, что легче в домашних условиях.
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от MeanDog
Весь USB протокол обрабатывается програмой контролера. Часть кода брал у Игоря Цэско. ...
сильно :)
я решил стандартным способом сделать
Цитата:
Бит сбрасывать, думаю, не надо. Все разрешится исползованием качественных датчиков - магнитных или оптических.
магнитные тоже шумят в пределах 1 разряда. оптика тем более...
я сглаживал.
Цитата:
Насчет платы нужно будет опдумать. Пока контролер в DIP корпусе, что легче в домашних условиях.
планар легче паять не надо сверлить ну вот разводить только сложнее
-
Вложений: 5
Ответ: USB контроллер джоистика
Вот выкладываю фотки моего творения в состоянии какой он пока есть. Все предельно просто. Матерьялы дешевые и доступные. Одно гнездо - USB . Другое для програмирования контролера через паралельный порт.
Теперь задача - нормальная плата, больше функций и датчики...
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от MeanDog
Вот выкладываю фотки моего творения в состоянии какой он пока есть. Все предельно просто. Матерьялы дешевые и доступные. Одно гнездо - USB . Другое для програмирования контролера через паралельный порт.
Теперь задача - нормальная плата, больше функций и датчики...
Решение красивое, поздравляю! Но есть вопрос: какова скорость в канале USB? Дотягивает ли она (хотя бы порядком величины) до ограничения для "low-speed signaling mode"?
-
Ответ: USB контроллер джоистика
Это low speed USB device как и все другие УСБ джойстики. По стандарту минимальное время опрашивания 10мсек. Мой на такой скорости и работает и с опросом 3 АЦП по 10 бит ATMega8 проблем ненаблюдается.
Хотя можно задавать и большие периоды опрашивания вплоть до 255 мсек.
-
Ответ: USB контроллер джоистика
Спасибо, но, видимо, я недостаточно конкретизировал вопрос, прошу прощения.
Меня интересует характеристика нижнего уровня интерфейса, независимо от применения к конкретному устройству. То есть, в случае полностью программной обработки протокола USB, как у Вас, на ATMega8, можно ли рассчитывать на максимальную для low-speed устройств скорость (~1,5 мбит/с). Или Вы не тестировали его на максимальную пропускную способность?
-
Ответ: USB контроллер джоистика
Теперь понял :)
Я нетестировал его на максимальную пропускную способность. Но она точно на порядок меньше 1.5 мбпс. Во время приема/передачи каждый бит обрабатываетса програмой и информация записываетса в буфер. Это около 10 операций/бит. Что-то другое и неуспееш сделать. Вся обработка делаетса между запросами. Поетому быстродеиствие зависит от сложности задач между УСБ запросами. Если исползовать очень простые задачи, думаю, 200-300 кбпс должно достигать.
-
Ответ: USB контроллер джоистика
Спасибо, именно это я и хотел услышать :).
На счёт скорости: да, негусто получается. Но, с другой стороны, для тех задач, которым этого достаточно, программный вариант повышает доступность элементной базы.
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от Mishel
Но, с другой стороны, для тех задач, которым этого достаточно, программный вариант повышает доступность элементной базы.
Вот именно. Попробуйте зайти в магазин радиодеталей и попросить дать вам какой нибудь из контроллеров с встроенной УСБ функцией. Когда вам скажут что можно заказать и прибудет через месяц спросите про цену.
-
Ответ: USB контроллер джоистика
2 MeanDog
А исходники публиковать не собираешься? Ежели не жалко на mabp()inbox.ru плиз
Я тоже начал копать в этом направлении, сейчас изучаю исходники Игоря. Для начала подвесил кнопки и ЖК индикатор.
-
Ответ: USB контроллер джоистика
Исходники излагать пока несобираюсь. Недоделан он еще. Как доделаю будет видно.
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от MeanDog
Исходники излагать пока несобираюсь. Недоделан он еще. Как доделаю будет видно.
Ждем-с....
Сий девас именно то, что нужно.
Интересно, насколько сложно будет его повторить в домашних условиях?
;)
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от ZlojCrash
Сий девас именно то, что нужно.
Интересно, насколько сложно будет его повторить в домашних условиях?
;)
ИМХО не сложно, ежели хоть пару раз держал паяльник. Там софт править главное, а железки элементарные.
Уважаемый MeanDog мя поправит, ежели что.. :)
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от Mishel
Спасибо, именно это я и хотел услышать :).
На счёт скорости: да, негусто получается. Но, с другой стороны, для тех задач, которым этого достаточно, программный вариант повышает доступность элементной базы.
LowSpeed USB в режиме Interrupt (если у Игоря исходники взяли - то скорее всего это так, да и проще просто) - максимальная скорость ~70-100 Kb/sec
И не важно софтовый или аппаратный контролер. Это стандартная скорость. Она зависит только от величины пакета. Точнее от его кратности 8-байтам
MeanDog
Не пробовал две хатки уложить в дескрипторы так чтоб только байт от АЦП заняли ?
Чего-то я никак схемку не набросаю. А тратить лишний канал АЦП на вторую хатку жаба давит.
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от LazyCamel
LowSpeed USB в режиме Interrupt (если у Игоря исходники взяли - то скорее всего это так, да и проще просто) - максимальная скорость ~70-100 Kb/sec
И не важно софтовый или аппаратный контролер. Это стандартная скорость. Она зависит только от величины пакета. Точнее от его кратности 8-байтам
MeanDog
Не пробовал две хатки уложить в дескрипторы так чтоб только байт от АЦП заняли ?
Чего-то я никак схемку не набросаю. А тратить лишний канал АЦП на вторую хатку жаба давит.
В interrupt режиме примерно такая скорость и есть. Но если использовать bulk режим то скорость может достигать мною упомянутых величин.
На счет двух хаток фактически непробовал но невижу проблем их запихнуть в один баит. Это по 4 бита каждой. Получаетса две 8-позиционные хатки. С одной все у меня работает. Жаль надо одно значение тратить на нейтральную позицию а то можно бы было в 3 бита поместится.
Ограничение одно - все данные должны поместится в 64 бита.
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от LazyCamel
LowSpeed USB в режиме Interrupt (если у Игоря исходники взяли - то скорее всего это так, да и проще просто) - максимальная скорость ~70-100 Kb/sec
И не важно софтовый или аппаратный контролер. Это стандартная скорость. Она зависит только от величины пакета. Точнее от его кратности 8-байтам
1. Так для Low-speed и нет другого режима, кроме Interrupt (не считая управляющего - Control). Bulk и Isochronous режимы доступны только для Full-speed устройств.
2. В каких единицах Вы привели цифры: "~70-100 Kb/sec"?
Если это килобиты/сек., тогда, судя по приведённой в спецификации таблице для "Low-speed Interrupt Transaction", Ваши цифры соответствуют самому медленному варианту: "Data Payload" = 1 байт, "Max Bandwidth" = ~13000 байт/сек. При этом самый быстрый вариант (по той же таблице): "Data Payload" = 8 байт, "Max Bandwidth" = ~64000 байт/сек. Если же это у Вас килобайты/сек., то откуда? И потянет ли софтовый контроллер (на ATMega8) такую максимальную скорость, если у него ещё и другие задачи есть?
Если я где-то ошибся - поправьте меня.
Мой изначальный вопрос звучал в отношении обеспечения программным контроллером максимальной скорости на шине (1.5 мбит/с для Low-speed), а не той, которая учитывает только полезные данные. Думаю, по ответу MeanDog можно косвенно судить о программном варианте: максимальную скорость для Low-speed он врядли потянет (или всё-таки потянет?:)), но для таких задач, как у автора - этого вполне достаточно, судя по всему.
-
Ответ: USB контроллер джоистика
MeanDog
От меня тоже респект!
Если бы я делал USB контроллер, я бы сделал его именно так - софтово! Уменьшение скорости мало волнует (в случае джоя - на все хватит с лихвой!). Также я поддерживаю вариант CPU в дип корпусе, может, еще не созрел для внутрисхемного программирования... Имхо, правда паять проще (шаг у ножек 0,1 или 0,05 дюйма - ясно дело, что нормальный чел выберет ;) ). НО! Я бы все же поставил буферную микруху между контроллером и компом! Ну и пусть лишний корпус, зато, если что - сгорит буфер, а не AVR! (из моей практики - очень помогает, я бы даже сказал, что это необходимо!!!!!). А софтовое подключение к USB мне очень импонирует! Я тоже так хочу! И обязательно сделаю!! (когда-нибудь!)
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от Mishel
1. Так для Low-speed и нет другого режима, кроме Interrupt (не считая управляющего - Control). Bulk и Isochronous режимы доступны только для Full-speed устройств.
2. В каких единицах Вы привели цифры: "~70-100 Kb/sec"?
Если это килобиты/сек., тогда, судя по приведённой в спецификации таблице для "Low-speed Interrupt Transaction", Ваши цифры соответствуют самому медленному варианту: "Data Payload" = 1 байт, "Max Bandwidth" = ~13000 байт/сек. При этом самый быстрый вариант (по той же таблице): "Data Payload" = 8 байт, "Max Bandwidth" = ~64000 байт/сек. Если же это у Вас килобайты/сек., то откуда? И потянет ли софтовый контроллер (на ATMega8) такую максимальную скорость, если у него ещё и другие задачи есть?
Если я где-то ошибся - поправьте меня.
Мой изначальный вопрос звучал в отношении обеспечения программным контроллером максимальной скорости на шине (1.5 мбит/с для Low-speed), а не той, которая учитывает только полезные данные. Думаю, по ответу MeanDog можно косвенно судить о программном варианте: максимальную скорость для Low-speed он врядли потянет (или всё-таки потянет?:)), но для таких задач, как у автора - этого вполне достаточно, судя по всему.
1. Ты прав. Я невникался в bulk & isochronous и нечитал внимательно Chapter 5 :) поскольку моей целью был interrupt, так как он используетса в джойстиках.
Тогда: 64 бита - количество данных на одну транзакцию, 10мс - стандартный минимальный период опроса low-speed device interrupt. Получаем 6400 битов в секунду. Не густо, но для большинства джойстиков хватает. А так специалный драйвер может опрашивать вплоть до минимальных периодов допустимых low-speed interrupt протоколом. Тогда скорости могут достигать величин указаных на таблице 5-5 в Chapter 5 Universal Serial Bus Specification Revision 1.0. Это 64000 бита в секунду если драйвер опрошивает через каждую 1мс.
2. Я просто привел скорость, которую можно бы достигнуть используя режим на этом контроллере. Но как видимо это теоретически ;).
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от Mishel
1. Так для Low-speed и нет другого режима, кроме Interrupt (не считая управляющего - Control). Bulk и Isochronous режимы доступны только для Full-speed устройств.
2. В каких единицах Вы привели цифры: "~70-100 Kb/sec"?
Если же это у Вас килобайты/сек., то откуда? И потянет ли софтовый контроллер (на ATMega8) такую максимальную скорость, если у него ещё и другие задачи есть?
Если я где-то ошибся - поправьте меня.
...
Мой изначальный вопрос звучал в отношении обеспечения программным контроллером максимальной скорости на шине (1.5 мбит/с для Low-speed), а не той, которая учитывает только полезные данные. Думаю, по ответу MeanDog можно косвенно судить о программном варианте: максимальную скорость для Low-speed он врядли потянет (или всё-таки потянет?:)), но для таких задач, как у автора - этого вполне достаточно, судя по всему.
Вы импользуйте не 8 байт, а 13(с оверхедами протокола) Речь-то шла о шинной скорости.
Максимальную скорость он в тупом (гнать готовый шаблон) режиме потянет.
-
Ответ: USB контроллер джоистика
Цитата:
Сообщение от GO!
[...] Я бы все же поставил буферную микруху между контроллером и компом! Ну и пусть лишний корпус, зато, если что - сгорит буфер, а не AVR! (из моей практики - очень помогает, я бы даже сказал, что это необходимо!!!!!).
Данная схема, судя по всему, запитина от порта, а не от отдельного БП, поэтому потребность в дополнительном буфере сомнительна, IMHO.
Цитата:
Сообщение от MeanDog
[...] А так специалный драйвер может опрашивать вплоть до минимальных периодов допустимых low-speed interrupt протоколом. Тогда скорости могут достигать величин указаных на таблице 5-5 в Chapter 5 Universal Serial Bus Specification Revision 1.0. Это 64000 бита в секунду если драйвер опрошивает через каждую 1мс
Это если в каждый фрейм попадает по одному 8-байтному пакету. А вот так, чтобы заполнять его (фрейм) по максимуму (8 пакетов по 8 байт для Low-speed), дабы получить 64000 байт в секунду - это, видимо, теоретически.
Несмотря на всё это, программный контроллер очень привлекателен ещё и тем, что можно попытаться сэмулировать одновременно несколько HID-устройств. Спецификация это позволяет, а так как у разработчика, в этом случае, в распоряжении - все уровни протокола, это вполне достижимо, если у AVR "сил" хватит :). Думаю, устройство, которое "прикидывается" одновременно парой джойстиков и клавиатурой никому не помешает ;).
Цитата:
Сообщение от LazyCamel
Вы импользуйте не 8 байт, а 13(с оверхедами протокола) Речь-то шла о шинной скорости.
Максимальную скорость он в тупом (гнать готовый шаблон) режиме потянет
Возможно, только толку от этого немного.