Background

When I heard about Hackaday Supercon 8's emphasis on Simple Add-Ons, I decided to wanted to turn my badge hack from 2023 into something I could mount on this year's badge.

Lots of people had noticed that the core hardware in the 2023 VectorScope badge was similar to a board that WaveShare sells, and I'd bought a few of those after the con to port my code onto.  They work well, but I ended up breaking both of the screens due to ill-advised 3D printed cases that fit too snugly.

The Button Display

Earlier this summer, I noticed that WaveShare had a new model with an even smaller 0.99" screen that came in a CNC-milled case.  I picked up a few from AliExpress to evaluate, and was able to get my code working with the new display fairly easily.  The biggest changes were the smaller resolution (going from 240x240 to 128x128) and handling a reversed vertical line update order.

I was also fortunate that the unit came with a breakout cable for the side connector, so I didn't need to source my own SH1.0 connector, I could just reuse that hardware.

Connecting it to the Badge

I'd originally wanted to make my own PCB, but while looking at other hardware, I found that AdaFruit stocks a AVR ISP connector on a breakout board for under $1 that exactly matches the addon-side of the SAO standard.  The pin labels aren't the same, but once you wire it up, who's looking at the board anymore?

With some diving into the schematic of the Waveshare module and the SAO standard, I made this diagram.

For use just as a display, you only need to hook up power and ground, but the WaveShare badge also includes an accelerometer and gyroscope IMU sensor that would be useful to expose via I2C to the host badge.

Physically, I measured the distance from the connector on the module to the pin holes on the AdaFruit board, added a little slack for wire stripping and user error, and cut the breakout cable.  After stripping the cable wires, I started soldering them into the holes, with a test after attaching GND and 3V3 to see if it would start.  That test was very fortunate, as it showed I'd connected to the wrong end, but that was fixed with minimal fuss.  After attaching the rest of the wires and another test, I used some hot glue to attach the board to the module and to fix the connection wires to the side of the plastic shield.  It's not the prettiest connection, but as I posted in the Supercon discord, I'm putting the "S" in SAO.

Power Problems

When I first tried this connected to the 2023 VectorScope badge, I could see a backlight activate on the display module, but the video player didn't start up.  Checking the SAO port on the badge showed that it only was supplying 3V, not the 3.3V from the spec.  It turns out that the SAO ports on the Supercon badges usually are connected to the AA battery directly, so you get whatever voltage is available from the cells.

The VectorScope badge does have a boost converter that produces 3.3V, and that's exposed on the connectors used to provide analog inputs for the vector display.  I tried wiring to that, and saw some execution, but it crashes early before showing a full frame.

At this time, I was resigned to having this not work as a SAO, but once I got a working variable power supply, I took a look at the actual operating range.  For my code as-is, I couldn't run below 3.1V and 60mA of current.

However, after doing these tests, I remembered that I'd setup my project to run the Pico in a 2.15x overclock (270Mhz) in order to get a higher frame rate.  With the smaller display, I could reduce the CPU speed back to the normal 125Mhz.  On testing, this didn't playback at 30fps, but was still acceptable around 24fps, and this worked at 2.95V and 40mA, which meant that it booted and played video connected to both my VectorScope and Voya4 badges!

Connectivity Problems

In looking at I2C connectivity, I found that the IMU...

Read more »