Now that the supercap charger works, and now that I’ve switched to the ATtiny84 as processor, everything is ready to create a self-contained AC current sensing node.
The one missing piece is the software for it all. It’s going to take a while to get it tweaked, tuned, and optimized, but a basic check is actually quite easy to do.
Here is the main loop if my first test, reusing most of the code already in the tiny50hz sketch:
My main goal was to quickly get power consumption down, so that the ATtiny would use less than what’s available through the low-power supply, i.e. roughly 1 mA. Without extra steps, it’ll draw over 4 mA @ 8 MHz.
What I did was to reduce the clock rate to 1 MHz (except while processing RF12 packets), and to turn off subsystems while not needed (timer 1 is never used, and the ADC and USI h/w is now enabled only while used).
These two lines at the top of loop() are special:
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode();
They will reduce power consumption by halting the processor until the next interrupt. Since time is being tracked via the millis() call, and since that operates through a timer interrupt, there is no reason to check for a new millisecond transition until the next interrupt. This is a quick way to cut power consumption in half.
But keep in mind that the processor is still running most of the time, and running at 1 MHz. That explains why the current consumption remains at a relatively high 440 µA in the above code (with a brief “power blip” every 16 s). For comparison: in power-down mode, current draw could be cut to 4 µA (with the watchdog timer running).
Still, this should be enough for a first test. Sure enough, it works fine – powered by the ISP programmer:
OK 17 84 2 0 0
OK 17 67 2 84 2
OK 17 103 2 67 2
Every ≈ 16 seconds, a 4-byte packet comes in with the latest reading and the previous reading (as 2-byte ints).
The interesting bit is what happens when the ISP programmer gets disconnected. While connected, it charged the supercap to about 4.9V – so with a bit of luck, this node should keep running for a while, right?
Guess what… it does. My test node just sent out 197 packets before running out of steam!
This includes the ≈ 500 x ADC samples and 16-second waits in each cycle. IOW, a 0.47 F capacitor charged to 4.9V clearly has more than enough energy for this application. In fact, it makes me wonder whether even a normal electrolytic capacitor might be sufficient. The benefit of a smaller capacitor would be that the node can be up and running much faster than the 1 hour or so needed to charge up a supercap.
Here’s my very very sketchy estimate:
- let’s assume the unit operates down to 2.5 V
- with 4.9 V charge, it can run for about 200 cycles
- so with 3.7 V charge (on AC mains), it ought to run for 100 cycles
- using a capacitor 1/100th the size, we ought to have enough charge for one cycle
- with more power-saving logic, energy use can no doubt be lowered further
Given that the node is permanently powered, a 4,700 µF cap ought to be sufficient. I’ve ordered a 6,800 µF @ 6.3V electrolytic cap – with a bit of luck, that should also work. And if it does indeed, startup times will go down drastically, to hopefully just a few seconds.
Progress!
http://www.goldmine-elec-products.com/prodinfo.asp?number=G13133 I wonder if these backup batteries would be better than a cap because they deliver power more slowly than a cap. They are cheaper, don’t know how difficult they would be to source.
Interesting link, thx. They are rated 3V, which is a bit low (but could probably still be used) for the AC current monitor. No info on self-discharge rate. It looks very much like a (low-cost) supercap variant.
Hmm, I think the difficulty in finding a good spec sheet and the bargain basement price is because the Japanese parent company is in receivership. :-(