I'm designing a PCB that currently follows the older Arduino design with an Atmega328P and an FTDI FT232RL USB chip. I've already got a working design using a 10k pull-up on the RESET pin of the MCU and an inline 0.1uF cap on the DTR line from the FT232RL to the RESET pin. This is all very standard and works great to be able to load code via the bootloader.
However, I want to also add a reset IC (such as the STM6503) that will allow me to have a button that can be pressed and held by the user to also send RESET low to reset the MCU. (Datasheet here: http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00244356.pdf). I'm concerned that I can't just connect this STM6503 to RESET at the same time as the FT232RL. For example, what happens when the user plugs the device in to USB and DTR/RESET is driven low by the FT232RL while the STM6503 is attached? What happens if the user tries to hold the reset button so that the STM6503 drives RESET low while the FT232RL might be driving DTR/RESET high?
I can't find if either of these devices actually drives the RESET high or if it's just pulled high by the resistor and they're essentially either floating and driven low. If the latter is the case, I can attach both with no problem, right? If the former is the case do I need a logic gate? ...maybe just some series resistors on these lines will do it?
I'm hoping someone can educate me a bit on how to have two (potentially) competing devices driving a RESET pin to get me started. I just want to make it so that either of them have the capability to drive RESET low and reset the MCU at any time irrespective of what the other is doing.
the easiest method is to diode or the various resets together so that any of them can pull the reset high and let the pull up provide the high that is the normal non reset condition connect as many diodes to the reset anode to the "resetter" and you will be in business this will also enable you to mix various logic voltages as well as the external "Resetters are only providing a pull down and there are no "Active" outputs to deal with... however if you have issues with any of the things connected to the reset line they will impact your project as well so remember multiple reset lines aren't a great idea. Sometimes necessary but a thing that should be carefully thought out before committing to. In My Direct (Very) Experience.
As I continue to research it seems to me the magic is in whether the devices are "open drain" or "push-pull". I've confirmed that the STM6503 is open drain (active low) and the FT232RL's DTR is push-pull. Since the FT232RL is actually driving the line high in normal operation I have to engineer around this and can't simply connect both to the RESET input.
As long as I'm understanding this correctly, it comes down to this: How do I include an open-drain device to pull RESET low while the FT232RL is holding it high? I'm guessing that's a fairly easy question for someone but I'm not sure how to best approach it. I'm still thinking maybe just a 10K series resistor on the FT232RL's DTR line? Would that screw with its pulse too much to where it wouldn't then be able to reset the AVR?
CraigKC:
As I continue to research it seems to me the magic is in whether both devices are "open drain" or "push-pull". I've confirmed that the STM6503 is open drain so as I understand it, as long as I can confirm that the DTR on the FT232RL is open drain as well then it is as simple as connecting them both to RESET with no problem.
If the RT232RL is push-pull (as I suspect it is but can't find in the datasheet) it looks like I'll need some help choosing the right solution.
Doesn't matter what kind of output pin the FT232RL uses, as this DTR signal is series capacitance coupled to the 328p reset pin, it so won't effect the DC state of the 328's reset pin.
Maybe someone can confirm that this understanding is at least correct? I'll research your idea with diodes. I think I get what you're saying and I will post schematics if I need clarification.
Wiring additional open collector or open drain outputs directly to the 328's reset pin (not to the FTDI side of the series DTR capacitor) should be OK from a DC perspective, however one should really test to see that the AC coupled DTR pulse from the FTDI is still functional after the additional devices are wired to the reset line.
Lastly you should be aware of the 'reset lock-up' problem that was discovered sometime back that requires a diode to be added to the reset pin and wired to +5vdc with cathode end wired to +5vdc. You can see this diode has been added in the latest Uno rev3 schematic on the hardware section of the arduino site. Lefty
DTR from FTDI is push-pull and this is why you add the 0.1uF inline capacitor. When DTR is asserted (low signal), this drops the reset line momentarily before it is pulled to high by your 10k resistor. Time for low-to-high is determined by the RC time constant formed by the 10k resistor and the 0.1uF capacitor.
You can have any number of open-drain/open-collector lines connected to the AtMega reset line. The ATMega has built in reset-circuitry and so a separate reset IC is not required. You can wire your (normally open) push-to-low button directly to the reset pin.
@BenF: Thanks for the explanation of how that works. I've never really understood why the cap was there but I think I get it now. I'll try to find more detail on my own but this is a great starting point. As for wanting the reset IC instead of a simple button, I already have a button tied to an input on the Atmega used to wake/sleep it. I want the user to have to hold this same button for 10 seconds before a reset is issued to the MCU. It's a subtle difference but I can't have a dedicated 'reset' button in my design.
If you're curious about exactly what I'm doing I'm essentially doing as shown in the schematic on Page 9, Figure 5 of the STM6503 datasheet for this smart reset IC (here: http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00244356.pdf). I just needed to understand how to also retain the classic FTDI reset functionality as well without any conflict. I think I'm almost there thanks to everyone's help!