View previous topic :: View next topic |
Author |
Message |
hanhao
Joined: 21 Mar 2007 Posts: 24
|
Noise handling algorithm in 8 wire touch screen |
Posted: Wed Apr 25, 2007 6:46 pm |
|
|
Noise handling algorithm in 8 wire touch screen
here's how a touch screen work http://focus.ti.com/lit/an/slaa298/slaa298.pdf
Problem:
when the touch pen is stationary on a point and reading ADC values from a touch screen using the micro controller, the ADC values are never the same
eg, 1st reading might be 500, 2nd reading is 510, 3rd is 505. This causes the the cursor to drift about the touch point, not something nice for the user . caps are already in place. it's a standard schematic so hardware shouldnt be a problem.
Proposed solution:
Now what i did was to create a boundary circle around the point, effectively locking all other bad readings into the circle.
but the problem is that
- for slow moving touch pen speed movements, due to this boundary circle, the cursor jumps from 1 circle to another. very ugly and it disallows slow movement.
- the size of the boundary circle has to be expanded when the touch screen wears out because of more noise
does anyone have a better solution?
thanks in advance
- hanhao |
|
|
hanhao
Joined: 21 Mar 2007 Posts: 24
|
Re: Noise handling algorithm in 8 wire touch screen |
Posted: Wed Apr 25, 2007 7:50 pm |
|
|
<double post>
Last edited by hanhao on Wed Apr 25, 2007 10:27 pm; edited 1 time in total |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1907
|
|
Posted: Wed Apr 25, 2007 8:22 pm |
|
|
What (if any) hardware filtering/conditioning is in place? If there is a hardware lowpass filter in place, what is the cutoff frequency? My gut instinct would be that lowering the cutoff frequency on this filter would stabilize the touch screen reading. A rough guess would be to shoot for a time constant (tau) = RC of about 70 milliseconds or so. That would still allow for near instantaneous reaction for the user (luckily humans aren't terribly swift). |
|
|
hanhao
Joined: 21 Mar 2007 Posts: 24
|
|
Posted: Wed Apr 25, 2007 9:13 pm |
|
|
newguy wrote: | What (if any) hardware filtering/conditioning is in place? If there is a hardware lowpass filter in place, what is the cutoff frequency? My gut instinct would be that lowering the cutoff frequency on this filter would stabilize the touch screen reading. A rough guess would be to shoot for a time constant (tau) = RC of about 70 milliseconds or so. That would still allow for near instantaneous reaction for the user (luckily humans aren't terribly swift). |
doubt i will be adding anymore hardware to handle the noise other than the caps because this is a standard schematic i m using from another nice working one |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1907
|
|
Posted: Wed Apr 25, 2007 9:26 pm |
|
|
The TI chip that you're using....do you have power supply decoupling capacitors to ground very near each Vdd pin? Is there supposed to be capacitors to ground on the touch screen sense lines? Is this a mock-up/prototype, or do you have everything mounted on a PCB? If so, does the PCB have a ground plane (internal or external or both)? Does your power suppy (Vdd rail) have sufficient capacitance attached to it? |
|
|
hanhao
Joined: 21 Mar 2007 Posts: 24
|
|
Posted: Wed Apr 25, 2007 10:26 pm |
|
|
newguy wrote: | The TI chip that you're using....do you have power supply decoupling capacitors to ground very near each Vdd pin? Is there supposed to be capacitors to ground on the touch screen sense lines? Is this a mock-up/prototype, or do you have everything mounted on a PCB? If so, does the PCB have a ground plane (internal or external or both)? Does your power suppy (Vdd rail) have sufficient capacitance attached to it? |
using a PIC micro controller, not a TI chip
this is not a PCB, it's a mock up self soldered setup
the proper caps are in place and routed near the chip. this is a standard schematic taken from another manufacturer so the hardware setup shouldnt be a problem at all. the noise measured at the pin side is about 40mV, about the same as the manufacturer's |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1907
|
|
Posted: Thu Apr 26, 2007 12:09 am |
|
|
The link you provided in the first post uses a TI chip to interface to the system, I assumed you were using it as well.
What is your algorithm like? I assume something like this:
- set outputs to measure x position
- set PIC a/d channel to match
- measure x position (voltage)
- set outputs to measure y position
- set PIC a/d channel to match
- measure y position (voltage)
- repeat
If this is kind of familiar, how long do you wait between setting the outputs and pic's a/d channel before you actually measure the voltage? Can you increase this time? You probably already know this, but you must allow for a settling/rest time between changing the a/d channel and actually starting an a/d conversion. Are you doing an 8 or 10 bit conversion? |
|
|
hanhao
Joined: 21 Mar 2007 Posts: 24
|
|
Posted: Thu Apr 26, 2007 1:09 am |
|
|
newguy wrote: | The link you provided in the first post uses a TI chip to interface to the system, I assumed you were using it as well.
What is your algorithm like? I assume something like this:
- set outputs to measure x position
- set PIC a/d channel to match
- measure x position (voltage)
- set outputs to measure y position
- set PIC a/d channel to match
- measure y position (voltage)
- repeat
If this is kind of familiar, how long do you wait between setting the outputs and pic's a/d channel before you actually measure the voltage? Can you increase this time? You probably already know this, but you must allow for a settling/rest time between changing the a/d channel and actually starting an a/d conversion. Are you doing an 8 or 10 bit conversion? |
thanks for your reply
currently i am not using the TI chip at all. I am only reading their document because it provides good explanation of touch screen's concept
yes i know that there should be a settling rest time due to mux switching on the pic chip. i set it to 250us, it's more than enough,and i confirmed this with an O scope. currently i am doing 10 bit conversion at level range of 0-1023 and in analog, it's 0V-5V |
|
|
SherpaDoug
Joined: 07 Sep 2003 Posts: 1640 Location: Cape Cod Mass USA
|
|
Posted: Thu Apr 26, 2007 7:27 am |
|
|
What if you calculate a new boundary circle based on the latest reading? If the old true point is within the new boundary circle you keep the cursor at the old point. If not then abandon the old point and move the cursor to the new point. _________________ The search for better is endless. Instead simply find very good and get the job done. |
|
|
hanhao
Joined: 21 Mar 2007 Posts: 24
|
|
Posted: Thu Apr 26, 2007 6:24 pm |
|
|
SherpaDoug wrote: | What if you calculate a new boundary circle based on the latest reading? If the old true point is within the new boundary circle you keep the cursor at the old point. If not then abandon the old point and move the cursor to the new point. |
thanks for your reply
i am not sure but that would be equivalent to defining a small boundary circle wont it? |
|
|
Douglas Kennedy
Joined: 07 Sep 2003 Posts: 755 Location: Florida
|
|
Posted: Fri Apr 27, 2007 6:22 am |
|
|
The issue is between a fixed point and a direction of movement. When fixed you have jitter which you don't want it interpreted as movement so you filter it out. When there is true movement you don't want the jitter to confuse the direction or overly delay the movement. Real movement has real direction that means for any x,y point the next point will be either x+d or x-d ,y+d or y-d where d is an integer representing the coarseness of movement that you can accept. When you get a reading outside your circle assume the direction is the line between the center of your circle and the new outlying point. You could then find the mid point of this line, move your display pointer to this point and use it as the next center for your jitter filtering. You could even have a start of movement latency...wait until you have confirmation of a movement of 2d away from your initial center ( first you detected a 1d movement then a further 1d the direction is either N,NE,E,SE,S,SW,W,NW if the original center 1d and 2d lie in these directions then move the point to the 1d step. I believe you'd do just as well with a box as a circle to filter your jitter...asumming your jitter is j any reading in the box x+-j or y+-j is considered jitter.This is equivalent to assuming the area has squares ( like pixels) that contain the jitter. If your reading moves from one "pixel" then you assume movement and draw a line between the old pixel and the new and move your pointer smoothly in smaller steps over to the new pixel. |
|
|
hanhao
Joined: 21 Mar 2007 Posts: 24
|
|
Posted: Mon Apr 30, 2007 5:12 am |
|
|
thank u all for your suggestions! i managed to solve the problem with an alternate averaging method without any hardware alterations |
|
|
|