I saw that these used the traditional interface for 2x16 displays which is a bit of a pain in the ass. I have I2C adapters, but they are designed for 1 led not 3. Then I saw that Grove provided a display board with built in I2C for a reasonable price. I decided to buy one.
When it arrived I found that it uses a connector slightly smaller than the .1" spacing on a breadboard and as such my female jumper wires would not fit. I could order the correct male plug and crimp wires into it but where is the fun in that. I figured out that if I took the insulating cap off of every other wire I could connect all 4:
Now I am getting very excited. I have already downloaded the library and wired it up to my arduino nano. I load the "Hello world" sketch and upload it and suddenly the screen turns a vibrant red! Success!
Wait, it does not say "Hello world!", oh dear. I look at it from an extreme angle and I see the words just barely. I know what this problem is, every 2x16 display has a place to attach a potentiometer to adjust contrast. I look on the back and see there is no potentiometer, no place to attach one.
I am now thinking that this brilliant I2C controller can adjust the contrast magically. I read the docs and see nothing, I read the source code and see nothing.
At wits end I google how to adjust the contrast on these things and all I find is this post by Shaopeng.zhang: Talk:Grove - LCD RGB Backlight#How to adjust the contrast
Thank you Shaopeng.zhang, whoever you are. I don't know if I would have figured that out without you.
It seems that Grove decided to install a static resistor where the contrast adjust potentiometer should go.
I talked to the seller and they said it was something that happened every so often and I got a full refund.
Great, but what to do with this display? Lets fix it.
While you probably can't see in the picture R7 is labelled 102 which makes it a 1k resistor. This clearly will not do.
I get my trusty soldering iron and while gently leaning it against the R7 resistor I applied a generous amount of fresh solder. The tiny resistor popped off quickly.
I then carefully removed all of the old solder using solder wick, being sure not to lift up the pads. Once the pads were flat and smooth I heated them with the corner of my iron and applied fresh solder to each pad.
I cut the wires off of a through hole resistor and bent them to make them easier to handle. I rested one end on the blob of solder and gently pushed down with the iron until the wire went into the solder, then removed the iron to lock it into place. I did this for both pads.
Now that I have the two pads broken out for me I can easily attach alligator clips to them. I wire it all back up and start trying out resistors. The post says the higher values make it lighter and it is too light so I try lower values.
After trying a few I found that 220 ohms gave me a nice high contrast display. The display is upside down because that was the easiest way to not put pressure on the wires:
Now I know which part to put in there. I could order a 220 ohm resistor in the correct package, but what fun is that?
I removed the pins the same way I removed the resistor before and cleaned and tinned the pads the same way again.
This time I cut one wire of a through hole 220 ohm resistor down to the correct length, but leaving the other wire long. I pinned the short wire to the pad just like before. Then I positioned the other wire over the pad and cut off the excess and pinned it down as well.
The result:
I used a bit of rubbing alcohol to remove the flux. I put electrical tape between the board and the resistor wires so they don't short on those vias. I then put some tape over the repair so it won't get knocked off and my screen is good to go.
This is a quick and dirty repair but it got the job done. With a hot air blower and some solder paste you could actually repair it with a proper SMD resistor, but that is something I will cover in another post.