Do you use some kind of supervisory/reset IC in all your microprocessor/FPGA projects?
I've made small quantities of widgets using AVRs and haven't encountered any reliability problems just using the recommended RC/diode reset circuit in their material. I'm thinking about making larger quantities of widgets using AVRs and battery powered, and wondering if using a supervisor would be cheap(?) insurance.
AVRs already have pretty sophisticated supervisors in the chip, including brownout detection etc. Tried doing all the terrible things, like stroking the power wire across terminals, switching on and off at all sorts of pulse rates, etc. Never found a condition where I could get one to fail to start properly.
Never needed more in all the things I use AVRs for.
The main thing seems to be never to bring any port line in or out of the box without some sort of passive or active filter on it. Preferably bring any I/O through some simple ( and cheap to replace ) transistor driver, either way.
A lot depends on the environment in which you expect the device to operate. And, the balance of the design.
Are you using a schlock POS "power module" dubiously characterized? Do you KNOW if it will maintain a particular output voltage at the types of (dynamic) loads you expect to place on it? Do you know how it responds to line transients? etc.
How benevolent/hostile/stupid are your users and the rest of the environment in which the device is deployed? What are the consequences if it misbehaves?
My most sophisticated supervisory circuits are used in places where I *expect* a malicious user to try to cause my device to "misbehave" to create personal gain, of some kind. I.e., he is motivated to try to "do unexpected things" to the power source and I/Os in the hope of causing the device to err -- in his favor! (or, disclose portions of its internal design)
If there is little to gain (or lose!) from these sorts of abnormal events -- and, if you expect them to be abnormal -- then the power-up circuitry in many SoC's is more than adequate to cover typical operation. If the device screws up, user powers it off, waits two seconds and powers it back up.
Thanks for the advice, everyone. Maybe not strictly necessary, but I'm hoping the design I'm working on will be something that's made in quantities over a hundred, and will be one of the more complex things I've done, with a display, SD card reader, etc.
A MAX809 is only 15 cents in quantity - I think that's worth it to sleep a bit better at night.
I can't comment on the AVRs, but I have a standard circuit I use on all my FPGAs, other than the Spartan AN seires that handle the FPGA config automatically. It is a one diode to +3.3 (or 2 for the old 5V systems), a
1K pull-down resistor. That goes to a 100K resistor and .1 uF cap to ground. Then, that feeds a 74HC14 Schmitt trigger to generate the reset. So, the diode-1K resistor makes sure it get reset, even if the circuit is receiving a little bit of phantom power from whatever it is hooked to. The
100K R C gives it a modest delay before removing the reset, and the HC14 makes sure it comes out of reset cleanly. This has worked for quite some time in several production devices. The 74HC14 usually gets used for a few other functions on the board.