|
|
  |
ADS7843 помогите разобраться |
|
|
|
Aug 26 2012, 15:17
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Помогите, пожалуйста, примером кода, как работать с тачскрином ads7843e. Есть плата SK-WF43BTIBEDOTP-Plug. Там TFT с данным тачскрином. По примерам в нете настраиваю spi. В результате при касании к экрану срабатывает прерывание, настроенное на PENIRQ. Но при опрашивании координат всегда возвращается 0. Опрашиваю координаты командами 0х9С и 0хDC. Алгоритм такой: обработчик прерывания от PENIRQ устанавливает флаг TOUCH_FLAG.В основном цикле идет проверка флага и считывание координат х и у следующим образом: Код if (TOUCH_FLAG) { TOUCH_FLAG=o; Xpos=WriteSPI(SPI1,0x9C); Ypos=WriteSPI(SPI1,0xDC); }
// uint8_t WriteSPI(SPI_TypeDef *SPIx, uint8_t val) { SPIx->DR=val; while(!(SPI1->SR&SPI_SR_RXNE)); return SPI1->DR; } В качестве мастрева использую камень stm32f107vc(плата SK-mstm32f107)
|
|
|
|
|
Aug 27 2012, 14:00
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Поставив прескаллер SPI в 2, получаю следующие данные (1. при первой обработке прерывания, 2. при второй обработке прерывания): 1. Верхний правый угол: Код //Координата Х //1 k=WriteSPI(SPI1,0xDC);// k=0x4c k=WriteSPI(SPI1,0); //k=0xff k=WriteSPI(SPI1,0); //k=0 //2 k=0xee, k=0xf0, k=0 Координата Y: Код //1 k=WriteSPI(SPI1,0x9C);//k=0x0с, k=WriteSPI(SPI1,0); //k=0 k=WriteSPI(SPI1,0);//k=0 2. k=0xce, k=0xf0 k=0xf5 Нижняя правая точка: Координата Х 1. к=0x4c; k=0x40, k=0 2. к=0x6c; k=0, k=0xc0 Координата У: 1. к=0x0c; k=0, k=0 2. к=0x0c; k=0xff, k=0 Нижняя левая точка: Координата Х 1. к=0x4c; k=0, k=0xff 2. к=0xee; k=0, k=0xf5 Координата У: 1. к=0x0c; k=0, k=0 2. к=0xce; k=0, k=0 Верхняя левая точка: Координата Х 1. к=0xee; k=0, k=0 2. к=0xcc; k=0xf0, k=0 Координата У: 1. к=0xce; k=0xc0, k=0 2. к=0x8c; k=0xfc, k=0 Как интерпретировать полученные данные?
|
|
|
|
|
Aug 28 2012, 07:04
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Цитата(sherr @ Aug 27 2012, 21:30)  Вообще-то у самого тачскрина приличная емкость - порядка тысяч пикофарад и показания после касания устанавливаются единицы- десятки микросекунд, поэтому обычно читают показания Х и У пока разница между соседними не станет минимальной (обычно 2-3 единицы), кроме того - отбрасывают слишком большие или слишком малые показания, ибо на самых краях данные некорректны. Данные получаются в условных единицах, где 255 - максимум (ну 479 по Х и 271 по У для вашего дисплея) ну или минимум, смот- ря как подключено в плаге. И еще, замечено, что если время от времени не читать результаты Х-У просто так не дожидаясь касания, PENIRQ может подвиснуть ... то есть, после срабатывания прерывания от penirq я читаю Х и У столько раз, пока пока разница между предыдцщим и текущим прочитанным значением Х не станет равна 2-3, и то же с У?
|
|
|
|
|
Aug 28 2012, 07:13
|
Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955

|
Цитата(batisto4ka @ Aug 28 2012, 10:04)  то есть, после срабатывания прерывания от penirq я читаю Х и У столько раз, пока пока разница между предыдцщим и текущим прочитанным значением Х не станет равна 2-3, и то же с У? У Стартеркита в примерах именно так - а у вас их нету,что ли , напишите им- пришлют на почту, правда у них опросом в цикле, без прерывания ,,, у меня тоже их подобный код есть , но на stm32f4xx
Сообщение отредактировал sherr - Aug 28 2012, 07:14
|
|
|
|
|
Aug 28 2012, 07:23
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Цитата(sherr @ Aug 28 2012, 10:13)  У Стартеркита в примерах именно так - а у вас их нету,что ли , напишите им- пришлют на почту, правда у них опросом в цикле, без прерывания ,,, у меня тоже их подобный код есть , но на stm32f4xx а дайте пример,какой есть у вас. и пример стартеркита у вас есть?
|
|
|
|
|
Aug 28 2012, 10:17
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Цитата(sherr @ Aug 28 2012, 10:30)  Куда слать ? Нашел только свое для LPC2478 и экрана 800*480, но именно с ads7843 - предупреждаю - код ужасный, постараюсь вечерком выдрать нужное, и чуть-чуть откомментировать ... ответила в личку
|
|
|
|
|
Aug 28 2012, 10:43
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(batisto4ka @ Aug 26 2012, 19:17)  Помогите, пожалуйста, примером кода, как работать с тачскрином ads7843e. Есть плата SK-WF43BTIBEDOTP-Plug. Там TFT с данным тачскрином. Посмотрите драйвер в ядре Linux http://lxr.free-electrons.com/source/drive...creen/ads7846.c там можете найти полезные дефайны и пример как фильтровать "отскоки", но вам все равно нужно калибровать показания, можете тут посмотреть теорию http://www.ti.com/lit/an/slyt277/slyt277.pdfу AD где-то аппнот есть на эту тему. Вы настраиваете АЦП на 8 бит, а экран у вас 480x272 - лучше 12 бит использовать.
Сообщение отредактировал sasamy - Aug 28 2012, 10:44
|
|
|
|
|
Aug 28 2012, 19:33
|
Частый гость
 
Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997

|
Цитата(sasamy @ Aug 28 2012, 13:43)  Посмотрите драйвер в ядре Linux http://lxr.free-electrons.com/source/drive...creen/ads7846.c там можете найти полезные дефайны и пример как фильтровать "отскоки", но вам все равно нужно калибровать показания, можете тут посмотреть теорию http://www.ti.com/lit/an/slyt277/slyt277.pdfу AD где-то аппнот есть на эту тему. Вы настраиваете АЦП на 8 бит, а экран у вас 480x272 - лучше 12 бит использовать. А может знаете, где найти этот апноут
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|