Перейти к содержанию
    

ADS7843 помогите разобраться

Помогите, пожалуйста, примером кода, как работать с тачскрином 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)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь тач отвечает, но постоянно выдает координату Х 0xff, y-0x7f.Думаю, нужно оираться с настройками. Апока хотлось бы уточнить, в каком виде выдается напряжение и как оно соответствует координатам?

 

 

Изменено пользователем batisto4ka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и еще.Ноги SPI дрыгаются. Не могу подобрать скорость и настройки CPHA, CPOL. Подскажите, как для данного тачскрина настроить эти параметры

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поставив прескаллер 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

 

Как интерпретировать полученные данные?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще-то у самого тачскрина приличная емкость - порядка тысяч пикофарад и показания после касания устанавливаются единицы- десятки микросекунд, поэтому обычно читают показания Х и У пока разница между соседними не станет минимальной (обычно 2-3 единицы), кроме того - отбрасывают слишком большие или слишком малые показания, ибо на самых краях данные некорректны.

Данные получаются в условных единицах, где 255 - максимум (ну 479 по Х и 271 по У для вашего дисплея) ну или минимум, смот-

ря как подключено в плаге. И еще, замечено, что если время от времени не читать результаты Х-У просто так не дожидаясь

касания, PENIRQ может подвиснуть ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще-то у самого тачскрина приличная емкость - порядка тысяч пикофарад и показания после касания устанавливаются единицы- десятки микросекунд, поэтому обычно читают показания Х и У пока разница между соседними не станет минимальной (обычно 2-3 единицы), кроме того - отбрасывают слишком большие или слишком малые показания, ибо на самых краях данные некорректны.

Данные получаются в условных единицах, где 255 - максимум (ну 479 по Х и 271 по У для вашего дисплея) ну или минимум, смот-

ря как подключено в плаге. И еще, замечено, что если время от времени не читать результаты Х-У просто так не дожидаясь

касания, PENIRQ может подвиснуть ...

то есть, после срабатывания прерывания от penirq я читаю Х и У столько раз, пока пока разница между предыдцщим и текущим прочитанным значением Х не станет равна 2-3, и то же с У?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

то есть, после срабатывания прерывания от penirq я читаю Х и У столько раз, пока пока разница между предыдцщим и текущим прочитанным значением Х не станет равна 2-3, и то же с У?

У Стартеркита в примерах именно так - а у вас их нету,что ли , напишите им- пришлют на почту,

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

Изменено пользователем sherr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У Стартеркита в примерах именно так - а у вас их нету,что ли , напишите им- пришлют на почту,

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

а дайте пример,какой есть у вас. и пример стартеркита у вас есть?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Куда слать ? Нашел только свое для LPC2478 и экрана 800*480, но именно с ads7843 - предупреждаю -

код ужасный, постараюсь вечерком выдрать нужное, и чуть-чуть откомментировать ...

Изменено пользователем sherr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Куда слать ? Нашел только свое для LPC2478 и экрана 800*480, но именно с ads7843 - предупреждаю -

код ужасный, постараюсь вечерком выдрать нужное, и чуть-чуть откомментировать ...

ответила в личку

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите, пожалуйста, примером кода, как работать с тачскрином 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите драйвер в ядре Linux

http://lxr.free-electrons.com/source/drive...creen/ads7846.c

там можете найти полезные дефайны и пример как фильтровать "отскоки", но вам все равно нужно калибровать показания, можете тут посмотреть теорию

http://www.ti.com/lit/an/slyt277/slyt277.pdf

у AD где-то аппнот есть на эту тему. Вы настраиваете АЦП на 8 бит, а экран у вас 480x272 - лучше 12 бит использовать.

 

А может знаете, где найти этот апноут

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А может знаете, где найти этот апноут

наверно где-то тут тыц

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

наверно где-то тут

 

Не - не там :) http://www.analog.com/static/imported-file...tes/AN-1021.pdf

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...