martin2250 / ADCTouch

touch sensing library for Arduino
MIT License
100 stars 24 forks source link

t13 has different ADMUX than tx5 #7

Open nerdralph opened 4 years ago

nerdralph commented 4 years ago

The tiny13 only has 2 mux bits, not 4. I'm guessing the code has not been tested on the t13. as it won't work unless ADC1 (PB2) happens to be grounded. https://github.com/martin2250/ADCTouch/blob/master/src/ADCTouch.cpp#L24

martin2250 commented 4 years ago

Hi Ralph,

thanks for bringing this up. I never had a chance to test this on the various AtTinys, support on the tiny13 is a contribution by @UriShX I'll ask him to investigate this as I currently don't have the time or hardware required.

Martin

UriShX commented 4 years ago

Hi Ralph, Martin,

I have it currently working on a tiny13a in a circuit with PB2 left floating, since I also use it for SCK, and I am detecting touch on PB3. I found that as long as the power to the circuit is over 3V, detection works quite well for the purposes I used it.

I realize that the intent of line 24 is to ground the pins and discharge the s&h cap. I simply did not understand at the time the importance of that. I will investigate further, perhaps give the t13 its own definition, like: #if defined(__ATtiny13__)
// charge s&h cap
pinMode(digitalPin, INPUT_PULLUP); // set ADMUX ADMUX = (ADMUX & 0xF0); // set pin as output, then set value to high, then low. acc. to TDS section 10.2.3 Switching Between Input and Output pinMode(digitalPin, OUTPUT); digitalWrite(digitalPin, HIGH); digitalWrite(digitalPin, LOW); // set pin as input without charging s&h cap again pinMode(digitalPin, INPUT); #endif

Uri

nerdralph commented 4 years ago

I did some experimentation with the technique, and got the best results by:

  1. ground the touch pin with ADC enabled to discharge the ~10pf S/H cap.
  2. disable ADC & charge touchpad
  3. enable ADC and take a reading after the charge is equalized

Here's the prototype code: https://github.com/nerdralph/nerdralph/blob/master/avr/adctouch.c

Since the t13's ADMUX setttings are a subset of the tx5, it should work the same on the tiny 25/44/85.