Показать сообщение отдельно
Старый 29.03.2013, 20:40   #1
zyxel812
Старший Пользователь
 
Регистрация: 18.02.2013
Возраст: 41
Город: Санкт-Петербург
Регион: 78, 98
Машина: e46
Сообщений: 163
zyxel812 is a name known to allzyxel812 is a name known to allzyxel812 is a name known to allzyxel812 is a name known to allzyxel812 is a name known to allzyxel812 is a name known to all
По умолчанию Контроллер резистивного сенсорного экрана, совместимый с Андроид.

Представляю вашему вниманию контроллер четырех проводного резистивного сенсорного экрана, выполненный на микроконтроллере ATmega32U4.
Сначала самое интересное, демонстрация:


Почему именно этот микроконтроллер, потому что это один из самых простых с аппаратным USB и аналоговыми входами. А так же, легко смог купить такую вот поделку: Dreamer Nano 4.0 за относительно не большую сумму (ну не очень я люблю травить платы)

Сенсорный экран подключайте к входам А0,А1,А2,А3 (на микроконтроллере это порты PF7, PF6, PF5, PF4 соответственно). А0 - Верхняя часть, А1 - правая часть, А2 - нижняя часть, А3 - левая часть.

Вот как это выглядит:

И с другой стороны:


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

Устройство представляется составным: виртуальный последовательный порт и сенсорное перо. Порт нужен только для калибровки. Утилита калибровки существует только под винду. Калибровочные коэффициенты сохраняются в памяти контроллера, поэтому калибруем на винде, затем втыкаем в андроид. В калибровочной утилите, коэффициенты автоматически не сохраняются в контроллер, нажимайте кнопку "Upload to device". При желании, цифры можно подредактировать вручную. Позже напишу что они значат и как вычисляются.
Обращаю внимание, что в винде курсор может и не двигаться, в Андроиде должно быть всё ок. Дело в том, что в отчете (HID report) который устройство передает в компьютер присутствуют два флага - прикосновение пером и прикосновение пальцем. Если передавать прикосновение и пером и пальцем, в винде все работает, в андроиде тоже, но мелкие элементы, такие как пункты меню, не реагируют на прикосновения. Если передавать только прикосновение пером, то в винде, по не выясненным пока причинам, перестает двигаться курсор, а в Андроиде всё прекрасно, в т.ч. и меню. Оставил пока по последнему варианту, так как для винды контроллеров и так хватает. В общем, еще предстоит разобраться, когда желание появится.

Чего имею еще сказать:
АЦП микроконтроллера слабоват, он 10-ти разрядный, но младшие разряды это практически шум, я откидываю два младших разряда и получаю 8-битное число для каждой координаты. Т.е. разрешение по каждой координате получается максимум 256. Да и при этом, младший разряд плавает, однако этого вполне хватает, чтобы попадать по клавишам экранной клавиатуры.
Можно принять меры по повышению точности как программные, так и аппаратные. Готов обсудить, если появятся заинтересованные знающие люди.
Это не совсем законченный проект, на данный момент достигнута та точка, после которой результаты можно использовать на практике. Поэтому всё не так красиво, как хотелось бы, но это работает.

UPD 03.05.2013: Обновил прошивку. Улучшился способ измерения позиции касания. Теперь каждая координата измеряется 10 раз и выбирается наиболее часто встречающееся значение, что значительно уменьшает влияние помех и дребезг (за данный способ спасибо AngelOfGrief).
При замкнутом выводе D2 (на контроллере вывод PD1) на землю, контроллер работает в режиме "винды", т.е. в винде курсор тоже будет двигаться. Для работы с Андроидом вывод лучше оставить свободным.
Откомпилированная прошивка, утилита калибровки и исходники теперь в одном архиве.

UPD 14.06.2013: Появилась инструкция по прошивке через bootloader. За что спасибо s.m.
UPD 26.08.2014: Протокол калибровки
UPD 16.04.2015: Прошивка любого Hex-файла в Arduino при помощи штатного загрузчика
Вложения
Тип файла: rar touch20130503.rar (761.4 Кб, 3728 просмотров)

Последний раз редактировалось zyxel812; 16.04.2015 в 21:45. Причина: Добавил ссылку на протокол калибровки
zyxel812 вне форума   Ответить с цитированием