Open nerdralph opened 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
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
I did some experimentation with the technique, and got the best results by:
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.
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