Warning to users of some vendors LCD keypad shields

I have one of the offending boards, and got lucky enough to run across this post just as I was about to plug it in. I cut the trace and dead-bugged a 1N35 onto it, and rocked on without trouble.

Thanks, berrybap, for posting this info.

I can not believe that this is still a problem after 2½ years.

Not having the confidence to seperate the LCD from the board (and wanting a permanent solution) I am going to make a shield board that goes between the LCD shield and the UNO. This will allow me to add the components between the shield and UNO and give me a permanent protection. I may even add a variable resistor to give some control over LCD brightness. This is not an asthetic solution but should protect the UNO from any damage.

It would be good to have a record of which shields by manufacturer (both official and clone) that actually work out of the box and those that definately have the problem. This has certainly convinced me to look at the official boards next time rather than the cheaper cloned boards.

My shield is a "DFRobot eBay clone" with identifying codes on the shield board - B74493 120900393

-- Lance

LAectronic: I can not believe that this is still a problem after 2½ years.

The world is full of faults. They are everywhere once you start to look around.

Not having the confidence to seperate the LCD from the board (and wanting a permanent solution) I am going to make a shield board that goes between the LCD shield and the UNO. This will allow me to add the components between the shield and UNO and give me a permanent protection.

Lance, When necessary, I think it is easier and cheaper to modify the LCD shield rather than create a intermediate shield. It is a pretty simple and inexpensive modification that in most cases does not require removing the LCD from the shield. Don't forget that do to a screw-up many years ago by the Arduino team, Arduino shields use a non standard pin spacing so you can just use a protoboard with headers on it for your intermediate shield. You either have to buy a pre-made shield or use stacking headers and bend them to get them to get them to align with the non standard spacing. Bent stacking headers do "work", but mechanically, they don't fit all that great and may eventually have electrical connection issues especially after many insertions.

If you don't really need backlight control (a feature that I think is a bit over rated anyway), a quick and easy solution would be to simply cut the D10 header pin on the LCD shield. The backlight will be permanently on but there will be no over current issue. The standard LiquidCrystal library that comes with the IDE doesn't even support backlight control, so for the most part the issue is only for those that either change the library for a 3rd party library or are attempting to write their own s/w to control the backlight.

--- bill

bperrybap: Don't forget that do to a screw-up many years ago by the Arduino team, Arduino shields use a non standard pin spacing so you can just use a protoboard with headers on it for your intermediate shield. You either have to buy a pre-made shield or use stacking headers and bend them to get them to get them to align with the non standard spacing.

You are right Bill, I have a stack of UNO proto boards and was going to use one of those. But after relooking at all the pics and identifying the pic that appears to match mine, it does seem to be an easy fix. My trace is on top of the board and easy to get to. I shall place a diode across the trace. (It really does seem to be the easier option)

Now the second queery: I have some 1n4148 with some 1n34A coming. Is the 1n4148 sufficient or should I opt to wait for the 1n34A to arrive?

Thankyou to everyone who has added to this thread. It is heartening to know that so many are prepared to share their knowledge and experiences to those of us who would have blundered around blindly unaware.

-- Lance

A 1N4148 should be fine. The current is a little over one milliamp for a 5V VCC. As I recall, these are rated at something in the 10's of milliamps. Dwight

The original post notes a problem with using a silicon diode, like the 1N4148, for this fix:

bperrybap: ... you can't use a typical silicon signal diode like a 1n4148 as the voltage drop is too high and the backlight will not go all the way off. I used a germanium diode 1n34a - which worked perfectly ...

To get the LED all the way off, the voltage on the transistor base has to be less than the forward voltage of the base-emitterjunction. That's about the same as the voltage across a silicon diode. It's not certain that the LED will go fully dark with a silicon diode. With the lower forward voltage of a germanium diode, the base voltage will be lower than the voltage across a silicon junction, and the transistor will be reliably cut off.

Thanks tmd3 for noting that.
I’d forgotten that the 1N34A was a germanium.
An option for using the 1N4148 would be to add
a power diode between the display and ground.
The drop across the power diode should safely turn off
the transistor.
It shouldn’t be enough to keep the other parts from not
working.
Dwight

I'm not sure that I know exactly where you contemplate adding a power diode in series with ground. If it's between the overall ground for the board and the Arduino's ground, then that will reduce the supply voltage as seen by the LCD board, and it will also make the Arduino signals drive to a negative voltage, as seen by the LCD board. It might work, or it might blow something up.

If the diode goes between the transistor's emitter and the board's ground, that bodes better. The LED won't get quite as bright. The base emitter junction may see a wee negative voltage, but not more than it can stand up to.

No, two diodes. One from the displays ground to the arduinos ground.
That one is a power diode. A schottky would be best to keep the voltage to the display
from being to low. The other a silicon diode, such as a 1N4148. There won’t be any
blowing up. There isn’t enough voltage or current involved.
Germanium diodes age with time.
Dwight

I still don't get it. The Arduino has several digital outputs that connect directly to the display. If you raise the level of the display's ground by a big diode forward drop, what keeps the Arduino outputs from going negative, relative the the display's ground?

Maybe the display claims its inputs can tolerate that; I don't know. But, if I'm understanding the notion correctly, I'm a bit leery.

dwightthinker: Germanium diodes age with time.

Me, too.

[ Edit: spelling ]

Most part use a diode on the input that clamps it. If you go below
its ground you’ll turn on the diode.
Note I said to use a Schottky power diode. Its voltage drop is less
than a normal silicon diode.
Also look at the drive ability of the computer when close to the rail.
You’ll see that it is no longer 20ma.
I doubt that you’ll have any problem. It is not good design but it
would likely work without problem and would completely turn off the
transistor.
I wouldn’t make a product like that but to fiddle with the display and
its bad design, it is not going to blow up the world.
If it really makes you squeamish, use a mos nfet transistor to ground
and you can then control it directly to the gate of the fet.
It is inverted but that shouldn’t be an issue.
Using a low voltage fet will easily shunt the current of the 4k3 resistor.
Dwight

I was looking and a typical nfet that would work is the 2N7002 that seems to be quite common. Dwight

Hello guys, If anyone still reads this topic.. as an arduino newbie, can I ask a possibly silly question ? I have just bought this LCD shield for messing about as it was cheap and plug and play. Can I not just cut the pin 10 header pin at the LCD shield so there is no connection to the arduino. I understand that might mean the backlight is permanently on or off , but if that is the only problem and the LCD is still fully usable apart from backlight adjustment that would be OK for me. I can't imagine the arduino would insist on something being connected to that pin would it ? I don't want to stack shields or anything like that Thanks

PS update - I just read bperrybap's previous post where he suggests the same. I should be more careful. Thanks anyway

Hi again,

Just did the above i.e. cut pin 10 and with the lcd pins set to 8,9,4,5,6,7 in the sketch, it runs the scrolling sketch just fine.Backlight full brightness. What more can I ask for 7 quid? I guess I can still stack shields, it's just that the lcd will have to be on top, but then it would be anyway if it's to be visible.

Hi and welcome.

It’s silly to not ask questions that may rise.
But it’s always a good idea to read an entire thread that is on topic, even if it has a large number of posts.
As you can see, this thread is still read when new posts are made.
Stacking shields still should be possible, but stacking a shield on top of a display shield (if possible at all) would be a bit silly.
If you would cut the pin off of the display shield, then pin 10 can be very well used by any shield between the Arduino and that display shield.
It takes some guts and some soldering skills, but in a later stage you could also repair the cut pin by replacing it by some other pin.

If you heat the soldered end of the pin on the shield, you can pull it out. It doesn't take that much to pull it put. That leaves a space between the shield and the arduino to put a short pin and a wire to bring pin 10 out. A piece of tape between on the shield to keep the end of the pin from shorting to the pad on the shield as well. One can then add the 1N34 or use a 2N7000 as I described ( it does invert the pulse width control but that is just a software patch. I just did this on my boards. It works fine. Dwight

I am a robotics guy and a retired electronics engineer. While I have used the Arduino for only about 3 years,I am new to this forum.

I have 12 of the very versatile DF Robot keypad 2X16 display shields (blue background-white characters only). I have modified all of them for my use for over a year or two.

I don't care, nor have I ever cared, about adjusting backlight brightness. As a roboticist I am far more concerned about having usable pins. I use only the Uno rev 3 boards and after development use the $4.95 enhanced pro-mini (Marlin P Jones), as a replacement for the UNO in the final system, thereby getting the UNO back for future use.

By merely cutting the trace to pin 10 on the DF robot board, as in post #1, the LED lights to full brightness and the entire shield draws only 24.5 ma from a 5 volt supply....PLUS... I get pin D10 available for doing real important stuff rather than the mundane task of controlling backlight brightness which I want on full blast, anyway.

The display board has a natural current limit resistor on the back in series to limit current this is why the entire Df Robot board draws no more than 24.5ma at full brightness.

If you have a small system with a necessarily small and weak battery and need the dimming or complete blackout to save the milliamps, that is different. I just leave mine on forever as long as the project is powered up as I choose sufficient battery capacity for this purpose and none of my stuff is miniature, limiting battery size.

A solution for those who want a lot of brightness and the extra digital/PWM pin. Sure, not for everyone but very easy and you get the free pin.

Richard

On some lcd keypads, D10 is not accessible from the shield since they don't have female headers on the top side of the shield. In those cases, if you don't want/need backlight control, cutting the D10 header pin from the lcd/keypad shield might be easier than finding and cutting a trace on the PCB.

It is possible to do brightness from code without any parts. In from an interrupt ( possibly feedback of a PWM signal ), turn D10 from pinMode() input to output with the static value of 0 as an output. This way you never drive the pin high ( the condition that over currents ). You still get brightness control. Dwight

dwightthinker: It is possible to do brightness from code without any parts. In from an interrupt ( possibly feedback of a PWM signal ), turn D10 from pinMode() input to output with the static value of 0 as an output. This way you never drive the pin high ( the condition that over currents ). You still get brightness control. Dwight

The s/w work around of using input mode and output LOW is mentioned in the first post and documented with some example code in a zip file in the second post.

--- bill