I would like to control a 3v LCD using an Arduino Uno, which is 5v. I would like to avoid using a logic level shifter. Would a 3v zener diode be appropriate for translating the Arduino’s 5v HIGH to 3v? How quickly would a diode such as 1N5225B react? Thanks.
Welcome to the Tech Forum!
A level shifter would be ideal, but there are a few other methods which may be reasonably reliable. A 3V zener might be a valid option, though you would also need to put a resistor in series with the input to prevent excessive current draw from the Arduino and through the zener diode. I could not find the capacitance of the 1N5225B, but for the BZX79-C3V0,113 3V zener diode, its capacitance is about 450pF, so I would expect you could get at least 1MHz switching speeds with a reasonably sized resistor.
One might also get by with just series resistors if the LCD has protection diodes integrated on its input pins. The diodes (if present) limit the voltage to a safe level above the chip’s supply voltage (typically about 1/2 a volt), and the added resistor would limit current through the diodes to a safe level (generally they can handle no more than maybe 5mA to 10mA).
You can also make bi-directional level converters with just two resistors and a single MOSFET, as they do in the Sparkfun BOB-12009. They use the following schematic in their board:
Of course, if you don’t want to make that circuit, you could just get that board.
I found a write-up here which goes over many options and gives some of the pros and cons for each.
David, this is really helpful. Would it be possible (and advisable) to use a simple red LED with forward voltage of 2v, along with an appropriate resistor to limit current draw to about 15 mA? Would the voltage after the LED then be 3v? I appreciate the very prompt reply and advice.
Hello again David,
Our team will look into this and get back to you.
Possibly, but I wouldn’t recommend it. If you put the red LED in series between the 5V output and the 3V input, and then at the node between the cathode of the LED and 3V input, you placed a resistor of appropriate value from there to ground, it would probably be functional.
The trick would be to set the resistance correctly, based on the characteristics of the particular LED used (the forward voltage drop will vary with forward current) and with the understanding that as the output current of the Arduino increases, its output voltage decreases. For instance, with a 20mA output, the Arduino output voltage can drop by as much as 0.8V to 4.2V. You’ll have to factor this into your calculations and probably do actual testing to be sure it worked under all extremes of supply voltage range and ambient temperature conditions that it may encounter in the end application.
Even if you configure it optimally, it still has the drawbacks of drawing quite a bit of current, and not switching very fast compared to typical logic circuits.
This is very helpful. I appreciate your informed advice. I think I will first experiment with the 3v zener option. Thanks again.