I'm having an important problem with many (well all) Arduino Uno Thru-Hole boards I have. With a specific power ON sequence, I can quite easily make a brand new, untouched Arduino hang. Standard behavior when everything is fine looks like this on the batch of boards I got about a month ago: 1) ON green LED turns ON 2) L yellow LED blinks 3 times quickly and then stays OFF for about 1 sec 3) L yellow LED blinks 2 times slowly 4) L yellow LED blinks 1 time very quickly (just slightly noticable) 5) L yellow LED blinks 2 times slowly 6) L yellow LED now begin it's steady state slowly blinking forever
Behavior when board hangs on the specific power ON sequence is this: - ON green LED turns ON - L yellow LED stays off forever
When board is stuck: - Hitting the reset button brings it out of its hung state and board returns to normal behavior - Board gets properly detected by the PC when USB is connected but behavior does not change (still no L flashing) - Uploading a new sketch to the boards using the IDE works and the board returns to normal behavior - Opening the COM port brings it out of its hung state and board returns to normal behavior
Reproducing the power ON sequence (please try and comment) - Procedure #1: - Plug in a 9V or 12V power adaptor to the DC barrel connector - Leave the board powered right until you come to standard behavior step #3 above without letting this step actually happen. You should see 3 fast blinks (step #2) and then wait for about 1 second. - Remove the power - Wait about 1/3 of a second (doesn't need to be really accurate, I'm just trying to give an idea of the time here) - Plug it back You will have to do this a couple of time and adjust for the proper timing but it's pretty forgiving on the timing and you should be able to reproduce it. I am able to reproduce it normally after less than 5 attempts.
Reproducing the power ON sequence (please try and comment) - Procedure #2: - Plug in a 9V or 12V power adaptor to the DC barrel connector - Leave the board powered for a couple of seconds - Remove the AC power cord on the power adaptor - Wait 3.5 seconds (green ON LED will stay ON for a short time, start counting when unpluging the AC cord not when LED turns OFF) - Plug it back This one is a little harder to achieve and I would think that depending on the PSU you're using, 3.5 sec wait time will have to change. I am able to reproduce it normally after less than 10 attempts (but I've been doing it for a while now ;) )
I was also able to reproduce on the only Arduino Uno SMT that I had in stock.
I looked around in the forums and around the web and tried some things without success: - Some people were suggesting to change the BOD to 4.7V which I did (both on the Atmega8U2 and Atmega328P) -> no luck, same behavior - I also tried removing the BOD altogether -> no luck, same behavior - I programmed the Blink example directly in the Atmega328P (without a bootloader) -> no luck, same behavior when board hangs
I read the fuses right out of the box using AVR Studio 4 and AVRISP: - Atmega328P Extended 0xFD - Atmega328P High 0xD6 - Atmega328P Low 0xFF - Atmega8U2 Extended 0xF4 - Atmega8U2 High 0xD9 - Atmega8U2 Low 0xEF
This behavior is a major problem for me as I need a very robust product (going to be used in a science museum). Device will be powered ON and OFF automatically every day through the use of an Ethernet power bar. I need to find a way to make sure Arduino will start reliably everytime. I thought about using an external voltage supervisor but I would prefer to find another solution (FW if possible, both bootloaders or both user codes) since I don't have a PCB to hook it up to. In the meantime, I am going to order a DS1233-15+-ND from Digikey and see if this helps.
Thanks for reading! Any help, clues are going to be greatly appreciated. Guillaume