Capacitive Coupling Casestudy: Programming The Public Radio without removing it from its sealed shipping box
You’ve probably heard about the refreshingly simple Public Radio (TPR). There is no tuning knob needed since your TPR magically knows your favorite station straight out of the box.
Like most magic, this illusion of simplicity involves a lot of work behind the scenes. Each TPR has to be custom programmed by hand, assembled, and then lovingly packed before being shipped to your door. If only there was a way to program an assembled TPR without opening the sealed box…
The Challenge
We want to be able to remotely program the ATTINY micro-controller on the TPR’s board with user-selected station data without removing the board from the assembled unit, and without removing the unit from the sealed shipping box.
The TPR ships without batteries, so we also need a way of providing the board power during the programming operation.
Since this remote programming function will only be used once in the lifetime of the product, it has to be extremely cheap to to implement with minimal additional parts.
Finally, we don’t want to do anything that messes with the TPR’s beautiful minimalist design.
Is RFID right for in-box downloads?
Inductively coupled RFID tags are super cheap, self powered, and some are even self programming. We even have a speaker already in the design that we could use as our pick-up coil. Problem solved! (?)
Inductive Coupling Fail
It turns out that a flat steel jar lid makes an excellent magnetic shield. The field strength needed to punch though turns out to be enough to fry an Arduino almost a foot away! On to plan C…
Capacitive Coupling to the rescue!
I’ve long been a big fan of capacitive coupling in the right situations, and this would seem to be exactly the right situation. We already have two existing big conductive planes (the lid and the circuit board ground plane) ready and waiting to become our capacitor plates, and their geometry just happens to line up perfectly with the long axis of the shipping box!
A quick mock-up proved that we were at least in the ball park of practicality.

A mock TPR inside a mock shipping box – TX & RX plates close together
Going the distance
The transmit and receive plates in the mock-up were very close to each other. In the actual gift box things are much farther apart.

An actual TPR inside an actual shipping box- TX & RX plates far apart
With capacitive coupling, bigger distances demand bigger voltages. We needed a transmit signal with hundreds of volts of swing.
This seemed like a perfect excuse to use a resonant LC tank with the transmit plates as the C(apacitor)- at least in in theory. In practice, things get complicated fast when you are trying to drive 1,000 volt oscillations with real-world transistors. Nothing was working even after hours of effort.
Two Plus Two Equals More
Sometimes when you get stuck on a problem, a fresh perspective can get things moving again. When it comes from someone who has has years of experience designing massive power supplies that cost more than house, the fresh perspective is likely to be a very helpful one.
The suggestion: use a simple step-up transformer to generate the high voltage signal from a low voltage one. Brilliant, and a solution I never would have thought of on my own because of my deep resonance obsessions.
After about 5 minutes of hacking (with a hacksaw!) on an old wall-wort, I had a suitable 10x step up transformer.

Wall-wort hacked (literally) into 10x step-up transformer
Only a few minutes more of fine tuning produced 375 volts of swing on the transmitter plates!

375 volt swings the easy way – yellow input, purple output
It works!
Even this super simple prototype works well enough to blink a pair of LEDs inside the TPR while it is inside of the shipping box.

A battery-less TPR blinking an LED from inside its shipping box
Demo video
Needs more work
We still need to actually build out the circuitry & software to boot up the ATTINY on capacitive power, listen for the programming data, and write the configuration into flash or EEPROM. I expect all this can be done with a couple of $0.01 diode arrays, the existing decoupling cap, and an extra IO pin. If we really wanted to push it, I bet we could even use the built-in protection diodes for rectification for true a zero-parts, zero-cost solution.
Opening up a reverse-channel so the board can communicate back to the programmer would additionally allow the operator to verify that programming went ok before shipment. I’m not sure how to do that with the current configuration, but it will probably involve having the TPR short its plates together and then having the programming fixture detect that change. LMK if you have any ideas!
Own one
Like the idea of owning an object that was specifically tuned to your personal tastes? Sign up for info info the next batch, coming soon..
https://www.thepublicrad.io/production-preorder/preorder-the-public-radio
If you ever decide to explore contactless programming again, may I throw out the tidbit that an LED can be used as a photodiode light sensor? …and the LED flash of any modern cell phone camera would provide plenty of light to drive it, as well as being easily controlled by a tiny app, allowing the customer to easily reprogram their radio at will.
Ah yes! I have successfully prototyped this (originally by accident) and this would be the technique I would use if The Public Radio wanted to move forward on non-contact programming! Turns out that if you dial back the CPU startup speed and sleep immediately on power up, you can build up enough power in the decoupling caps to run a full programming cycle, using long “on” pulses between steps to top off. It does take careful design and software and timing to make sure you do not run out of juice part way through.
Note that you must use EEPROM rather than flash since a flash programming cycle takes a huge amount of power. This limits the amount of config you can program, but for TPR it is no problem.
Have you ever done this in a production system?
While I’ve experimented with a number of other things, I’ve never even tried an LED light sensor prototype, as I don’t have a use for it. I’m more of a ‘metaguru’ than a guru, as in “I don’t know how to do it myself, but I know someone who does.” 😁