I would have been surprised too. I tested my sleep current with a set of 2xAA and got 16uA so something odd is going on; actually a few things:
1) I would not have expected a discrepancy between Vcc out from my FTDI board and Vcc out from a battery pack. The voltages are quite comparable.
2) I'm getting a somewhat elevated sleep current now; not sure why or how to bring it back down to the 4ish uA it should be.
To answer your questions though:
Here is the addition to my boards.txt that I'm using
##############################################################
atmega328bb_noBOD.name=ATmega328 on a breadboard (8 MHz internal clock - No BOD)
atmega328bb_noBOD.upload.protocol=arduino
atmega328bb_noBOD.upload.maximum_size=30720
atmega328bb_noBOD.upload.speed=57600
atmega328bb_noBOD.bootloader.low_fuses=0xE2
atmega328bb_noBOD.bootloader.high_fuses=0xDA
atmega328bb_noBOD.bootloader.extended_fuses=0xFF
atmega328bb_noBOD.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb_noBOD.bootloader.unlock_bits=0x3F
atmega328bb_noBOD.bootloader.lock_bits=0x0F
atmega328bb_noBOD.build.mcu=atmega328p
atmega328bb_noBOD.build.f_cpu=8000000L
atmega328bb_noBOD.build.core=arduino:arduino
atmega328bb_noBOD.build.variant=arduino:standard
atmega328bb_noBOD.bootloader.tool=arduino:avrdude
atmega328bb_noBOD.upload.tool=arduino:avrdude
And here is the code running on the naked 328p
#include <LowPower.h>
#if defined(__AVR_ATmega328P__) // Macros to define the ports and bitmasks for the pins on the 328p succinctly
#define InpRegFromPin(pin) pin<8 ? 0x09 : pin<14 ? 0x03 : 0x06 // Input registers for the ports
#define DirRegFromPin(pin) pin<8 ? 0x0A : pin<14 ? 0x04 : 0x07 // Data direction registers for the ports
#define DataRegFromPin(pin) pin<8 ? 0x0B : pin<14 ? 0x05 : 0x08 // Output registers for the ports
#define BitmaskFromPin(pin) pin<8 ? 1<<pin : pin<14 ? 1<<(pin-8) : 1<<(pin-14)
#endif
// Bit-banging macros - each adds 2 bytes of sketch size and takes 1 clock cycle to execute
#define MakeOutput(pin) _SFR_IO8(DirRegFromPin(pin)) |= BitmaskFromPin(pin) // Much faster and smaller version of pinMode(Pin, OUTPUT)
#define MakeInput(pin) _SFR_IO8(DirRegFromPin(pin)) &= ~(BitmaskFromPin(pin)) // Much faster and smaller version of pinMode(Pin, INPUT)
#define PullHigh(pin) _SFR_IO8(DataRegFromPin(pin)) |= BitmaskFromPin(pin) // Much faster and smaller version of digitalWrite(Pin, HIGH)
#define PullLow(pin) _SFR_IO8(DataRegFromPin(pin)) &= ~(BitmaskFromPin(pin)) // Much faster and smaller version of digitalWrite(Pin, LOW)
#define ReadPin(pin) _SFR_IO8(InpRegFromPin(pin)) & (BitmaskFromPin(pin)) ? 1 : 0 // One line if else statement using the format [test ? true return : false return]
// Macros to mimic the native Arduino syntax
#define DigitalWrite(pin, state) state ? PullHigh(pin) : PullLow(pin)
#define PinMode(pin, dir) pin ? MakeOutput(pin) : MakeInput(pin)
uint8_t seconds;
int main(void) { // =========== the setup function runs once when you press reset or power the board ===========
PinMode(13, OUTPUT);
for(;;) { // =========== the loop function runs over and over again forever ===========
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
DigitalWrite(13, HIGH);
_delay_ms(10);
DigitalWrite(13, LOW);
} // =========== the loop function runs over and over again forever ===========
} // End main
You can switch back to the standard Arduino functions by lowercasing the first letter; e.g. digitalWrite(13, LOW) rather than my DigitalWrite(13, LOW). I'll post a picture momentarily showing my wiring. Also, the largest resistor I have is 1M but I'll see how much current it adds to my reading.