Arduino Uno brown-out level too low?
Someone on IRC just pointed out that the brown-out level of the Arduino Uno, at least the one specified by the 0xFD extended fuse in the boards.txt (not sure about manufactured boards) is 2.7V. Given that a 328 needs 3.6V to guarantee working at 16Mhz, this 2.7V sounds way too low. I double-checked the datasheet - an extended fuse of 0x04 would be better, which is a bod level of 4.3V (one step up).
Note that I didn't check the fuse settings of any other board.
16u2 Fuse is set to 3V. 32u4 Fuse is set to 2.4V Your Link above is broken.
I guess some usb ports can easily drop below 4.3V which is still > 3.6V but < 4.3V (I normally have 4.4-4.5V) so this could be a problem?
I fixed the link.
If the voltage drops below 4.3V but above 3.6V, this would mean that the Atmega would reset, while not strictly required. However, the current situation is that if the voltage drops below 3.6V (but not below 2.7V), the Atmega doesn't cleanly reset but could lock up, not recovering properly when the voltage raises to proper levels again.
I'd want to have extra clean resets rather than potential complete lockups, especially as a default.
I think I had those situations already. Not sure if it was caused by the brown out detection but yeah we should change this. Then the fuses for 32u4 and 16u2 also needs to be changed.
Good Afternoon.
I'm just wondering if this is due to be fixed any time? The BODLEVEL2:0 fuses for a 16 MHz ATmega328P should be set to 0b100 according to the data sheet which specifies the minimum VCC as 4.0 V. The current settings, 0x101 set the typical BOD level to be only 2.7 V which is quite a bit below the minimum required for a 16 MHz clock speed.
Thanks very much for all your hard work in the Arduino world. It is much appreciated.
Cheers, Norman Dunbar (Author: Arduino Software Internals and Arduino Interrupts)