5V to 3.3V Logic Level Shifting Stragety Notes

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.


  • Checor | Jun 3,2013

    Thanks for the info! It would help a lot in my new project.

  • fabiodive | Sep 2,2013

    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.

  • James Reuben Knowles | Sep 3,2013

    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.

  • kilianc | Sep 21,2013

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

  • James Reuben Knowles | Sep 21,2013

    The circuit is the same. I changed the resistor from 10kΩ to 200Ω.

  • kilianc | Sep 21,2013

    Which one ? 😀

  • James Reuben Knowles | Sep 23,2013

    All of them. 😀

  • 5V TO 3V3 BI-DIRECTION :: | BRG | Jan 18,2014

    […] :: IIC | Arduino | Level-shifting | […]

  • 5V TO 3V3 BI-DIRECTION « Bir Robotic | Mar 17,2014

    […] :: IIC | Arduino | Level-shifting | […]

  • happycactus | May 20,2014

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

  • Lobna Amer | Jun 4,2014

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

  • communication between SD card and microcontroller | Mar 24,2015

    […] is schmitt trigger and you use a pasive converter (resistor) you could face problems) read this: http://jamesreubenknowles.com/level-…xperments-1741 http://www.rocketnumbernine.com/2009…evel-converter […]

  • chisight | Apr 10,2015

    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.

  • Steven Morehouse | Jun 13,2015

    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?

  • Eric B. Wertz | Jun 18,2015

    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.

  • James Reuben Knowles | Jun 18,2015


    Yes it’s always possible I’m wrong. However if I look at the XBee Level Shifting page, it shows both 5V to 3.3V and 3.3V to 5V.

  • James Reuben Knowles | Jun 18,2015

    Eric, I agree with your comments. This page is in dire need of an update.

  • Steven Morehouse | Jun 18,2015

    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?

  • James Reuben Knowles | Jun 18,2015


    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.

  • Brian | Sep 6,2015

    @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!

  • lucadentella.it – Collegare Arduino a dispositivi a 3.3V | Sep 12,2015

    […] sui passaggi di stato che non le rendono adatte per comunicazioni ad alta velocità. In questo blog post sono ben illustrate alcune di queste soluzioni e il loro effetto visualizzato su un […]

  • Will | Dec 27,2015

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

  • ESP8266-01 Programming with an Arduino Nano | chisight | Feb 1,2016

    […] deal with is the level shift beteewn 5V the Nano and the ESP which is 3.3V.  The solution is easy, http://jamesreubenknowles.com/level-shifting-stragety-experments-1741 says there are lots of options but programming is a rare task so power loss doesn’t matter, […]

  • Obs | Mar 14,2016

    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.

  • Connecting Arduino to 3.3V devices | LinkSprite Learning Center | May 11,2016

    […] them suitable for high-speed communications. Some of these solutions are well described in this blog post and their effects are shown on an […]

  • Sherif Gamal Eldin | Aug 12,2016

    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.


  • 5V to 3.3V Logic Level Shifting Stragety | DK's BLOG | Nov 21,2016

    […] on 12 March 2013 by James Reuben […]

  • Leave a Reply

    %d bloggers like this: