5V to 3.3V Logic Level Shifting Stragety Notes

Here are some notes on different level-shifting strategies to convert from 5V to 3.3V circuits. As usual, this is for quick-and-dirty stuff.

I searched the Internet, found a couple of appealing strategies, and tried them out. I connected them to an Arduino output that cycled between high and low, and connected an oscilloscope to the output.

Strategy 1: Ordinary Diode


This is a very simple strategy with few parts that I found on Rob Faludi’s page XBee Level Shifting.  This is what I saw on the scope:


It’s been too many years since I’ve been in school to remember my analogue electronics, so at first this surprised me. Top to bottom is approximately 3.3V, but the huge rise and fall times were not what I expected.

I suspected that the 10k resistor was the culprit, (e.g. see Effects of Varying I2C Pull-Up Resistors), and threw in a 220 ohm resistor as an opposite extreme. The results were much more promising. The falling edge is very sloppy, but the rising edge is pretty crisp.


Strategy #2: Zener Diode

This is a variation on the first, but relying on the zener to limit voltage to 3.3V. The 10k ohm resistor I found on more than one site, so I tried it first of all.


This produced the following on the scope:


This is atrocious with a 10k resistor in there. Switching to the other extreme, the 220 ohm resistor, I got the following beautiful display. The falling edge has some roundoff on the bottom, but it demonstrates that the zener diode’s a viable quick and dirty level shifter.


Strategy 3: Bus Transceiver

The last strategy I tried uses a 74LVC245 bus transceiver.


Using an actual IC is a little heavy-handed for a single line, but the results were solid.


Strategy #4: Resistor Voltage Divider

Because 3.3V is 2/3 of 5V, it’s easy to create a voltage divider out of resistors.


Using 10k resistors produced the familiar shape:


While dropping down to the other extreme, 200 ohms, produced a solid waveform:


Demonstrating that if you need a dirt simple level shifter, three resistors may do in a pinch. However! Danger! Danger! The impedance of the surrounding circuitry will wreck havoc with the voltage divider. I really do not recommend this method.


I have not tried these yet, but there are some notes on the Arduino Playground site here, and this document here.


Uploaded cleaner images, added fourth strategy.
Created addendum.

30 thoughts on “5V to 3.3V Logic Level Shifting Stragety Notes

  1. fabiodive

    Your test results depend on the impedance of the receiver side (example..an ADC),
    please try to connect a voltage divider with low resistors between an ADC input and an
    accelerator output..You need to consider also adding a buffer with an op-amp to correct
    the impedance. Sometime it should be before the divider, sometime after, it depends by
    the datasheets.
    Thank you anyway for your tests and try to clear the subject.

  2. James Reuben Knowles Post author

    Admittedly, these tests were performed as a simplistic exercise, and any input is welcome.

    I wasn’t thinking in terms of using an op amp, but yes, this would also work.

    You are correct that the impedance will change things, especially with the resistors. The next time I revisit this I’ll try to expand on this.

    Thank you kindly for the comments.

  3. kilianc

    What you mean with “While dropping down to the other extreme, 200 ohms, produced a solid waveform” can you upload the new schematics?

  4. Pingback: 5V TO 3V3 BI-DIRECTION :: | BRG

  5. Pingback: 5V TO 3V3 BI-DIRECTION « Bir Robotic

  6. happycactus

    Also the simple inverter (mofset with drain resistor and gate resistor network) can be a good and less expensive alternative to the bus translator.

  7. Lobna Amer

    Wow! You just displayed all your experiment and results in such an informative and easy to follow way! Excellent work

  8. Pingback: communication between SD card and microcontroller

  9. chisight

    Well done! Would be nice to see the probe’s impedance and also to see the ipact of varying input capacitance, but this is great concrete data in a place usually just muddied in speculation.

  10. Steven Morehouse

    I’m a little surprised nobody mentioned this earlier, but… umm… unless I’m missing something your Strategy 1 which gave you poor results is not at all similar to the source you say you got it from! You say, “This is a very simple strategy with few parts that I found on Rob Faludi’s page XBee Level Shifting.” so I followed that link and immediately saw the title difference. This page we’re on right now says, “5V to 3.3V Logic Level Shifting Stragety Notes” and your diagram clearly shows 5V being the input and 3.3V being the output, right? Go to the page you’re referencing and the diagram that matches your clearly states the EXACT OPPOSITE. So… could this be the reason you got poor results?

  11. Eric B. Wertz

    The disadvantage of the low-valued resistor circuits (esp the voltage divider) is the fairly high current consumption.

    Using the high-valued resistor seems like it may be perfectly fine for one-shot circuits like a reset line since its relative lack of speed may not be critical.

    Nice summary, thanks.

  12. Steven Morehouse

    Err.. of course it does, with a completely different circuit 🙂 It is pretty clear, really. There is one diagram (yours) clearly labeled as 5V to 3V and another one above it (different than yours) labeled 3V to 5V translation. Both clearly have an input and output marked, not corresponding to the way you’re using it. What am I missing?

  13. James Reuben Knowles Post author


    Thank you for your persistance. I see what you mean. It’s been some time since I wrote this article originally and believe I now remember my thought process. My circuit and his circuit are labelled differently because of the point of reference. For consistency I’m labelling input and output with reference to the interface circuit. Rob Fauldi is labelling with reference to the circuits being interfaced. Thus our “input” and “output” will be switched around.

    If you observe in the image, the lower half is a 5V-to-3.3V convertor per the wording on the left-hand side.

    The image of the circuits


    On my picture, I labeled my 5V side “input” as it’s the 5V input for the interface circuit. On Rob Fauldi’s page the 5V side is labeled “output” as it’s the output of the implied 5V circuit being interfaced.

    Correspondingly, I labeled the 3.3V side of my image “output” as it’s the 3.3V output for the interface circuit. On Rob Fauldi’s page the 3.3V side is labeled “input” as that’s the 3.3v input for the implied 3.3V circuit being interfaced.

    I apologize for the confusion.

  14. Brian

    @James Reuben Knowles,

    Thanks for working and posting this to the web. I was searching for logic level shift circuits to translate 5V PPM logic level signals to 3.3V. Your schematics and tests gave me the confidence and understanding to select and build a zener diode to ground shift level circuit. I used a Fairchild 1N4728A zener diode rated at 3.3V break down tied to ground and a 20 Ohm inline Resistor (Actually, I used two 10 Ohm resistors in series measured at 20.4 Ohms per multimeter.).

    I simulated the circuit in LTSPICE with a DC square wave of 5V @50Hz input to simulate a PPM signal. The simulated shift level circuit results were an output signal of 3.4V peaks for a circuit R= 20 Ohms. I simulated higher Ohm resitances but, the output voltage peaks fell to 3.2V when I used R > 20 Ohms (Simulated R=30, 100, 200, 220, 1K, & 10K.). Odd? My physical circuit with R=20.4 Ohms and a constant DC input of 5V was translated to 3.34V output as measured per my multimeter. Good E’nuff. Thanks!

  15. Pingback: lucadentella.it – Collegare Arduino a dispositivi a 3.3V

  16. Will

    Great stuff that clears up some points for a newbie like me. What would the scope show for a LM1117 solution?

  17. Pingback: ESP8266-01 Programming with an Arduino Nano | chisight

  18. Obs

    Will, LM1117 is a voltage regulator. That’s great if you want a stable 3.3 V supply voltage, not if you’re dealing with a digital signal.

  19. Pingback: Connecting Arduino to 3.3V devices | LinkSprite Learning Center

  20. Sherif Gamal Eldin

    The beauty about this post is that Mr. J. Rueben explained different circuits with accompanying scope diagrams, an image is better than a thousand words. For a digital designer like myself seeking a quick and informative idea of level shifters, I find the post very useful. Of course engineers as usual will add and try to enhance by suggesting op-amps and such to the circuit, that’s the way engineering minds work 🙂

    Very illustrative, simple, short and to the point post. Thanks.


  21. Pingback: 5V to 3.3V Logic Level Shifting Stragety | DK's BLOG

  22. Pingback: ESP8266 UART連接電路 | 可丁丹尼@一路往前走2.0

  23. ɥʇɐǝH pɹoɟɟᴉlƆ (@cliffordheath)

    You are abusing the input protection diodes of the 74HC245. It isn’t a level shifter, and its inputs are not 5V tolerant, so you aren’t supposed to pull inputs more than 0.5V above Vcc. If you do, you must limit current to 20mA. You could do that with a resistor. 1K would limit the current to 1mA, but (assuming 7pF input capacitance) also would limit speed to around 15MHz (bad for e.g. fast SPI).

  24. James Reuben Knowles Post author


    Thank you for your comments. I make no claims to expertise here.

    I used the 74LVC245, rather than the 74HC245. The data sheet I have is for the 74LVC245, which states, “inputs accept voltages to 5.5V.” The line that I specifically relied on when doing these learning exercises is as follows:

    “Inputs can be driven from either 3.3-V or 5-V devices. This feature allows the use of this device as a translator in a mixed 3.3-V/5-V system environment.”

    Source: TI data sheet SCAS218V –JANUARY 1993–REVISED SEPTEMBER 2010

    It’s entirely possible I overlooked something.

Leave a Reply