Goal: hobbyist-friendly, hackable multitouch trackpad on Pi Pico/RP2040.
Motivation: as far as I know, if you want a truly hackable solution - that is, getting raw data out of your sensing matrix - you are SOL. Off-the-shelf ICs are typically bundled with filtering/gesture recognizing firmware, so good luck trying to implement your own gestures. And that just doesn't sit right with me.
Pathway: THANK FUCK the great folks at Saarland University, HCI Lab had done the ground work: https://hci.cs.uni-saarland.de/projects/multi-touch-kit/ Massive, massive kudos to them. So let's just take this and build off off that!
Basically, we're gonna build a mutual capacitance sensor, driving TX lines with a screaming-nasty 10MHz PWM, and listening on RX lines to read our matrix. And then do high-level filtering, interpretation, etc. in another library - or your own code! Go nuts.
Heya! So, in the spirit of sprinting so fast that I forgot all (two) rules of good PCB design that I ever knew, I sat down some time last week and drafted the very first PCB design for the project. Ain't she a beauty?
...I don't remember much of what has followed, but somewhere between 4 and 5AM I must've ordered it into production because mere 4 days later it showed up at my doorstep. Somewhere between those two events I started writing code for it, which is now up on the Github along with the schematic-PCB-notes and everything. Anyway, with the board all starry-eyed and begging to be soldered, felt only fair to oblige:
So I had the idea for this project for a whole of 3 days, and you know how sometimes you just... get an itch to do the thing... Well, yesterday I did the thing.
The thing was - run a single-cell button off my Pi Pico (okay, fine, it's Pimoroni's Pico Lipo - but it's pin-compatible so it still counts! And it still has the shitty ADC). I did that, and managed to see a swing of 0.8V - 1.6V between notouch-touch. nice.
Basically, this proves the concept - you CAN swing a line at 10MHz, 25% duty PWM (dear lord whomever made RP2040/'s IO deserves a medal, "PWM on any and all pins? Go for it, we gotchu."), then feed it into ADC, and read back measurable difference between the sensor being touched or not touched.