Joystick на AT91SAM7

Вступ

Сталося так, що мій малюк, як і годиться хлопчикові, захоплюється машинками. Коли він підріс до 5 років почав грати в симулятор Master Rally. Грати одному не цікаво, тому я став брати в цьому участь. Дуже скоро стало зрозуміло, що дискретне управління з клавіатури не дозволяє мені в рівній мірі конкурувати і боротися за перемогу. Тоді я подумав про друге кермо.

Виявилося, що кожен раз діставати і встановлювати 2 керма - непроста і дуже набридлива процедура. Тому я вирішив купити джойстик пістолетного типу - як для управління радіокерованими машинками.

Пошукавши в інтернеті, я зрозумів, що такі не виробляються і не продаються. Оскільки я вже був добре знайомий з контролером AT91SAM7, я вирішив швиденько зробити USB джойстик на його базі, використовуючи найпростіший джойстик від старої радіокерованої іграшки. Ця стаття описує як це зробити. Я вже рік користуюся, але ось вирішив поділитися.

Що використовувати?

Джойстик зроблений на базі налагоджувальної плати фірми Olimex. Детальніше про цю плату можна почитати в цьому документі.

Ще нам знадобиться джойстик від якоїсь старої радіокерованої іграшки і USB кабель. Ось що вийшло у підсумку. Всередину стандартного джойстика з 3 кнопками і двома світлодіодами була додана зневаджувальна плата. Найскладнішим елементом конструкції виявилося з'єднання курка зі змінним резистором R1. (Див.) Тут я використовував резистор з нелінійною характеристикою, щоб отримати більшу зміну опору при невеликому вугіллі повороту.

Спочатку поворотна пружинка на кермі була відсутня (Резистор R2). Але практика показала, що при цьому керувати складно, оскільки пальці не відчувають поточне положення керма, що призводить до порушення тактильного зворотного зв'язку між кермом і людиною. На фото нижче видно, як встановлена пружинка.

Схема

Ось така вийшла схема:

Потрібно додати, що змінні резистори можуть бути від 1 до 15 кОм, і бажано з лінійною характеристикою для керма, для газу і гальма - за бажанням. Спочатку я поставив старий дротяний (як я вважав більш надійний) резистор на кермо, але через пару місяців він здох, тому був замінений на звичайний імпортний, який виявився надійнішим. Світлодіод VD1 проблисковий, він блимає короткими спалахами, якщо пристрій успішно підключився до комп'ютера. VD2 загоряється при включенні кнопки S3.

Software

Для написання програми використовувалися приклади з диска фірми Atmel, що знаходяться у вільному доступі в інтернеті. Ось тут можна знайти проект. У цьому проекті лежить робочий бінарник для версії AT91SAM7S256. (\Mouse\FLASH\Exe\USB.bin) Його можна безпосередньо залити в контролер. Для версії S64 бінарник безпосередньо при написанні блогу не перевірений. Бажаючі повозитися або щось змінити можуть встановити собі середовище IAR Systems і побалуватися. Гідність проекту - він не вимагає спеціального драйвера за Windows XP або 7, підхоплюється системою як стандартний джойстик. Якщо бажаєте, ви можете змінити кількість кнопок та осей. Контролер містить 8- канальний АЦП і багато портів. Для програмування контролера через USB порт потрібно використовувати програмку SAM-BA 2.15. Вся інформація і це програмка доступні на сайті компанії Atmel.

COM_SPPAGEBUILDER_NO_ITEMS_FOUND