Summary of Zero-wire serial auto-reset for Arduino
The article describes a simple modification to enable auto-reset on Arduino Pro Mini boards using a TTL serial break signal instead of the traditional DTR line. By employing a resistor-capacitor (RC) circuit with a common 0.1uF capacitor and a 10kΩ resistor, and adding a diode to rapidly charge the capacitor, the circuit distinguishes between short low-voltage serial signals and a longer break signal for resetting. The author repurposes existing components on the Pro Mini and adds a diode and resistor between RXD and RST pins to implement this reliable auto-reset method without a dedicated DTR line.
Parts used in the Arduino Pro Mini Auto-Reset Circuit:
- 0.1uF capacitor (already on Pro Mini board between DTR and RST)
- 10kΩ resistor (or 11kΩ on Baite Pro Mini, repositioned)
- Diode (trimmed and soldered between RXD and RST pins)
Various versions of the Arduino will reset the board by toggling the serial DTR line, a feature called auto-reset. Since it relies on the DTR line, it won’t work with TTL serial adapters that don’t break out the DTR line. After writing my half-duplex serial UART, I thought of using the TTL serial break signal which holds the line at 0V for several ms. Normal serial communications would also send 0V, but at 57.6kbps, it would never last more than 160us before returning to the idle high voltage state. So what I needed was a circuit would not reset when the line is low for 160us, but would reset when the line is low for 100ms or more.
This can be done with a simple Resistor-Capacitor or RC circuit. The time for a capacitor to discharge by 63% is equal to the resistance in ohms times the capacitance in farads. Picking a common 0.1uF capacitor and a 10kOhm resistor gives an RC time constant of 1ms, high enough above the 160us time to provide a good safety margin. Another reason for picking those values is that most pro mini boards, including the Baite Pro mini I recently purchased, use those values for the DTR auto-reset feature. My plan was to make use of the existing components for my auto-reset circuit. I also needed a way to quickly charge the capacitor, since the idle time between bytes won’t be long enough to fully charge the capacitor through the resistor. A diode serves that purpose, so the whole circuit takes just 3 parts.
The pro mini already has a 0.1uF capacitor in series between the DTR and RST line, so I shorted DTR to GND to make the connection between the capacitor and ground. I used tweezers to move the tiny chip resistor (actually 11kOhm on the Baite board) from near the button to the space between the RXD and RST pins: