7-inch touchscreen: really ugly jitter normal?

Heseltine
Hello all,
I have a FriendlyARM micro2440 equipped with a 7-inch touchscreen (the
standard one, AT070TN83). Having played a little with the touchscreen using
Qt embedded, I couldn't help but notice that the screen isn't that great
when being used with a finger. 

Unless I press my finger down really hard (unnaturally hard, I might say),
I can see that the mouse pointer dances around across half the screen while
I move the finger. For example, touch the screen somewhere in the
(vertical) middle near the left border and move slowly to the right, the
mouse pointer follows my finger horizontally, but jumps up and down
erratically, as far up as the upper border of the screen.

Is this normal? Do all A70 touchscreens behave this way? Or must it be a
defective touchscreen, or perhaps a configuration problem? The ts.conf
looks like this 

module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

and of course, I calibrated the touchscreen beforehand using ts_calibrate
(multiple times, in fact). I'm using the Pengutronix BSP distribution as
OS, by the way. 

Best regards
Michael

Heseltine
Hello again,
one more detail of my touchscreen problems: there also is the problem that
the mouse pointer points to the correct place on the screen as long as the
finger is pressed onto the screen - but as soon as I lift the finger, the
pointer jumps up 100 pixels or more. Has anybody else ever seen this
behaviour? 

Thanks again, Michael.

TheRegnirps
There might be something pushing against the touch pad in the frame. I
would take it apart and make sure there is nothing lodged along the edge of
the white bezel. Also check for a bump in the plastic and trim it off if
you find some.

The built in touch panel code that uses the Samsung A/D converters (2440
only) is not very good. The FriendlyARM 6410 and 210 use a high resolution
low noise A/D on the back of the LCD and a 1-wire interface. They are rock
solid.

Heseltine
I just took the whole thing apart, but there's nothing pressing down on
anything. Plus, even disassembled, the mouse pointer still jumps when I
press normally onto the touchscreen. 

I've just programmed a little test in Qt Embedded, where I covered the
whole screen with only three pushbuttons (800x160 pixels). When i press the
lowest button, almost always the right button is signaled as pressed, same
goes for the topmost button. But the one in the middle is recognized as the
topmost button roughly once every ten presses, because the mouse pointer
jumps way up just at the wrong time. 

I cannot easily change to the other FriendlyARM boards, so is there any way
to get the touch screen of the 2440 board? Is there perhaps another way to
connect this or another 7" touch screen to the board without too much
hassle? Can anything be done to the drivers to improve this? 

Any suggestions welcome, Michael.

laurent
Attachment: plugin-skip.patch.zip (2.25 KB)
Hi,

at first you may try the attached patch that add a plugin to tslib, namely
'skip'. Purpose is to skip x first and y last event of a touchscreen touch.
Those are the ones that makes the pointer jumps because when you press or
release the screen the pressure goes through a 'low pressure' step that
sends incorrect sensing. (sorry for my poor explanation, it's the best i
can do in english).

here is my ts.conf

module skip nhead=1 ntail=1
#module group radius=10 nbpoints=8 threshold=6
module variance delta=10
module dejitter delta=1000
module linear


you may want to play with nhead / ntail params

If things are not better, you may experiment with another plugin that i'll
post right under this one

btw, unwanted pressure on the screen is really disastrous (like explained
above by TheRegnirps). This was a nightmare to solve when mounting the
display in our own housing without the white bezel.


HTH,
Laurent

laurent
Attachment: plugin-group.patch.zip (2.86 KB)
here is the second plugin i talked about

It's purpose is to filter touch position so that x points on y consecutives
ones are inside a circle of radius z centered in the average of the x
points

so, if you put in ts.conf the following :
module group radius=10 nbpoints=8 threshold=6

It means, 6 out of 8 position must be in a circle of 10 pixels radius in
order to pass the position to the next filter other touches are discarded.

Don't use it to draw on screen as curves will become lines. Best is to
experiment with ts_test to see what i mean. This works pretty well for
buttons but requires a longer press time than would be required without
this filter. 
Usually if touchscreen is well calibrated, if skip filter is used and if
user is a bit used to the screen i don't need it.


good luck,
Laurent

laurent
sorry to pollute this post, but i thought you'd like to see a nice video
that i just remember we made not so long ago :

http://www.youtube.com/watch?v=ukcwKs43vRE&feature=plcp

Laurent

Heseltine
Hi Laurent, 
no, I understand completely what you're getting at - that's exactly what I
was witnessing. Thanks for the patches, I'm about to recompile tslib and
regenerate the rootfs from my Pengutronix BSP package to find out whether
that does the trick. Stay tuned for my report. :-) 

Thanks, Michael

Heseltine
Hello again,
unfortunately, I can't test any of the improvements you sent me - after I
patched the tslib-1.0 source that Pengutronix includes in its Board Support
Package, every Qt programm I try to start (with "-qws" as I have no X11
running) terminates in a "Segmentation fault" as soon as I add either of
the two above configuration lines to the ts.conf. 

Did I do anything wrong? Do I need to use a specific (different) version of
the tslib? 

Frustrated greetings, Michael.

laurent
Hi Michael,

I'm using ptxdist also.
Here is how i did :

1. copy /usr/local/lib/ptxdist-..../patches/tslib-1.0 to
/home/laurent/BSP/patches/tslib-1.0
2. also copy /usr/local/lib/ptxdist-..../patches/autogen.sh to
/home/laurent/BSP/patches/autogen.sh
3. update /home/laurent/BSP/patches/tslib-1.0/series to include
plugin-skip.patch and plugin-group.patch
4. ptxdist clean tslib
5. ptxdist go

this take long time because qt is recompiled also (as it depend on tslib).

HTH,
Laurent