By now I've realised that I forgot to add all the 20 diodes to make the charlie-plexed keyboard function. In the current arrangement there will be no way of telling if I have pressed the button connected to the 1-2 pins, or the 2-1 pins.
This basically made me choose between upscaling the SAML22 to the version that Joey Castillo is using for his amazing casio F91W replacement boards. I could also try to place twenty diodes all over the board. Or ten and do some crazy "check if both combinations are working or just one" firmware. In the end I used an IO expander that is dedicated to read keyboard matrices, got some TCA8418RTWR on aliexpress, as they're out of stock everywhere else.
Soon I will try to get the UF2 bootloader running on the watch and then start programming it via the USB socket. First I need to cut out room for the plug though :)
https://github.com/joeycastillo/uf2-samdx1
Little side note: Joey will soon start a crowdfunding campaign with his awesome project, find it here:
https://www.crowdsupply.com/oddly-specific-objects/sensor-watch
More on the project on the blog:
https://hackaday.com/2021/08/08/wristwatch-pcb-swaps-must-be-in-the-air/
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.
74922/3 FTW
Are you sure? yes | no
Aww...
Those kinds of mistakes always suck - they're just past the "I can easily fix this" portion, but still kinda in the "I want to try and get it working" range.
In any case, a dedicated button matrix IC sounds like a decent option. I think I used one once that had a lovely combination of button scanning + seven-segment driving, all in one chip.
Most button ICs should also have an interrupt line, so you could use that to save some power by sleeping the MCU!
Are you sure? yes | no
sounds like one of those fancy IS51 chips, I think I used one too :) I still have to find out if everything else checks out and only then I will work in the revisions and reorder.
Are you sure? yes | no
I wouldn't really call it "fancy"
For some reason, the default I2C address was... 0
The general-call address. And you have to use that 0 address plus a hardware pin to set it to a different address <.<
I also think it didn't have a power-on reset, so sometimes I had to leave it unplugged for a bit longer before it was back to zero...?
It was an odd fella.
Are you sure? yes | no