Regression between uno and uno R2 VALIDATED. HARDWARE PROBLEM CONFIRMED

last but not least, here is an other test on R2...
this time, i test the reset signal on powerup, then resetting using the button, without powering down in between.

pic1: first reset, no resistor
pic2: manual reset, no resistor
pic3: first reset, with resistor
pic4: manual reset, without resistor

i think we might have a winner!!

try placing a diode between RESET and +5V on the POWER connector, with the cathode (end with the bar) towards the +5V.

i agree that reset is pretty ugly, however there seems to be only very negligible difference between signals with and without the resistor...

i'd be betting my money on the overshoot of the reset pulse causing the problem. the overshoot, in turn, being caused by the 1k pulldown resistor charging up the 0.1uf series capacitor (by default, the 8U2 pins are open-circuit until configured).

a pulse that goes above the supply rail will do unpredictable things to the 328p, and the presence of your 4k7 pullup merely enables a set of conditions that direct the over-voltage pulse towards a lock-up condition.

ROBERT, YOU ARE THE WINNER !!!!!

This is the problem that caused our headache.
You can't imagine how happy i am.

Now, time to get the dev team so that they can create a R3... :slight_smile:

:slight_smile: these are the moments that i live for - i'm a test engineer by trade, though a slightly unemployed one right now.

i'd suggest you add that diode (a 1N914 would be fine) to the back of all your UNO boards (R1 and R2) if you intend sending them out to customers as part of a product. now the interesting question will be... will the arduino team recall all the R2 boards?

Heh. This, for sure is a good enough reason to recall them. But do they have money to?

edit: i wonder what's the best way to catch their attention, in case they missed this topic.. tweeter?

i'm picking suppliers will have to provide rework instructions to customers, and existing stock will need to have diodes added. the problem seems to have also struck folks with various 'shields' that have pullups present on non-PWM digital pins.

rattle the bars, make noise. i've posted a followup to my posting on the adafruit forums describing problem and fix - hopefully the owners of that site (who sell lots of arduinos) will feed word back up the supply chain.

Now they have reasons to hire you. (hint, hint :wink: )

edit: oh, and i think you might want to add a link on the adafruit forums so that the team can follow the whole discussions and tests.

excellent piece of research work there
especially since you found the real problem

well done, sir!

a pulse that goes above the supply rail will do unpredictable things to the 328p, and the presence of your 4k7 pullup merely enables a set of conditions that direct the over-voltage pulse towards a lock-up condition.

Maybe not so unpredictable. Isn't a higher then Vcc voltage to the reset pin the method that puts the chip into it's high voltage programming mode? As I understand it the reset pin does not have an internal positive clamping diode to Vcc (unlike the normal I/O pins, just because of the higher then Vcc on reset method to enter HV programming mode.

As far as the 'fix' :

try placing a diode between RESET and +5V on the POWER connector, with the cathode (end with the bar) towards the +5V.

Would this then prevent the arduino board from being able to be programmed via the 'high voltage' method? Granted that would represent a very small population of users, however I've seen at least one shield based high voltage programmer avalible for sale. It allows those that have managed to 'brick' their processor by errors in fuse settings, i.e. change reset pin to be a I/O pin, etc.

Lefty

retrolefty:
[...]
Maybe not so unpredictable. Isn't a higher then Vcc voltage to the reset pin the method that puts the chip into it's high voltage programming mode? As I understand it the reset pin does not have an internal positive clamping diode to Vcc (unlike the normal I/O pins, just because of the higher then Vcc on reset method to enter HV programming mode.
[...]
Lefty

good point! i wonder if HV programming mode looks at the non-PWM digital pins, and all-zeros represents a no-operation/exit, while anything else (ie, a 4k7 pullup present) initiates something else?

there are indeed more complicated solutions than a simple diode-fix, that would still allow for the HV programming, though none that can be retrofitted easily to an existing board. the 'correct' solution would be to replace the 0.1uF capacitor and 1k pulldown with a monostable.

as an aside, that 1k pulldown wastes 5mA of current drain.

Would this then prevent the arduino board from being able to be programmed via the 'high voltage' method? Granted that would represent a very small population of users, however I've seen at least one shield based high voltage programmer avalible for sale. It allows those that have managed to 'brick' their processor by errors in fuse settings, i.e. change reset pin to be a I/O pin, etc.

If it does, it's easy for new design to add two via around the diode to shunt it easily using a basic wire, or even add an open pad to be shunt with solder.

By the way, some diods seem to anihilate the reset for programming, so choosing the right one matters a bit.

If it does, it's easy for new design to add two via around the diode to shunt it easily using a basic wire, or even add an open pad to be shunt with solder.

But wouldn't that also shunt out the reset's pull-up resistor to Vcc, which would then cause direct connection from Vcc to the high voltage pulse/level used in HV parallel programming mode?

Lefty

retrolefty:

If it does, it's easy for new design to add two via around the diode to shunt it easily using a basic wire, or even add an open pad to be shunt with solder.

But wouldn't that also shunt out the reset's pull-up resistor to Vcc, which would then cause direct connection from Vcc to the high voltage pulse/level used in HV parallel programming mode?

Lefty

i think he meant to say "in series with", with the jumper shorted by default.

re: not all diodes working - it will need to be a small-signal one, such as a 1N914, 1N4148, etc. a power diode such as a 1N4002 will potentially not clamp quick enough, allowing the HV pulse to still get through. other power diodes may, as you've seen, swamp a valid reset pulse.

I'd be happier if I understood how the changes in the schematic (a pull-down resistor on the other side of autoreset cap) end up causing/allowing this spike... (I also don't understand the motivation for ADDING that resistor in the first place,
so ... I dunno.)

PD7 is involved in high-voltage parallel programming; it's (renamed PAGEL) supposed to be tied to 0 to enter HV programming mode (which is somewhat backward from the observed behavior. But it certainly seems reasonable that HV excursions on RESET could trigger SOMETHING.)

None of the HV programming shields I've seen involve using that programming while the chip is mounted IN the arduino; they all move it to a separate socket. HCV programming involves 9+ pins, including the crystal pins, so it's not really meant to work with the AVR "in circuit."

None of the HV programming shields I've seen involve using that programming while the chip is mounted IN the arduino; they all move it to a separate socket. HCV programming involves 9+ pins, including the crystal pins, so it's not really meant to work with the AVR "in circuit."

Looking over the one such HV programmer shield I saved a link to, you are correct, not used to program the arduino mounted processor but rather a second one you install onto the shield. So maybe the external clamping diode is a good 'fix'. But like you, I sure would like to understand better the failure mechanism and why the pull-down resistor was deemed desirable with the board revision.

Auto-reset is sure a nice feature, but it's sure had it's share of side effects over the years. :wink:

Robert posted a more detailed explanation on the adafruit boards:

the UNO R2 has a 1k pulldown resistor on the CTS output of the 8U2. upon power being applied, the 0.1uF capacitor (C5) is charged up to 5 volts via this resistor (RN2D) and the 10k pullup (RN1D) on the RESET line. when the 8U2 finishes resetting and the code within it starts up, the CTS output is configured and set to HIGH - the 0.1uF capacitor is 'stacked up' on top of this.

so with CTS set high, a pulse of close to 10 volts is injected into the 328p's RESET pin.

It sounds like this spike probably ocured during auto-reset of the older boards, but is "new" at power-on in the R2.

Following up on my earlier "me too" post to this thread, can confirm that adding a 1N4148 between RESET and +5V has fixed the problem my Uno R2 board is experiencing also.

Thanks foubarre for the scope work, and robert rozee for your intuition.

westfw:
[...]
It sounds like this spike probably occurred during auto-reset of the older boards, but is "new" at power-on in the R2.

you are correct, it's been sitting there as a latent issue right from when a 0.1uF capacitor was first introduced as a mechanism for resetting the 328p via the serial/usb interface. up until now the reset pulse has always been short enough (controlled via the Arduino IDE software) to prevent the capacitor charging up sufficiently to cause the behaviour we are seeing now.

i believe that with ALL Arduinos, a long reset pulse via comms (ie, setting DTR or CTS low, as appropriate, for any length of time, the releasing it) will result in a lockup condition the same as the one we are seeing with the UNO R2.

(later edit: it looks like the high-voltage pulse on the reset line is primarily a trouble at powerup time)