Electronic – arduino – How to return an Arduino digital pin to floating state

3.3varduinodigital-logicfloatingreset

I am trying to setup a programmed reset function for a 3.3V BlueTooth module that resets when its reset pin is pulsed LOW for a short period of time. There is a 47K pull-up resistor in the BT module that keeps its reset pin at 3.3V until the reset pin is grounded or sent LOW. So there is no issue with random noise due to the BT pull-up resistor. Can I define the Arduino pin as input and leave it floating, then digitalwrite LOW to reset, then return the pin to floating so the BT module can carry on after the reset? I can't digitalwrite HIGH because the 5V from the Arduino will destroy the 3.3V BT module.

Best Answer

Have you considered using a bi-directional 5V/3V3 logic level converter circuit (typically just an appropriately-chosen N-channel MOSFET with a couple pull-up resistors). For example, search for "logic level shifter" on SparkFun.com (e.g., SKU# BOB-12009). The basic design is shown below in Figure 1.

schematic

simulate this circuit – Schematic created using CircuitLab

Figure 1.

Caveat: The 5V logic's output LOW voltage feeds through the MOSFET unmodified and is applied directly to the 3.3V logic input pin. Note that \$V_{OL}\$ for 5V CMOS logic is 0.9V, while \$V_{IL}\$ for 3V3 logic is 0.8V. However, in many cases, the logic LOW output voltage from the 5V logic side is well below 0.8V, and so this logic level converter circuit works fine for those cases.