35
\$\begingroup\$

I normally use an Arduino for my projects because it has 5V inputs and outputs and has 5V Vin so that makes life very easy when interfacing with 5V components. For this project I want to use a Raspberry Pi because I want to hook it up to a display. The Pi is powered by 5V so that's easy enough. It has 3.3V I/O pins however and the devices I want to interface with are 5V.

I have a device with a 5V input pin, which needs to be driven to 5V. The device has a 5V output pin, which the device drives to 5V when it outputs.

I've converted bidirectionally between 5V and 3.3V devices before, but that was with a logic level shifter that was active LOW. The circuit is the typical one with a transistor and a diode and two pull up resistors. This application requires active HIGH. This project thankfully does not require bidirectional I/O.

For the 5V to 3.3V direction, a crude voltage divider will work.

For the 3.3V to 5V direction however, I don't know of an easy solution. I did some searching and there seem to be boost-converters (DC-DC boost converters) but to build them from discrete components I need to build a PWM circuit to drive the switching.

I was just wondering if there was a simplier way to achieve this, with complexity comparable to the active low logic level shifter.

\$\endgroup\$
31
\$\begingroup\$

Since Dave Tweed has pointed out the flaw in the other answer, I have basically copied my answer to Single transistor level up shifter ... Note also the interesting solution by Nicolas D in the question.

I have a few solutions (some solutions provided by Microchip HERE):

1) Direct connection: If Voh (high-level output voltage) from your 3.3V logic is greater than Vih (high-level input voltage), all you need is a direct connection. (it is also required for this solution that Vol (low-level output voltage) of the 3.3V output is less than the Vil (low-level input voltage) of the 5V input). This solution is most often rejected due to insufficient margins.

2) If the above conditions are close, you can often boost the high-level output voltage slightly with a pull-up resistor (to 3.3V) and direct connect the signals.

3) The pull-up resistor can provide a small amount of high-level voltage increase. For more, you can use diodes and pull-up to 5V. The circuit shown will not pull-up clear to 5V, but it will increase the high-level input voltage to the 5V logic by the amount of one diode voltage drop (appx 0.7v). Care must be taken with this method that you still have a valid low-level as that is also raised by one diode drop. Schottky diodes may be used for a slight increase in high-level voltage while minimizing the undesired increase in low-level voltage. Refer to the above mentioned app note for more on this circuit.:

schematic

simulate this circuit – Schematic created using CircuitLab

4) If you can deal with a logic inversion (and don't require active pull-up), a mosfet and pull-up resistor may be used:

schematic

simulate this circuit

5) There are also many logic ic solutions such as: MC74VHC1GT125 which is a "Noninverting Buffer / CMOS Logic Level Shifter with LSTTL−Compatible Inputs" in a SOT23-5 or SOT-353 package. Small simple and fairly inexpensive. Use of this solution should also include a decoupling capacitor close to the IC.

\$\endgroup\$
  • \$\begingroup\$ I think some of your diagrams are labeled backwards. I have a 3.3V logic output and a 5v logic input. I understand how #4 works and can confirm that the label is just backwards (but it is the correct circuit for what I need). I don't fully understand #3 enough to know if it's labeled backwards or is actually backwards. That being said if I use two instances of #4 to keep the logic non-inverted I should be good to go. \$\endgroup\$ – Huckle Sep 15 '13 at 19:26
  • \$\begingroup\$ The labels aren't backwards. "3.3V logic in" indicates it is an input into the circuit I have provided ... of course it is from an output from your circuit. "5V logic out" then merely indicates that it is an output from my circuit to your 5V logic input. I will edit to clarify. \$\endgroup\$ – Tut Sep 16 '13 at 10:14
  • \$\begingroup\$ It makes sense now that you explain it, but it's backwards from the conventional point of view (where conventional point of view is meant to mean point of view of someone interfacing digital ICs). Thanks again. \$\endgroup\$ – Huckle Sep 17 '13 at 5:56
  • 2
    \$\begingroup\$ @Huckle: Tut has provided a circuit or module to be used to interface two other circuits. The standard is to label the terminals or interface points from the point of view of the circuit show - not the ones you can't see. You connect your outputs to this circuit's inputs. Sometimes we need to indicate where to connect on another circuit but use arrows in those cases so it's clear. \$\endgroup\$ – Transistor Jul 23 '16 at 18:21
  • \$\begingroup\$ @Tut do you mind explaining a little more on how #3 works? I am having hard time understanding this. I am not sure what 3.3V-D1 is for :( Thank you \$\endgroup\$ – wbkang May 23 '17 at 0:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.