[SOLVED] Set Low Fuse Bit, Now Can't Program over ISP

Try running my "chip detector" sketch:

That generates a clock signal on pin 9 as well in case you need it.

Nick,

I installed your sketch and hooked up the ICSP lines and the only serial output I got was "Atmega chip detector." I also tried connecting D9 to XTAL1 through a 1.5K resistor and the same was outputted.

Should I be doing something differently?

Thanks,
Aakash

I wouldn't worry about the resistor, but that sounds OK, assuming you followed my wiring. Sounds to me confirmation that it isn't responding to programming.

I wonder if, when you were changing the fuse in the Atmel Studio, you accidentally didn't notice that at the same time the high fuse was set to something that wasn't appropriate (like SPIEN). Once you turn off SPIEN you can't program through the SPI interface.

Nick,

AVR Studio read in the existing fuses, and showed me that only the low fuse had been modified (the field shows up with a notice once you modify it)

So, I'm pretty confident that I didn't change anything except low fuse.

Thanks though.
Aakash

OK, well I would remove the resonator if that is possible. Then feed the clock (XTAL1) from the clock output on my test sketch with no resistor. No capacitors or anything on XTAL1 or XTAL2. Check the voltages on the other pins (VCC, AVCC). Use the logic analyzer to confirm you are getting the 8 MHz clock in, and that the SPI data is arriving on the correct pins.

Do you have decoupling capacitors on VCC, AVCC?

Nick,

I do have decoupling caps on both. I'll have to buy a hot air gun to remove the resonator. I'll order one and update this thread in a few days.

Thanks,
Aakash

I'm not offering a magic bullet here. The symptoms as you describe them do not have a simple solution. I have a Uno here that just stopped working. I am assuming I zapped it with static, but can't be sure what is wrong. Maybe you did that yourself. Who knows? But if the thing isn't working, you may as well explore as many options as you can.

Nick,

It's possible! I'm just trying to find anything I can do before sending off to get rework done to replace the AVR and resonator.

Referring back to the logic analyser screen shots you posted earlier, the middle one (clock connected to XTAL1 through 1.5K resistor) looks exactly as it should. The frequency at CLKOUT is 1/8 of the clock you are feeding it because you have the fuse set to use the clock prescaler. We know that the your mcu wasn't oscillating before because you were unable to detect a clock on CLKOUT, and this explains why your ICSP was unable to read the device signature.

Have you tried using your ICSP to read the fuses, with the clock configured like this?

dc42 - I set your sketch to run at 1MHz and connected it to XTAL1. Then ran "avrdude -c avrispmkII -p m328p -P usb -B250" but no-go unfortunately. I suppose I'll just inquire about getting rework done to replace the mcu and resonator.

Thanks anyways guys, I really appreciate your help. When I get the board back I'll be sure to ask on this thread what fuses to set to what values. :slight_smile:

Thanks,
Aakash

dc42:
Referring back to the logic analyser screen shots you posted earlier, the middle one (clock connected to XTAL1 through 1.5K resistor) looks exactly as it should.

Are you certain? I does look like a nice clean clock signal but I read that horizontal scale as 1/10 of a second.

If I'm reading it correctly, the SCK period would have to be about 1/2 of a second (which may actually work).

Good catch! I assumed that the horizontal scale of the 1st and 2nd images was the same, without looking at the figures. But how could a 1MHz signal on XTAL1 give rise to a signal of about 12Hz on CLKOUT ?

Aakash, are you certain that images 1 and 2 were taken with the same sketch generating the clock signal?

dc42:
Aakash, are you certain that images 1 and 2 were taken with the sane sketch generating the clock signal?

I'm 100% sure. I just tried it again today and the output was identical.

Can you post the sketch you are using to generate the clock signal?

dc42:
Can you post the sketch you are using to generate the clock signal?

// Generate a square wave of a given frequency on the OCR1A pin

#define REQUIRED_FREQUENCY  (1000000)
#define REQUIRED_DIVISOR ((F_CPU/REQUIRED_FREQUENCY)/2)

#if (REQUIRED_DIVISOR < 65536)
# define PRESCALER  (1)
# define PRESCALER_BITS  (1)
#elif (REQUIRED_DIVISOR < 8 * 65536)
# define PRESCALER  (8)
# define PRESCALER_BITS  (2)
#elif (REQUIRED_DIVISOR < 64 * 65536)
# define PRESCALER  (8)
# define PRESCALER_BITS  (3)
#elif (REQUIRED_DIVISOR < 256 * 65536)
# define PRESCALER  (8)
# define PRESCALER_BITS  (4)
#elif (REQUIRED_DIVISOR < 1024 * 65536)
# define PRESCALER  (8)
# define PRESCALER_BITS  (5)
#else
# error Bad frequency
#endif

# define TOP        (((REQUIRED_DIVISOR + (PRESCALER/2))/PRESCALER) - 1)

void setup()
{
  pinMode(9, OUTPUT);
  digitalWrite(9, LOW);
  TCCR1A = 0;
  TCCR1B = (1 << WGM12) | PRESCALER_BITS;    // turn on
  TCCR1C = 0;
  OCR1AH = (TOP >> 8);
  OCR1AL = (TOP & 0xFF);
}

void on()
{
  TCNT1H = 0;
  TCNT1L = 0;  
  TCCR1A = (1 << COM1A0);
}

void off()
{
  TCCR1A = 0;
}

void loop()
{
  // Generate a burst 2ms long, then wait 10ms before generating the next one
  on();
  delay(2);  
  off();
  delay(10);
}

Note: I tried removing the void loop() and just putting on() at the end of setup() and that resulted in no clock signal being output on CKOUT. There was a clock signal being output on the source Arduino, however.

dc42:
But how could a 1MHz signal on XTAL1 give rise to a signal of about 12Hz on CLKOUT ?

I suspect witchcraft. Or possibly a gypsy curse.

Aakash:
Note: I tried removing the void loop() and just putting on() at the end of setup() and that resulted in no clock signal being output on CKOUT. There was a clock signal being output on the source Arduino, however.

That should have been exactly the right thing to do. Try doing it again, but also reduce REQUIRED_FREQUENCY in case 1MHz is a little high, given that you have the resonator still connected and a 1.5K resistor in series with the clock signal. As the Arduino you are using to generate the clock is also 3.3V, I think you can also safely try it without the 1.5K series resistor. What you are looking for is a signal on CLKOUT at a reasonable frequency.

dc42:
That should have been exactly the right thing to do. Try doing it again, but also reduce REQUIRED_FREQUENCY in case 1MHz is a little high, given that you have the resonator still connected and a 1.5K resistor in series with the clock signal. As the Arduino you are using to generate the clock is also 3.3V, I think you can also safely try it without the 1.5K series resistor. What you are looking for is a signal on CLKOUT at a reasonable frequency.

So what you're saying is that I should lower the REQUIRED_FREQUENCY to a number until CLKOUT starts showing a steady clock? Right now, at 1MHz, the analyzer doesn't detect anything on CLKOUT at that speed.

Yes, try that and/or try removing the 1.5K resistor. I'm guessing that turning the clock on/off in loop() is what is actually causing CLKOUT to toggle. Maybe the clock signal is not strong enough to drive XTAL1 @ 1MHz given that 1.5K is on the high side (I suggested 100 ohms originally) and the resonator is still connected. At a lower frequency, the resonator impedance should be higher, judging from the impedance plot in the datasheet, which will result in a stronger signal on XTAL1.