How to tristate a reset pin

I have a fairly involved circuit with a master unit (Nano) and two subsidiary units (also Nanos). When the master unit is reset, I want the two subsidiary units to reset also. If I hook a pin from the master unit to the two subsidiaries' reset pins, I can easily do this.

But once I have tied the subsidiary resets to a (normally) high signal from the master, the serial programming process to the two subsidiaries doesn't work, because it can't reset the chips to start programming. So, would a resistor in line from master to subsidiary work? Or is there a simple little circuit which would present high impedance to the subsidiary reset pins except when a reset was active?

Thanks in advance for any ideas.

When the master unit is reset, I want the two subsidiary units to reset also. If I hook a pin from the master unit to the two subsidiaries' reset pins, I can easily do this.

But once I have tied the subsidiary resets to a (normally) high signal from the master, the serial programming process to the two subsidiaries doesn't work, because it can't reset the chips to start programming. So, would a resistor in line from master to subsidiary work? Or is there a simple little circuit which would present high impedance to the subsidiary reset pins except when a reset was active?

Since when do nanos program other nanos ? Sketches are loaded through the USB connection to the PC running IDE. What are you trying to say. What programming ? What exactly does THAT mean ?

But once I have tied the subsidiary resets to a (normally) high signal from the master, the serial programming process to the two subsidiaries doesn't work, because it can't reset the chips to start programming.

FYI, the RESET pins are pulled low by a capacitor that is connected to the DTR signal from the FTDI chip or FTDI board. In order for it to work as you want it to the RESET signal must come from the onboard FTDI chips. If you want to pull their RESET pins LOW AFTER programming, you can use a TRI-STATE buffer chip

The MASTER holds the SLAVE RESET in TRI-STATE mode until such time as it wants to RESET them. It then ENABLES the buffer, releasing the signal from TRI-STATE mode so the the connection is made via the buffer . In tri-state mode the connection is OPEN and cannot even be measured with a meter. .

the two subsidiaries

In electronics, we don't (meaning NEVER have and never will) refer to SLAVEs as "subsidiaries".

(meaning there are no "subsidiaries" in electronics. They may exist in the corporate or financial world but not in electronics. You will not find them on datasheets)

DEFINITION:

a thing that is of lesser importance than but related to something else.

If it is a peripheral (like a printer or display), it is called a peripheral. If it is a microprocessor, it is called a "SLAVE". Someday, even this term will become not politically correct, but as we speak it is and that's what they are called.

The easiest way to resolve this problem is to set the pins on the master that you are using to reset the slaves as inputs until you want to perform the reset. Pins set as input are high impedance and will not interfere with the usb programming of the slaves. When you want to reset the slaves simply set the pins as outouts and then write them low for a bit then set them as inputs. This will reset the slaves and keep everything happy. If you need this to happen when the master is reset just write this into the setup section and it will happen on reset of the master.

R

If I hook a pin from the master unit to the two subsidiaries' reset pins, I can easily do this.

Hardware solution: Instead of a jumper wire, use a diode for each auxiliary nano.

Diode1: Cathode to auxiliary nano1 reset. Diode2: Cathode to auxiliary nano2 reset. Diode3: Cathode to auxiliary nano3 reset.

Connect all diode Anodes together and pullup to VCC with a 10K resistor. Connect a reset button from the anodes to GND to reset all devices.

The serial programming process for each nano should work independently without resetting the other nanos.

(just a suggestion ... untested).

I like @dlloyd's answer for a hardware solution. Very simple and effective. +1

R

rdfeil's suggestion is a wsy to use the built-in tri-state feature of the ardiuno. The "high impedance state" he mentioned is functionally the same ax a tri-state buffer chip.

DLloyd's suggestion prevents anything connected to the anodes from pulling the reset pins LOW. Rdfeil's suggestion allows the MASTER to reset the slaves.

I like the idea of setting the pins to inputs except for reset. That means no hardware changes. Thanks.

That suggestion was made assuming you meant using GPIOs to reset the SLAVES but you never said that. It was "implied" by the reference to a "normally high signal from the Master". It is thr most "elegant" solution because it doesn't require extra parts or rewiring.

jrdoner: Or is there a simple little circuit which would present high impedance to the subsidiary reset pins except when a reset was active?

Yes, as pointed out, it's called a diode.

My question is why would you feel the need to reset the "subsidiaries" other than to program them? The fact that you propose to (re-)program them means that they have a bootloader, and the bootloader slows the reset cycle which you generally do not want in normal operation.

If the sketch is properly written, there should never be any reason to reset it.

“subsidiaries”

SLAVES

... could also be taken as "auxiliary" (synonym).

... could also be taken as "auxiliary" (synonym).

Yes. I never complained about that as "AUX" is widely used in electronics, although personally, I think SLAVE is specifically used with respect to multiple processors controlled by a single one. HOST & SLAVE are widely used in communications , like HOST USB shield etc. but MASTER & SLAVE are usually used when referring to uP, although not exclusively.

Just revisiting this to discuss the solution I found. I found that setting a Nano pin as input did not set it to high impedance -- it was in the HIGH state. So, I played with putting a resistor in series with my reset line from the master to the auxiliary nanos. When I dropped the resistance to 3.3 KOhms, I could leave the reset line tied to the master, and a reset from the master would work, as well as the USB programming interface. All's well.

jrdoner: Just revisiting this to discuss the solution I found. I found that setting a Nano pin as input did not set it to high impedance -- it was in the HIGH state. So, I played with putting a resistor in series with my reset line from the master to the auxiliary nanos. When I dropped the resistance to 3.3 KOhms, I could leave the reset line tied to the master, and a reset from the master would work, as well as the USB programming interface. All's well.

Could it be the sum total effect of all the internal pullups on all the reset pins?

You realize that if reset pin is used for reset (ie, RSTDSBL is not set) the pin is always acting as an input with the pullup enabled, right?

Good job !

Thanks for the SIT REP (Milspeak for SITUATION REPORT)

Post your code for the setup

The code for the reset is trivial. Let's say I choose pin D4 on the master to cause the resets of the subsidiaries (auxiliaries, whatever).

//initialization in setup()

  int auxResetPin = 4;

  pinMode(auxResetPin, OUTPUT);
  digitalWrite(auxResetPin HIGH);


//the reset process

   digitalWrite(auxResetPin, LOW);
   delay(10);
   digitalWrite(auxResetPin, HIGH);

The single reset goes out to both auxiliaries, with a 3.3K resistor in series with each reset line. Different species of Arduino boards would probably accept this stunt, but, because internal pullups might vary, the 3.3K value might be different for other Arduino siblings.

Glad that works for you. There's no 'if' or 'maybe' with Tri-state.

Change your setup to this

 digitalWrite(auxResetPin HIGH);
pinMode(auxResetPin, OUTPUT);

to prevent a low going impulse that may cause issues.

 digitalWrite(auxResetPin HIGH);
pinMode(auxResetPin, OUTPUT);

shouldn't the pin be configured with pinMode BEFORE writing to it ?

Writing it first turns on the internal pullup first, so there is not a low blip before it goes high. This has been mentioned before.