For a production app though, I expect that tolerances, temperature and
other environmental variations, would vary the detection threshold
from one product to another. First thought to correct this is to
detect the baseline value on startup and use that from then on, but I
expect there may be drift over time...???
The eraser-head "mouse" on my laptop obviously has some strategy for
auto-zeroing itself due to drift (any constant value for ~5 secs must
be zero), so I can steal some ideas from that. But then again, the
eraser head has incorrectly thought my finger leaning on it was zero
(and it happens quite often).
Are there any other strategies for this? I do expect some parameters
in any strategy will depend on expected usage (how long a user may
hold down a switch etc), but looking for general strategy concepts at
this point.
Cheers,
-Neil
--
http://www.piclist.com PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist
Hey Neil,
Touch sensors/screens are what I do for a living, but I use the
Cypress PSoC instead of PIC.
Changes in temp, EMI, etc. will cause the signal to drift over time.
Check out the Cypress documentation on their Capsense CSD
(http://www.cypress.com/?rID=3122), look in the Appendices for good
baseline behavior.
Quick summary: use at least a 1 cycle debounce to suppress any errant
noise spikes. Cypress snaps the baseline down to the raw signal level
after X cycles (usually after about a second, this solves the finger
on button at startup issue). For a raw signal that is rising (e.g. a
touch), they use what they call a "bucket" method. They add some
proportion of the difference between the raw and the baseline to this
bucket. When the bucket overflows (or reaches some maximum threshold),
the baseline is then incremented. They simply shift right one to
divide the diff by two (if the diff is larger than 255, they simply
add 127 to the bucket). This gives a logarithmic behavior to the
baseline. The speed that the baseline rises can be controlled via the
maximum threshold of the bucket. The only issue this has is that if a
finger is on the sensor for a long period of time, it will deactivate.
However, this solves a "stuck key" condition.
If you have more questions, ask!
-Scott
Cheers,
-Neil.
:: First thought to correct this is to
:::: detect the baseline value on startup and use that from then on,
:::: but I
:::: expect there may be drift over time...???
If you download the firmware for the Pic24 Starter Kit (which has a 4
button touch panel) this has some code that might be helpful.
WARNING:
Much of the Microchip code doesn't make sense, it refers to variables that
I've never been able to find - and won't compile if taken and put directly
into a new project - but does compile if left in the original workspace.
I imagine my baseline heating profile code would work for setting up a
baseline cap sensing value - with the minor alteration of reading the
capsense register rather than an external temperature sensor.
It does lurk somewhere here in posts about two years ago- I can scribble it
down again if you want.
Colin
--
cdb, co...@btech-online.co.uk on 14/06/2010
Web presence: www.btech-online.co.uk
Hosted by: www.1and1.co.uk/?k_id=7988359
One strategy I have used before is to catch the baseline (finger out of
physical range) and maintain a running average. If you can store 8 values,
do that, dropping off the oldest value and using the newest. Then the
average of the 8 values is kept as the baseline. This should include ALL
variables, including Rvsalues, heat, cold, etc.
--Bob