16:13


Если у Вас есть информация по тематике сайта: схемы, опыт по ремонту и пр. Вы можете опубликовать в разделе "добавить статью" Все материалы будут размещены на страницах данного сайта.
Каталог статей
меню

Профиль
Гость


Группа:
Гость
Время:16:13

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!


Категории раздела
Измерения [11]
Звук [10]
Автоматика [10]
Интерфейсы [11]
Видео [1]
Программы [25]
Разное [15]
Для дома [8]
Источники питания [3]
Программирование [19]
STM32 [2]
ESP [0]
Как подключить? [8]

Облако тегов

Статистика





Мы вконтакте

Приветствую Вас, Гость · RSS 25.04.2024, 16:13

Главная » Файлы » Интерфейсы

Подключаем 7" ёмкостной тачскрин

   Всех приветствую. В наши дни очень много людей занимаются любительской электроникой, создают разные девайсы, полезные технологичные устройства которые приносят пользу своим создателям. Рынок электроники этому сопутствует, в продаже много модулей и компонентов что не может не радовать заядлого электронщика. Я тоже люблю разработку, пощупать что то новенькое, поломать голову над тем то что может пригодится в будущих проектах. И как то один хороший человек подтолкнул к идее разобраться с емкостным тачскрином. Они большое применение получили в различной современной технике в частности в планшетах, телефонах, почему бы не применить и в наших устройствах. 
  И вот, в руки мне попал подопытный 7" тачскрин от планшета. Он построен по проекционно-емкостной технологии и позволяет определять более одной точки прикосновения так называемая поддержка мультитач. По внутренней стороне стекла тачскрина расположены электроды, через которые контроллер подает постоянные сканирующие импульсные токи. При прикосновении к сенсорному слеклу, происходит утечка токов которые регистрирует и анализирует микроконтроллер GSL1680.



   Если с самим стеклом все просто, то с контроллером GSL1680 пришлось разбираться и немного повозится. Вся суть проблемы заключалась в документации, которая просто отсутствовала. Поиски в инете привели к скудному ознакомительному даташиту, в котором ничего полезного нет. С живого планшета была скопирована схема подключения стекла к контроллеру. Резисторы R1 и R2 для выбора напряжения подтяжки интерфейса.



И единственно что немного помогло в разборе регистров, это небольшое описание на страничке Linux_соидов и мой небольшой реверс-инжиниринг с помощью логического анализатора.



   Сопоставив информацию с протоколом анализатора стала прояснятся работа чипа. Существенным недостатком этого чипа стало то, что прошивка в него подгружается из вне. Что при применении с слабыми на память МК существенно ее отнимает. В данный момент она занимает 20к флеш памяти. Единственным выходом из этой ситуации думаю будет подключение дополнительной внешней флеш памяти, с последующей выгрузкой из нее прошивки. 

Из собранной информации стало известно о регистрах:

0x00-0x7F : эти регистры используются для загрузки частей прошивки
0x80: содержит количество касаний на экране. 
0x84-0x87: содержит координаты для первого касания.
0x88-0x8B: содержит координаты для второго касания.
0x8C-0xAB: содержит координаты для третьего, четвертого и т. д. (До пяти в некоторых устройствах, до десяти в других).
0xE0: STATUS регистр
0xE4, 0xBC-0xBF: какие-то контрольные регистры. Необходимые для загрузки прошивки и программного сброса микросхемы (о них больше нет данных).
0xF0: PAGE регистр. Содержит номер страницы памяти, отображаемой в данный момент в регистрах 0x00-0x7F..

Инициализация чипа:
  • Установить Shutdown в 1
  • Сброс чипа
  • Включить чип 
  • Сброс регистров
  • Загрузить прошивку 
  • Включить чип 
  • Задержка 15 мс
  • Сброс чипа
  • Задержка 20 мс
  • Включить чип 
  • Задержка 70 мс

Формат возвращаемых данных:

Четыре байта каждой группы координат содержат значения X и Y, а также идентификатор прикосновения.
Первые два байта в формате с прямым порядком байтов содержат координату X в 12 младших битах. Два других байта содержат координату Y в 12 младших битах. 4 старших бита в координате Y содержат идентификатор пальца, который коснулся.

Пример:

   Допустим, пользователь касается экрана одним пальцем. Регистр 0x80 будет содержать 1, а регистры 0x84 - 0x87 будут содержать координаты X и Y, и идентификатор.
Причем старший байт по X будет находится в регистре  0x85, а младший в 0x84. По Y старший в 0x87, младший 0x86.

   Если пользователь, не убирая первый палец, касается экрана вторым пальцем. Регистр 0x80 будет содержать 2. Регистры от 0x84 до 0x87 будут содержать координаты X и Y первого касания, а идентификатор пальца в них будет 1. Регистры 0x88 до 0x8B будут содержать координаты X и Y второго касания и палец Идентификатор в них будет 2.
   Теперь пользователь убирает первый палец, оставляя второй. Регистр 0x80 будет содержать 1. Регистры от 0x84 до 0x87 будут содержать координаты X и Y, но идентификатор пальца будет равен 2, потому что это палец, который остается на сенсоре.

На основании всех данных была написана библиотека функций и программа для теста в среде BascomAVR.



Shutdown alias Portd.5 : Config Shutdown = output : Shutdown = 1
IRQ alias Portd.2 : Config IRQ = input : IRQ = 1

Const debugs = 1                                                                     'информация отладки
Const Touch_enable = 2                                                          'колличество одновременных прикосновений 1-5
$include "Lib_GSL1680v3.bas"
'------------------------------------ int0 -------------------------------------
Config Int0 = Rising
On Int0 Isr_int0
'------------------------------------ I2c --------------------------------------
Config Sda = Portc.1
Config Scl = Portc.0
Config I2cdelay = 1
I2cinit
Waitms 50
'------------------------------------- INIT ------------------------------------
Gosub GSL1680_Init
'------------------------------------- MAIN ------------------------------------

Print "---- Touch GSL1680 test -----"
Enable Int0
Enable interrupts

Do
   Idle
Loop

End
'-------------------------------------------------------------------------------

Isr_int0:

   GSL1680_dataread
   Print "In touch " ; Ntouch

   if Ntouch > 0 then

      for bTemp = 1 to Ntouch
         print "id=" ; Finger_ID(bTemp);
         print " X=" ; Coords_X(bTemp);
         print " Y=" ; Coords_Y(bTemp)
      next

Return

'-------------------------------------------------------------------------------
$include "FW_data_GSLX680 v3.bas"


   Единственное с чем не разобрался, так это с идентификатором. По непонятным причинам он выдает не корректные значения.  Буду признателен в какой либо помощи.. 

Всем успешного использования. 
Для скачивания файлов:
Войдите или Зарегистрируйтесь


[ Сообщить о нерабочей ссылке ]
Категория: Интерфейсы | Добавил: Yuriy | Теги: GSL1680, сенсорное стекло, тачскрин, touch screen
Просмотров: 2474 | | Рейтинг: 5.0/2
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Поиск Datasheet


Топ пользователей
Yuriy
Добавил статей: 72
Количество постов: 54

Sanyok
Добавил статей: 5
Количество постов: 0

snyfer
Добавил статей: 4
Количество постов: 2

4RESTER
Добавил статей: 1
Количество постов: 0

Аватар не выбран Arses
Добавил статей: 1
Количество постов: 0


Новое на сайте

 Bootloader


 LG FLATRON E2350V-PN


 Аудио Модуль USB TF Рад...


 Битовые операции И, ИЛИ...


 Учебник DipTrace для на...


 Samsung LE32R81B


 Коды ошибок


 Заправка и сброс картри...


 Сервисное меню телевизо...


 Изучаем Arduino - инст...


 Микросхемы EEPROM


 500 схем для радиолюбит...


 302 новые профессиональ...


 Сварочный инвертор. Тео...


 В копилку радиолюбителя


 В копилку радиолюбителя...


 Видеокарта GeForce 210


 Видеокарта Nvidia Gefor...


 Пульт для Сhallenger ch...


 Ноутбук Acer MS2277


 Осциллограф С1-65а



На форуме

БП ATOM IPS


Манчестер кодирование


Меню BAS


Контроллер теплых полов


Програмный Uart для BOO...


Простое шифрование данн...


433Mhz TX & RX



Опрос
Носителями какого заряда являются электроны?

Всего ответов: 43

Галерея

Copyright Elektron © 2024

Яндекс цитирования Проверка PR и ТИЦ