Здравствуйте,
подключил дисплей SK-ATM0700D4-Plug к плате SK-MLPC1788.
Возникло два вопроса.
1) показания координат зависят от силы нажатия. Особенно проявляется в правой половине экрана. Т.е. данные уже отфильтрованы и стабильны при продолжительном нажатии с одинаковой силой. Но нажимая больше-меньше можно получить координаты одной и той же точки, например 170--220.
Частично я это решил опросом координаты Z. Но в отличие от ads7846, эта МС не выдаёт силу нажатия, а выдаётся какая-то нелинейная зависимость от координаты X, которую очень сложно скомпенсировать. Пока за счёт (Z) загрубил чувствительность нажатия.
2)
сильно (>60 C) греется МС DA3. Хотя запас до 85С точно есть, но даже дисплей с наружной части прогревается немного :)
DA3 - это DC/DC светодиодной подсветки, имеет право греться, хотя легко проверятся после изучения даташитов на дисплей в разделе "подсветка" и на чип, в разделах ТТХ и задающих делителей. 5 в на входе, остальное физика ~8 класс..
2) ну раз уж предложили взглянуть на даташит
по параметрам-то DC-DC проходит. Он рассеивает ~200мВт, , только зона рассеяния на порядок меньше нужной (по-сути только корпус и рассеивает). Оттого и греется.
но интереснее 1) Такое нормально для резистивных экранов и как с этим бороться?
вообщем, выяснилось, что МС, не такая, как в схеме и примере кода (ads7843), а tsc2046. Соответственно, код к ней нужен другой. Переписал, добавил в МК фильтрацию и компенсацию искажений, вроде сносно стало.
Конечно, помех много, но длина дорожек от шлейфа тача до МС больше 10 см, так что не удивительно. Конденсаторы С3-С6, правда, пока не запаивал.
ps просьба администрации, обновляйте хотя бы критическую информацию, а то название МС практически не читается, пришлось с этим разбираться.
хм.. у нас в изделии использован экран 800х600 с резистивным тачем, шлейф от экрана до платы ~8см, по плате еще 12см до контроллера тача еще через один разъем.. работает стабильно..
Ковыряюсь с отладкой на LPC4357, решил внимательней к чтению координат подойти.
Если честно, по началу даже не понял, в чем проблема первого поста, даже штатные прошивки дают нормальные координаты (без отскоков при отпускании в 50 точек).
В linux драйвер включен как 7843, никакого смещения координат при нажатии там не наблюдается ...
Потом заметил, если непрерывно читать координаты без фильтрации, тогда можно заметить, как координата "плавает" при нажатии.
Хорошо, вот думаю сейчас все сделаем по уму ...
Полистав внимательно доку и поставив несколько экспериментов, прихожу к выводу, что статистически надежно, ничем кроме как фильтрацией координаты не компенсировать ...
Да, можно измерить значение сопротивления между пластинами в точке контакта (которое прапорционально давлению).
НО!
В доке ни слова не говориться про то как с его помошью потом компенсировать смещение координаты.
Конечно, пытливый ум сразу подметит, что в принципе с его помошью можно пересчитать резистивные матрицы и ввести поправку в координаты ...
Может я и ошибаюсь, но страшно представить сейрийное изделие с такой коректировкой, кроме того что сами панели в десяток процентов имеют разбег сопротивления, сами резистивные панели могут попасть от партии к партии разные (по параметру сопротивления), думаю, по этой причине в документации скромно умалчивают возможную коректировку координат.
Пошел смотреть как в драйвере linux читают 7846, - банально читают и фильтруют X и Y без каких-либо корекций, только еще Rp выдают.
В общем, либо я что то упустил, либо Вы что то усложняете (это к компенсации по Z) ...
Во-первых, с конденсаторами C3-C6 работает значительно хуже (для 0,1 мкФ - подозреваю, это много :) ).
Во-вторых, от шумов полностью избавиться не удалось (всё-таки длинные дорожки).
Но с фильтрацией скачки в диаметре 3-4 мм меня устраивают. Можно ещё более жёстко фильтровать, в ущерб отзывчивости.
2 karloson2. Для самого драйвера МС разница в Z1 и Z2 вместо Z и формуле подсчёта.
Остальное - фильтрация.
pastebin.com/nUiAJs0m
z = ((x * z2) - z1) / z1;
if ((z > 40000) || (z == 0)) {
return 0; } // не нажато или слишком слабо