Warning to users of some vendors LCD keypad shields.

liudr: Thanks Bill. That's right. It's unfair to compare my back pack with their shield. My back pack has an ATMEGA328 so it starts up and recalls back light amount from EEPROM but their shield has no such mechanism. But what about using a depletion mode MOSFET? if the D10 is input on reset, the MOSFET conducts, unless you turn it off by a 5V. Will that solve this shield problem?

There are many ways to redesign the circuit solve the problem. The final design can potentially be influenced by cost. mosfets are great, but a mosfet solution will cost more than a simple NPN transistor design. But then I'm very sensitive to costs as I came from an environment of building products in the 100k/month range. With that volume, pennies mattered.

--- bill

I just received a DFR-007

I am unsure how to fix this problem

can this unit be fixed with the resister or diode ?

There are 2 places that I can see that are labled "K"

One is open and the other is at the top of the LCD PCB

or should I just send it back

SolarPanels, You should be able to use either the diode or the resistor. They prevent a "short" in different ways. If you don't ever set D10 high there is no issue to worry about. See reply #3 for how you can still do backlight control with this design.

The problem is that if you return it, there is no guarantee that a shield you get from somebody else won't have the same issue. I've seen several that all seem to have copied the same circuit.

The simplest would be to just keep it and either not use backlight control or use it as described in reply #3.

--- bill

I've successfully fixed the DFR-007 backlight cct error using a 1N5819 Schottky diode (a 1N5817 or 1N5818 even better) inserted between the base of Q1 and the pin 10 post (diode cathode to pin 10). The trick was to note the PCB track between these two points is situated on the top surface of the board running out from under the LCD board, through the gap between the J1 and J2 connector strips (referenced to the DFR-007 cct http://www.robotshop.com/content/PDF/dfrobot-lcd-keypad-shield-schematic.pdf and towards the outside edge around to the pin 10 post.

See the attached photos for further guidance.

Code to test with:

//Sample using LiquidCrystal library
#include 

/*******************************************************

This program will test the LCD panel and the buttons of
the DFRobot LCD Keypad Shield for Arduino
Product code : RB-Dfr-07
http://www.robotshop.com/dfrobot-lcd-keypad-shield-arduino-1.html

Note cct error identified by Arduino forum discussion at:
http://arduino.cc/forum/index.php/topic,96747.0.html
which advises insertion of a Germanium 1n34a or a Schotky 1N5819
diode between pin 10 and the base of Q1 (K to pin 10).

sample code originally by Mark Bramwell, July 2010
modifications by Dion Weston, March 2012



********************************************************/

// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// define some values used by the panel and buttons
int backLight   = 10;    // LCD Panel Backlight LED connected to digital pin 10
int lightLevel  = 255;   // Initialise light full on
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// read the buttons
int read_LCD_buttons()
{
 adc_key_in = analogRead(0);      // read the value from the sensor 
 // my [Mark Bramwell's] buttons when read are centered at these valies: 0, 144, 329, 504, 741
 // we add approx 50 to those values and check to see if we are close
 if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
 return btnNONE;  // when all others fail, return this...
}

void setup()
{
 lcd.begin(16, 2);              // start the LCD library
 lcd.setCursor(0,0);            // move cursor to beginning of line "0"
 lcd.print("Backlight adjust"); // print a simple message

}

void loop()
{
 analogWrite(backLight, lightLevel);
 lcd.setCursor(13,1);            // move to position 13 on the second line
 lcd.print(lightLevel);

 lcd.setCursor(0,1);            // move to the begining of the second line
 lcd_key = read_LCD_buttons();  // read the buttons

 switch (lcd_key)               // depending on which button was pushed, we perform an action
 {
   case btnRIGHT:
     {
     lcd.print("LED On          ");
     lightLevel = 255;
     break;
     }
   case btnLEFT:
     {
     lcd.print("LED Off         ");
     lightLevel = 1;
     break;
     }
   case btnUP:
     {
     lcd.print("LED Fade Up     ");
     if (lightLevel < 255) lightLevel += 1;
     break;
     }
   case btnDOWN:
     {
     lcd.print("LED Fade Down   ");
     if (lightLevel > 1) lightLevel -= 1;
     break;
     }
   case btnSELECT:
     {
     lcd.print("Select          ");
     break;
     }
     case btnNONE:
     {
     lcd.print("                ");
     break;
     }
 }

}

Overview.jpg|1292x785

Side View.jpg|974x702

Fix Detail.jpg|1056x820

Thank you dweston and bperrybap

I just noticed that the product page says

"Do not use Pin 10 while this shield is connected"

http://www.robotshop.com/productinfo.aspx?pc=RB-Dfr-07&lang=en-US

I do not remember that statement when I ordered it

impressive if they have responded to this info so quickly

A 1N5711 or a REAL Germanium (1N34 - 1N60) would be somewhat easier to mount. Any small signal germanium or schottky diode would work as well. If one pulls the base of the 'switch' transistor below about.5 volts, the transistor is in cut off, non conducting. There is however an easier method that doesn't require cutting traces and 'hanging parts on the display... and that is to replace Q1 (9013) with a BS170 or a VN2222, VNK10 or any other n channel small signal enhancement type Mosfet. The circuit looks like it was designed for a Mosfet and someone 'goofed' and put a bi-polar device in it's place.

IMO and direct experience.

Doc

Docedison: A 1N5711 or a REAL Germanium (1N34 - 1N60) would be somewhat easier to mount. Any small signal germanium or schottky diode would work as well. If one pulls the base of the 'switch' transistor below about.5 volts, the transistor is in cut off, non conducting. There is however an easier method that doesn't require cutting traces and 'hanging parts on the display... and that is to replace Q1 (9013) with a BS170 or a VN2222, VNK10 or any other n channel small signal enhancement type Mosfet. The circuit looks like it was designed for a Mosfet and someone 'goofed' and put a bi-polar device in it's place.

IMO and direct experience.

Doc

On my shield it isn't easier to replace the transistor. This is originally what I wanted to do. The problem is that the transistor is on the shield but it is under the LCD module so it requires removing the LCD module to get to it. Since the lcd module is soldered to the shield it requires de-soldering all 16 pins on the lcd module header. I decided it would be easier to simply do a quick cut and solder in the diode which is completely hidden when the shield is installed. Plus since I didn't have any surface mount FETs and my though hole FETs wouldn't fit under the LCD module when it was soldered back in place, it was my only option.

But if PWM backlight dimming is not needed, then the software work around is by far easier than any hardware mode.

--- bill

I DO Apologize for that BLUNDER, I only looked at it from an engineering (electrical not mechanical) standpoint and the Mosfet is far and away the easiest fix, for that matter good engineering where the Bi-Polar device is just CHEAP when surplus parts are chosen (as they frequently are). I do however stand by my choice of parts, there are any number of small signal schottky diodes that would be a better choice The 1N5711-2 or a now discontinued but available as surplus HP "Hot Carrier" diode HP 5082-0023??? is one and certainly a REAL Ge. diode would work as well.

Doc

Hey! I actually own a “DFRobot I2C / TWI LCD1602 Module”

wich it comes with the “DFRobot I2C LCD Backpack”

I would like to know wich is the easiest way to fix the BJT issue in this case. Any one can confirm that the ‘A’ of diode will be set on BT (P3 of PCA8574) and the ‘K’ on the base of BJT thanx in advance

In another post, the user 'dfrobot' (presumably somebody from DFRobot), mentioned that the new version of the DFRobot LCD shield does enable pin 10 to control the brightness. I tested the board I had ordered from Robotshop.com on May 31st, and setting pin 10 via PWM to 0..255 does control the brightness level.

Sort of off topic but I have had business with Robot Shop before and they ARE one of the BEST companies I have found to do business with. There are a lot of places to buy Cheap parts. Robot Shop is where I go when I need a 'non' cheap part. If the part cost is over $50.00 That's where I buy it, They have one of the BEST customer Service Dept's I have ever dealt with..... Robot shop is "on" a complaint immediately and they have yet to disappoint me After 2 4D Systems 32PT SGC displays and issues with the first one... It didn't look new as the plastic shield cover on the LCD was bubbled and had fingerprints under the film. Robot Shop sent me a new one and issued me an RMA the next business day. This is the reason I decided to buy my second from Robot Shop rather than shop around for a better price or faster/cheaper shipping. To MY Shame I found out from 4D Systems that all their 32PT SGC devices look that way as the film is lifted to inspect the LCD for any cosmetic damage prior to assembly.

Doc

MichaelMeissner: In another post, the user 'dfrobot' (presumably somebody from DFRobot), mentioned that the new version of the DFRobot LCD shield does enable pin 10 to control the brightness. I tested the board I had ordered from Robotshop.com on May 31st, and setting pin 10 via PWM to 0..255 does control the brightness level.

I bought mine a year ago and yes, it have the issue :(

I have been done the mod adding a Diode (IN5819) how you can see in the schematic (I have marked green the new diode in the graphic) . Now I have a new issue with the brightness wich have been decreased...

CarlosGz: I have been done the mod adding a Diode (IN5819) how you can see in the schematic (I have marked green the new diode in the graphic) . Now I have a new issue with the brightness wich have been decreased...

That is because the diode does not go in series with the pullup resistor to the base of the transistor but in series with the D10 to connection of the base of the transistor.

--- bill

bperrybap:

CarlosGz:
I have been done the mod adding a Diode (IN5819) how you can see in the schematic (I have marked green the new diode in the graphic) . Now I have a new issue with the brightness wich have been decreased…

That is because the diode does not go in series with the pullup resistor to the base of the
transistor but in series with the D10 to connection of the base of the transistor.

— bill

maybe now i have a bigger problem lol, so, in this case I have to connect the Anode to BT (D10) and the Catode to the the base of the transistor?

To be clear, something like this?

Almost, The diode is flipped/reversed. (I think you would have quickly figured it out) The diode is used to isolate D10 from the circuit when D10 is high. The pullup resistor is used to turn on the transistor. The backlight will be on if D10 is input or HIGH. Setting D10 to low turns off the backlight. The diode allows D10 to yank the pullup down to gnd to turn off the transistor when D10 is low.

It works but really isn't a good design, I wouldn't design a circuit like this.

I did it this way because I couldn't easily desolder the LCD on the shield I had to replace the transistor with an FET. (The transistor was underneath the soldered LCD module)

--- bill

bperrybap: Almost, The diode is flipped/reversed. (I think you would have quickly figured it out) The diode is used to isolate D10 from the circuit when D10 is high. The pullup resistor is used to turn on the transistor. The backlight will be on if D10 is input or HIGH. Setting D10 to low turns off the backlight. The diode allows D10 to yank the pullup down to gnd to turn off the transistor when D10 is low.

It works but really isn't a good design, I wouldn't design a circuit like this.

I did it this way because I couldn't easily desolder the LCD on the shield I had to replace the transistor with an FET. (The transistor was underneath the soldered LCD module)

--- bill

Hey, thanks for your help, now I understand the question. I finally won't be able to fix my lcd because of the pcb design and the components placement, so I decided to buy a new one at http://www.electrofunltd.com/ and I have been testing the FMalpartida's library with nice results... By the way, I would like to reupload the schematic with the diode in a correct placement in case it can help someone :)

LCD_Mod3_goodversion.jpg|758x651

Hello,

Not quite sure how to pick the most appropriate diode here for the D10 fix, could somebody take a look at the following

http://www.maplin.co.uk/search?criteria=diode&page=1

and advise which would be a good choice?

Many thanks,

Amadeus

To answer my own question, and to help other users, I found that the "1A Schottky Barrier Rectifiers" on that page, in particular a 1N5817 worked well. Trick was to cut the track after bugging the diode on.

Worked well until I got over-confident with the "brief" part below:

Briefly (and I mean just a brief touch) connect the wire from D10 to Vcc.

Cue smell of burning and a slighty dimmer backlight, no on/off control. I imagine the transistor went.

Oh well. You win some you lose some.......