|
Калибровка резистивного тачскрина 7 дюймов |
|
|
|
Oct 22 2017, 17:50
|
Знающий
   
Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231

|
Здравствуйте. Нужна помощь в калибровке резистивного тачскрина 7 дюймов. У кого есть опыт, помогите разобраться, в чём ошибка. Тачскрин опрашиваю через XPT2046, мк STM32. Бьюсь над проблемой уже 3-ю неделю.
Немного истории и суть проблемы: Вначале проект был на LCD 3.2 дюйма (разрешение 320 x 240). Калибровка была по 3-м точкам. Работало идеально, хоть от пальца, хоть от стилуса.
Дальше проект перешёл на LCD 5 дюймов (разрешение 800 x 480). Возникло 2 проблемы: 1-ая это калибровки по 3-м точкам стало не хватать, решение - сделал калибровку по 9-ти точкам (чтоб больше не возвращаться к этому вопросу); 2-ая это пришлось учитывать степень нажатия на экран, т.е. читать z1 и вводить поправочный коэффициент для разных областей экрана (хватило 4-х областей). Стало работать тоже идеально. И думал, что вопрос закрыт.
Дальше проект перешёл на LCD 7 дюймов (разрешение 800 x 480) и тут с тачскрином застрял. Он не калибруется должным образом. Чем дальше удаляться от центра экрана, тем курсор имеет большую погрешность (калибровка по 9-ти точкам), по разным краям разную. Причём тачскрин по краям имеет большой разброс сопротивления, если считывать код АЦП, то разница составляет от 100..300 единиц минимум по одной оси. Силу нажатия нужно учитывать ещё больше, для этого снял в калибровочных точках координату z1 и считаю, какая должна быть z1 для каждой координаты. Но всё это не даёт хороший результат.
Подключал 5-ти и 7-ми дюймовый экран к GPS навигатору, шлейфы у них одинаковые, на навигаторе WinCE,работают абсолютно одинаково, с одной и той же калибровкой. Но там не отображается курсор, но в пиктограммы всё чётко попадает, лишь на совсем крайних точках нужно больше давить на экран. На навигаторе калибровка по 5-ти точкам.
|
|
|
|
|
 |
Ответов
|
Oct 22 2017, 21:42
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Читать это. По 5 точкам: CODE #define POINT_QTY 5
typedef struct { Int32U x; Int32U y; } tPoint;
typedef struct { Flo64 alfa_x; Flo64 beta_x; Flo64 delta_x; Flo64 alfa_y; Flo64 beta_y; Flo64 delta_y; } tFactors;
void FactorsCalc(tPoint *s, tPoint *t, tFactors *factors) { Int8U j; Int64U a=0, b=0, c=0, d=0, e=0, X1=0, X2=0, X3=0, Y1=0, Y2=0, Y3=0; Int64S D, Dx1, Dx2, Dx3, Dy1, Dy2, Dy3; for(j=0; j<POINT_QTY; j++) { a+=t[j].x*t[j].x; b+=t[j].y*t[j].y; c+=t[j].x*t[j].y; d+=t[j].x; e+=t[j].y; X1+=t[j].x*s[j].x; X2+=t[j].y*s[j].x; X3+=s[j].x; Y1+=t[j].x*s[j].y; Y2+=t[j].y*s[j].y; Y3+=s[j].y; } D=n*(a*b-c*c)+2*c*d*e-a*e*e-b*d*d; Dx1=n*(X1*b-X2*c)+e*(X2*d-X1*e)+X3*(c*e-b*d); Dx2=n*(X2*a-X1*c)+d*(X1*e-X2*d)+X3*(c*d-a*e); Dx3=X3*(a*b-c*c)+X1*(c*e-b*d)+X2*(c*d-a*e); Dy1=n*(Y1*b-Y2*c)+e*(Y2*d-Y1*e)+Y3*(c*e-b*d); Dy2=n*(Y2*a-Y1*c)+d*(Y1*e-Y2*d)+Y3*(c*d-a*e); Dy3=Y3*(a*b-c*c)+Y1*(c*e-b*d)+Y2*(c*d-a*e); factors->alfa_x=(Flo64)((Flo64)Dx1/(Flo64)D); factors->beta_x=(Flo64)((Flo64)Dx2/(Flo64)D); factors->delta_x=(Flo64)((Flo64)Dx3/(Flo64)D); factors->alfa_y=(Flo64)((Flo64)Dy1/(Flo64)D); factors->beta_y=(Flo64)((Flo64)Dy2/(Flo64)D); factors->delta_y=(Flo64)((Flo64)Dy3/(Flo64)D); }
void Correction(tPoint *corrected, tPoint *adc, tFactors *factors) { corrected->x=(Int32U)(factors->alfa_x*adc->x + factors->beta_x*adc->y + factors->delta_x); corrected->y=(Int32U)(factors->alfa_y*adc->x + factors->beta_y*adc->y + factors->delta_y); }
Сообщение отредактировал IgorKossak - Oct 23 2017, 07:46
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
--------------------
Делай что должен и будь что будет.
|
|
|
|
Сообщений в этой теме
Rash Калибровка резистивного тачскрина 7 дюймов Oct 22 2017, 17:50 mantech Цитата(Rash @ Oct 22 2017, 20:50) Здравст... Oct 23 2017, 11:48 Rash skripach, У меня подобный алгоритм только для 9-ти... Oct 23 2017, 19:08 mantech Цитата(Rash @ Oct 23 2017, 22:08) Точност... Oct 23 2017, 20:15 skripach Цитата(Rash @ Oct 23 2017, 22:08) skripac... Oct 24 2017, 07:44 Rash 3 - 5 мм это много, если нажимать стилусом. У меня... Oct 23 2017, 21:06 mantech Цитата(Rash @ Oct 24 2017, 00:06) 3 - 5 м... Oct 24 2017, 14:59 Rash skripach, смотрите AN-1021.
В 5-ти дюймовом края ... Oct 24 2017, 20:27 mantech Цитата(Rash @ Oct 24 2017, 23:27) Ёмкостн... Oct 25 2017, 05:57 Rash Может быть и полно, но мне как то не попадались. Д... Oct 25 2017, 06:28 sadat Цитата(Rash @ Oct 25 2017, 09:28) Может б... Nov 1 2017, 15:01  mantech Цитата(sadat @ Nov 1 2017, 18:01) Я фильт... Nov 1 2017, 17:38   sadat Цитата(mantech @ Nov 1 2017, 20:38) В смы... Nov 2 2017, 09:43 Rash Цитата(sadat @ Nov 1 2017, 19:01) ... Там... Nov 4 2017, 21:23
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|