programmer is not responding when running at 1 MHz (ATmega 328)

The ATmega 328 runs fine from the internal clock at 8 MHz on a breadboard in a similar setup but now I want to power it from 2 rechargable cells delivering around 2.4 V. So I decided to go to 1 MHz by enabling CDIV8. Furthermore I set the BODLEVEL to 1.7 V.

Here's the full config:

atmega328low.name=ATmega328 on a breadboard (1 MHz internal clock CDIV8)

atmega328low.upload.protocol=stk500
atmega328low.upload.maximum_size=30720
atmega328low.upload.speed=19200

atmega328low.bootloader.low_fuses=0x62
atmega328low.bootloader.high_fuses=0xDA
atmega328low.bootloader.extended_fuses=0x06
atmega328low.bootloader.path=arduino:atmega
atmega328low.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328low.bootloader.unlock_bits=0x3F
atmega328low.bootloader.lock_bits=0x0F

atmega328low.build.mcu=atmega328p
atmega328low.build.f_cpu=1000000L
atmega328low.build.core=arduino:arduino
atmega328low.build.variant=arduino:standard

After burning the bootloader, it's not possible to upload sketches, I constantly get "stk500_recv(): programmer is not responding" from avrdude and I don't know what else to try now. Using a similar config for 8 MHz from the Arduino Page (minimal circuit) works fine.

After looking further, I found someone mentioning that a accurate clock frequency is crucial for the serial communication to work at all. I assumed when lowering the baud rate this takes care of it. But maybe not so and this leads to the problem here?

markbark: I assumed when lowering the baud rate this takes care of it.

Why would it? 10% error at 1 MHz is [u]exactly[/u] the same error as 10% error at 8 MHz.

If you merely enable CDIV8, you will have to set your IDE baudrate to one eighth that you were using at 8 MHz (presuming this affects the counters as well as the CPU - I haven't checked this).

Now just so you understand this, here we go: The only reason a lower baudrate allows greater accuracy in communication is that given the same clock rate, you will using a larger divider to determine the baud clock and that larger divider can be made closer to the correct divider since 8000 is not evenly divided by 9.6. On the other hand, lowering the clock rate and expecting to use the same baudrate makes the error (much) worse.

There is however, an advantage to using the internal clock as it can be "tweaked" to a value - not the exact 8 MHz - which will match the divider you are actually using.

atmega328low.upload.speed=19200 : atmega328low.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex

So did you build a special bootloader to run at 1MHz instead of 8MHz? Otherwise, if it's an 8MHz/19200bps bootloader, it will be running at 2400bps when you just change the clockrate to 1MHz. The bootloader doesn't do any autobaud...

Is that CDIV8 a fuse ? And you use the 8MHz internal oscillator ?

Paul__B is right, the inaccuracy of the oscillator (depends on the temperature) is just as inaccurate for low baudrate as for high baudrate. Funny, but true.

So you need a bootloader for 1 MHz ? I think you have a bootloader for 8 MHz. Is that a optiboot bootloader ? I think I don't use the stk500 protocol for the optiboot bootloader, but that is on my other computer.

(while I was typing this, westfw wrote the same)