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.
This entry was posted in Micro & Hardware and tagged , . Bookmark the permalink.

12 Responses to 5V to 3.3V Logic Level Shifting Stragety Notes

  1. Checor says:

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

  2. fabiodive says:

    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.

  3. 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.

  4. kilianc says:

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

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

  6. kilianc says:

    Which one ? :D

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

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

  9. happycactus says:

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

  10. Lobna Amer says:

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

  11. Pingback: communication between SD card and microcontroller

Leave a Reply