Zero-wire serial auto-reset for Arduino
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: