I made a few small improvements to that sketch:
- the RFM12B is powered down at the end, so that the unit only consumes a few µA’s once done
- the programming rate has been improved by getting rid of those horribly slow digitalWrite() calls, etc.
- updated RF12demo and OptiBoot to the latest version (v8 and v4.4, respectively)
Furthermore, I switched from the funky switches to plain jumpers, with the following layout:
Another change is that the default with no jumpers is now to burn RF12demo w/ OptiBoot for use with a 16 MHz resonator – this is a good default for JeeNodes, JeeNode USB’s, and JeeNode SMD’s. To select the other options, just hook this up to USB, change the jumpers, and watch the serial output report on reset.
This is the output with no jumpers and no target board attached:
This is the output after a normal programming cycle (again, the default case, no jumpers installed):
Programming takes only a few seconds. Note that this programmer is fully self-contained and includes its own LiPo battery, so all you need to do is press the 6 pins on the ISP header pads. The neat thing is that due to the normally-discharged cap on the target board, the brief power dip caused by touching the ISP pads will generate a hardware power-on reset in the programmer, which then immediately starts its programming cycle.
So the the whole workflow is now as follows:
- grab this thing – and let’s call it a “Portable ISP Programmer” (PIP!)
- press the pins against the ISP header of the unit to be re-flashed
- watch the initial LED blink on the programmer as it comes out of reset
- wait 2..3 seconds
- watch the second LED blink, indicating that it has successfully completed programming
There is no power switch, since the programmer enters total power down when done. To re-charge, plug the programmer into a USB port and wait for the “charge” LED to turn off. Note that pressing the reset button also works, but that it adds a small boot loader delay before the isp_repair2 sketch gets started.
This has become so convenient, that I can now take any old JeeNode lying around here, and reset it to a well-known state in just a few seconds, before re-using it for some project or experiment.