Воскресенье, 22.12.2024, 09:57
Приветствую Вас Гость | RSS
 
Главная | Каталог статей | Регистрация | Вход
 
Меню сайта

Категории каталога
Новости Ил-2 Штурмовик [0]
Немного теории [1]
Конструкторское бюро [1]
Летная школа [10]

Главная » Статьи » Конструкторское бюро

Mjoy
MJoy
USB-контроллер джойстика на основе микроконтроллера AVR ATMega8
Mindaugas Milasauskas
Основан на проекте контроллера "USB в RS232" от Igor Cesko


Введение
Я начал разрабатывать этот контроллер джойстика, вдохновленный необходимостью в простом самодельном джойстике, который мог бы преодолеть ограничения гейм-порта и предоставить бОльшую точность и гибкость для всевозможных проектов. Я реализовал потребность в таком устройстве, поскольку я люблю играть в игру Ил-2 Штурмовик. Для этой игры очевидна необходимость иметь высококачественный джойстик, если Вас не радует быть «мясом». Наиболее массово представленные на рынке джойстики имеют массу недостатков. И есть много парней, которые делают джойстики по своим собственным проектам. Многие эти проекты значительно лучше, чем те, что производятся массово. Для большинства этих проектов необходим контроллер. Использование гейм-порта разрушает все достоинства высокоточной и прецизионной механики. Все это обсуждается во многих форумах по игре Ил-2. Очевидное требование для контроллера джойстика – подключение по шине USB, так что я начал работать в этом направлении. И теперь это здесь…
Исследования
Наиболее хорошо выглядел следующий путь – найти подходящий USB-контроллер и добавить к нему необходимые функции. Но после изучения различных устройств и их возможностей стало очевидным, что разработать такое устройство за разумное время и при разумных затратах простому любителю-самодельщику не так уж просто. Другая возможность была - взять более общий микроконтроллер и встроить в него протокол шины USB, как процедуру прикладного уровня. Поиски в интернете привели меня на страницу Igor Cesko http://www.cesko.host.sk
Igor провел хорошее исследование и проделал большую работу по встраиванию протокола USB в микроконтроллер. Итак, Я решил взять его проект за основу и осуществить все, что необходимо для топ-джойстика. Я выбрал контроллер ATMega8, так как он дешев и легкодоступен. Браво, Игорь! :)
Затем настало время для исследования реализации микропрограмм HID (Human Interface Device – Устройство Взаимодействия с Человеком) прим. перев.). После этого понадобилось также поглубже копать в спецификациях USB – так как реализация прерываний USB не была включена устройство Игоря. После интенсивной ежевечерней работы в течение пары недель мне удалось заставить работать этот контроллер

Аппаратные средства
Аппаратная часть контроллера минимальна для того, чтобы самодельщики-электронщики-любители с небольшим опытом могли бы повторить его и построить супер-джойстик самим. Основной мозг - микроконтроллер ATMega8 в DIP-корпусе с 12MHz кварцевым резонатором. Несколько резисторов и конденсаторов – все, что нужно для того, чтобы он заработал. Схематическая диаграмма показана ниже:
null
филтрующие конденсаторы. Обычно они по 0.1мкф. Паять их надо у самих ножек питания микросхемы. Правда у меня стоит только один
Соединить контроллер с датчиками и кнопками джойстика очень просто. На моих схемах показаны потенциометры, но это могут быть также и некоторые другие типы датчиков положения оси - магнитные, оптические и другие. Я также работаю над подключением этого контроллера к моему модифицированному шлему UR Gear. (Привет Бораде! :) - прим. перев.) Также я покажу некоторые альтернативные конфигурации аппаратной и программной части джойстика. АЦП-входы в этом проекте получают напряжение от 0 до 5 вольт как полный диапазон. Но возможны и меньшие диапазоны напряжений.
Контроллер не имеет готового дизайна печатной платы, и вам нужно создать свой собственный. Или, может быть, я сделаю это немного позже, когда у меня появится хотя бы немного свободного времени, которого я никогда не имел. :) Я использовал часть простой уже просверленной готовой печатной платы с простыми проводными соединениями компонентов:
null

Один разъем - для USB-коннектора, второй - для программирующего адаптера ISP (как я понял, Atmel-овский программатор для микроконтроллеров - прим. перев.). Я знаю, что контроллер выглядит не очень красиво, но он работает. Я буду очень благодарен тому, кто смог бы создать печатную плату и выслать мне один кусочек. :) (видимо, образец печатной платы? прим. перев.)
Программное обеспечение
Все необходимое программное обеспечение зашито в микроконтроллер. Никаких дополнительных драйверов Windows не нужно. Спасибо HID-классам. Разработка и сборка сделаны с использованием AVR Studio 4. Самые главные части обработки протокола USB остались от микропрограммы Игоря. Были добавлены дополнительные программы: обработки специфического дескриптора HID, обработки прерываний, получение данных джойстика, через АЦП и кнопки и упаковки этих данных в сообщения длиной 8 байт. Некоторые ненужные подпрограммы были удалены.
Версия программного обеспечения, опубликованная здесь, предназначена для одной из возможных конфигураций джойстика. Это 24-хкнопочный джойстик с 6 осями и 8-позиционным хэтом:
• 2 x 10-битных АЦП для осей X, Y
• 1 x 8-битный АЦП для оси Throttle
• 1 x 8-битный АЦП для оси Rudder
• 1 x 8-битный АЦП для оси Slider
• 1 x 8-битный АЦП для оси Dial
• 1 x 8-позиционный хэт (использует 4 кнопки)
• 24 кнопки
• PD7-PD3, PD7-PD4, PD7-PD5, PD7-PD6
Используются почти все входные ресурсы данных, доступные в микроконтроллере ATMega8 в DIP корпусе. Если у вас есть микроконтроллер ATMega16 или старше, вы может иметь даже больше осей и кнопок. Файл проекта AVR Studio 4 с исходным кодом и собравший двоичный код для этой версии диспетчера - здесь: MJoy_v1.1.zip
Имеется огромное количество других возможных конфигураций. Если вам нужна заказная конфигурация, вы можете построить собственный контроллер. В следующей главе я опишу, как это сделать.
Установка
Установка выполняется просто – включите устройство в USB-порт компьютера. Операционная система должна обнаружить устройство и установить его как джойстик. Вы можете найти ваш USB-джойстик среди игровых устройств - он появится как "MJoy":




Тестирование проводилось на компьютерах с Windows 2000 и Windows XP. Этот контроллер не имеет функции автоматической калибровки. Но эта функция может быть добавлена в будущем. В данный момент вам может понадобиться откалибровать этот джойстик, используя стандартную процедуру калибровки джойстика в Windows.
Что нужно, чтобы создать заказную конфигурацию джойстика
Я не копал глубоко реализацию Игоря, так что Вы можете прочитать его документацию и провести свои собственные исследования. Я попытаюсь описать свою часть и надеюсь, что это поможет Вам в создании собственной конфигурации джойстика. Для этого Вы должны быть немного знакомый со сборочными инструкциями (видимо, имеется в виду микроассемблер Atmega? прим. перев.) микроконтроллеров AVR. Программирование на языках более высокого уровня не пригодно, так как код Игоря содержит некоторое количество времязависимых подпрограмм. Максимальный верхний предел конфигурации - 64 бита для одного пакета данных, который необходимо использовать, чтобы упаковать все данные от вашего заказного контроллера. Это может быть консоль с 64 кнопками для элементов управления полетом, или аналог 8 x 8-битовых осей для управления шагом винта, закрылков или любых сочетаний между ними. Выбирать вам!
Другая возможность - использовать несколько пакетов с другими ID, чтобы пересылать столько фактической информации, сколько Вам необходимо. Недостаток в том, что интервал запроса самой низкой скорости пересылки пакетов данных – 10 мс. В том случае, если Вы переслали несколько пакетов данных циклическим способом, общий показатель опроса устройства должен уменьшаться. В представленной здесь реализации микроконтроллера есть 2 сообщения, которые возвращаются циклически. В результате этот джойстик имеет период опроса 20 мс.
Перечисление (enumeration) USB-устройств HID
Все USB-устройства начинают работать с Перечисления. После получения информации перечисления операционная система узнает, какие драйверы загрузить, чтобы быть способной использовать устройство. Для HID-устройств Windows имеются встроенные драйверы и никаких специальных драйверов не нужно. Все, что нужно - чтобы устройство возвращало дескрипторы, соответствующие спецификации микропрограмм HID.
Дополнительно к минимальным общим дескрипторам USB-устройства, необходимы дополнительные дескрипторы для минимального HID-устройства: HIDDescriptor и ReportDescriptor. Все эти дескрипторы находятся в конце исходного файла.
ReportDescriptor - основная структура, сообщающая тип данного джойстика и какие данные на входе. Если вы хотите разработать собственную конфигурацию, вы должны ознакомиться с этой структурой и понимать ее работу. Имеется спецификация и несколько примеров, из которых вы можете узнать, как получить то, что вам нужно. Пожалуйста, ознакомьтесь с документацией HID в части дескриптора Reports, чтобы быть способным создать значимую структуру. В утилите HID имеется файлы примеров нескольких часто используемых дескрипторов, которые помогут вам в этом.
В данной реализации, которая определяется, как использующий 2 пакета данных с ID 1 и 2. Размер пакета данных, возвращаемого каждым из них, определяется в JoystickReport1Size и JoystickReport2Size. Эти величины указывают размер каждого пакета данных.
В нашем случае ReportID1 имеет размер 8 байтов. Первый байт хранит ID сообщения. Следующие 7 байт информации хранят сведения о положении осей и хэта. ReportID2 содержит 5 - 1 для ID сообщения + 3 для 24 кнопок. Эти величины используются в подпрограмме ProcJoystickRequest, которая будет обсуждена позже.
После правки ReportDescriptor вы должны обновить величину ReportDescriptorSize до размера, равного структуре ReportDescriptor в байтах. Уделяйте этому особое внимание, когда Вы правите ReportDescriptor. Появление ошибки приводит к тому, что джойстик исчезает из списка джойстиков системы. Утилита тестирования HID честно говоря, не очень понимаю, где ЭТО находится и откуда растет :) – прим. перев.) также полезное средство для расчета размера дескриптора. Он может сообщить размер этого дескриптора, когда вы добавляете все поля в проект. Но, в конце концов, я привык пересчитывать их вручную прямо в процессе.
Также имеется другая важная область в EndpointDescriptor – интервал опроса. Вы можете определить собственную величину в диапазоне от 10 до 255. Это определит частоту опроса. По умолчанию (значение 10 миллисекунд) контроллер проводит опрос 100 раз в секунду. Но также вам необходимо помнить, сколько пакетов данных должен рассчитать ваш джойстик за период опроса.
Если Вы создаете собственную конфигурацию, вам нужно также скорректировать области VendorUSBID, DeviceUSBID и DeviceVersion. Вы можете также захотеть изменить строковое имя устройства, но, пожалуйста, оставьте авторские записи в VendorStringDescriptor. Это - для меня и для Игоря.
Сбор данных джойстика и форматирование пакетов данных
Вся входная обработка данных джойстика сделана в подпрограмме ProcJoystickRequest. Вам также может понадобиться модифицировать ее, чтобы она соответствовала ReportDescriptor, если вы создаете джойстик заказной конфигурации. Эта подпрограмма вызывается в свободное время между опросами данных. Сложность ее может повлиять на время опроса. Если она слишком сложная, вероятно, вам придется увеличить период опроса, как описано выше. Также имеет смысл отметить, что инструкции подготовки ввода некоторых АЦП и кнопок готовятся в подпрограмме сброса. Так, если Вы изменяете поведение некоторых выводов (микроконтроллера – прим. перев.), обратите на них внимание. Один из важных параметров - показатель деления предварительного делителя частоты АЦП (тут я как-то поплыл :) – прим. перев.). Он определяет, как быстро происходит преобразование АЦП. В данном проекте он равен 64, которые дает частоту 187khz для АЦП. Рекомендуемые разработчиками ATMega значения - вплоть до 200kHz для более точных измерений. В данной версии программное обеспечение считывает величины из всех АЦП вводит и считывает матрицу кнопок, используя все свободные выводы ATMega8. Два ветви обрабатывают Report1 и Report2, которые определяются в ReportDescriptor. Выборка идет в циклическом порядке. Есть процедуры, которые читают 10- или 8 битовые вводы АЦП. Входной параметр для них вводится в temp0, которое равно читаемому номеру вывода Порта C. Другая процедура читает ряды кнопок, используя порт D и выводы порта B. Все результаты заносятся в JoystickBuffer, используя структуру, определенную в ReportDescriptor.

Программирование контроллера
Контроллер программируется с использованием очень простого программатора. Я люблю использовать простые инструментальные средства для простых задач :).

Аппаратная часть программатора

Аппаратная часть очень проста:
null
Программное обеспечение программатора

Я использую PonyProg, чтобы программировать контроллер. Вы можете самую последнюю версию на этом website: http://www.lancos.com/prog.html

License and Copyrights
All information in this published document and all source codes is free for non commercial use.
All presented programs and source codes are under GPL licence (for non commercial use).

Copyright © Mindaugas Milasauskas 2004, Lithuania, www.mindaugas.com
Copyright © Ing. Igor Cesko 2003, Slovakia, www.cesko.host.sk , cesko@internet.sk

Прошивку и чертеж печатной платы вы можете скачать http://il2.my1.ru/load/3



Источник: http://forum.sukhoi.ru/
Категория: Конструкторское бюро | Добавил: il2 (17.08.2007)
Просмотров: 9276 | Комментарии: 16 | Рейтинг: 4.0/2 |

Всего комментариев: 9
9 AplusTrienue  
0
Уважаемые покупатели, рады объявить вам о начале оптовой продажи шин ROYALBLACK 12.00R20, 295/80R22.5, 315/80R22.5 и 7.00R16LT.

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

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

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

<a href=https://asiancatalog.ru>Оптовая продажа шин и дисков</a>
<a href=https://asiancatalog.ru>Шины для легковых автомобилей SPORTRAK</a>
<a href=https://asiancatalog.ru>Шины для грузовых автомобилей SPORTRAK</a>
<a href=https://asiancatalog.ru>Шины для спецтехники DOUBLECOIN</a>
<a href=https://asiancatalog.ru>Индустриальные шины LANVIGATOR</a>

Мы осуществляем доставку в город Златоуст, Калуга, Новороссийск или в любой другой город России.

Оптовая продажа шин и дисков в России и СНГ!
Мы поможем вам с выбором шин и дисков. Свяжитесь с нами по телефону или другим удобным способом для получения консультации.

Тел. +79644340397 (WhatsApp, Telegram, WeChat)

Эл.почта info@asiancatalog.ru

8 Pinokio  
0
R3-R8 какого наминала ??

7 Breenokef  
0
Очень красиво, работа собственная?

6 clehacearepay  
0
Спасибо, пост действительно толково написан и по делу, есть что почерпнуть.

5 viampiveree  
0
Да уж… Тут как говорится: Амбар крепок, да углы худы

4 ВАСЯ  
0
ХАХА БЛЯ, ВЕСЕЛЫЙ ПРИДУМЩИК ЕПТЭ))))))))))
МНЕ ВОН НВ www.daru-dar.ru джойстик подарили просто так а вы еще ет делаете))))))))
Не ну конечно молодцы что у вас руки до такова доходят)) прост мне лень чет паячть
А ТАК ВООБЩЕМ МОЛОДЦЫ, РЕСПЕКТ ВАМ РЕБЯТА!!)

3 DemonRBT  
0
День добрый
Интересная статья!
Подскажите пожалуйста можно ли заставить общаться мегу с другими программами ну что-чо типа вольтметра и тому подобного или просто диодиками моргать на разных ногах?Если не сложно пришлите исходник к прграмме на джстик.На чем писалась на asm или нет?
За ранее спасибо! cry

2 aleks  
0
Привет.
Тут кажется никто не обитает

1 Александр  
0
Здравствуйте

не подскажите как реализовать не только цифры а еще и курсор (вправо-влево-верх-вниз) на микросхеме ?
мне надо :
1. Через USB
2. Для игры , и желательно чтобы не требовалось никаких драйверов.

Нет ли у вас прошивки и схемы для микроконтроллера типа АТМЕГА 8535 или подобного (которые сейчас производяться) будет благодарен и признателен.

Александр
Орск
ICQ:394-092-168
8-922-620-71-40


Имя *:
Email *:
Код *:
Форма входа



Статистика


Copyright PornOServeR © 2024