Here’s a second use of yesterday’s ISP plug: pre-loading ATmega’s with a fixed sketch and bootloader.
This uses a very nice trick from the Arduino Boot-Cloner: store the code to be sent to the target MPU as PROGMEM data inside the ISP sketch itself!
I’ve adapted that Boot Cloner so that it takes its data from a separate C include file, added a couple of other features, and speeded the whole thing up a bit.
The result is called “isp_prepare” (code here).
Here’s what you’ll see on the USB serial port when starting it up:
The list reports the files which have been integrated into this sketch at build time, using this C code at the top of isp_prepare.pde:
Here is the contents of that include file, with most of the data bytes omitted:
The data consists of “sections” of code, to be programmed into the target ATmega using ISP. In this case there are two sections, a RF12demo sketch starting at address zero, and a bootloader in high memory.
Here’s is isp_prepare in action:
So the steps to load RF12demo onto a JeeNode with a fresh ATmega are as follows:
- upload this isp_prepare.pde sketch to a “master” JeeNode
- insert the ISP plug described yesterday,
- connect the target JeeNode to this master JeeNode via ISP
- enter G to start programming and wait for it to complete
- done: disconnect, now the target JeeNode is ready to run with RF12demo on it
I’ve also included a “data_blink.h” header file, if you want to preload the ATmega with the standard Arduino blinking LED demo. Just change the include in isp_prepare and upload the sketch again.
I can now use this setup for initializing all the ATmega’s here at Jee Labs, since it means I no longer have to start up the Arduino IDE or use avrdude.
Convenience!