A breakout board for Analog Devices' 8x12 analog cross-point switch
A few intrepid customers keep cleaning me out of my stock of these boards. You know who you are, and thank you. :-)
In an effort to stay ahead of demand, my next restock will be for six boards, but I'll have more PCBs on-hand. That should happen a bit before Christmas. Please know that I pay attention to waitlists. So if I'm ever out of stock on anything, and you add yourself to the waitlist, I will typically have you served within 3-weeks at the outside. Sometimes faster.
I made some small changes the boards to make manufacturing them easier. So the layouts will change slightly starting with this run, but the schematic/pinouts/drivers are unaffected. But the change will make pick-and-place easier and reduce attrition if/when I send this out for mass production.
I really like OSHPark's new "After Dark" offering. So this next batch will have that as an option on Tindie.
Documentation and bug fixes
Lots of small bug fixes and improvements have been bleeding into the drivers over the past few days. So now is a good time to re-pull those. The README has also been updated with discourse on driver features.
The driver had a tremendous amount of technical debt cleared away last night. Bus references are no longer hard-coded to "Wire", but are instead passed in as an argument to init(), and is then retained by the class. This costs an extra 4 bytes of resting memory load per-instance, but paves the way for the linux TwoWire abstraction, and makes life generally easier for anyone using the board with (suppose) "Wire1".
Additionally, the driver now supports state serialization and restore. It needs some more testing, but it should allow state restore before or after init(), allowing for "profiles" and easy management of preferred settings, default states, etc. Buffers written this way are versioned so that new driver features can be gracefully migrated in. This API is essentially finished, so it is now safe to code against. The example sketch is updated, tested, committed, and pushed.
Unrelated to the above feature is another feature that is important for the linux port: preserve-on-destroy. When the driver instance for the switch is destroyed, the default behavior is to put the hardware into a known state (reset). This opens all routes. Use-cases that want the hardware state to outlive the driver's life cycle are now possible again. See the driver README for details.
Sloppy private boolean class variables were condensed into something more efficient and manageable (int member with flags).
I might decide to put the row::col cardinality checking code back in (especially if someone tells me they want it). But it won't change the API from here on out.
The latest commit to the driver repo fixes all remaining issues, includes a finished example sketch, and cleans up the remainder of the cruft from the prior driver. Please re-pull if necessary.
I am out of stock. This is on its way to being rectified. Estimated restock date is 2019.11.30. The API for my provided driver will change slightly to facilitate Viam Sonus.
If you've bought one of the switch boards, and are trying to use my example sketch, I have an explanation for its failure to communicate with the board.
Please re-pull. This makes the default i2c address match the default jumper settings.
I just pushed a fix for a mistake on the silk screen that had a ground pin mistakenly labled as "SDA". Nothing was damaged. That's why I make my ground pins square. ;-)
I've ordered the new boards. Despite the picture of the assembled unit (which I'll swap out when the new boards are ready), I won't be shipping anything with uncorrected silks.
The Arduino driver is posted.
Boards test good. Tindie listing was approved today. Now to polish the Arduino library.