Home | Product Categories | Monochrome | LCD-10168

Graphic LCD 84x48 - Nokia 5110

sku: LCD-10168 RoHS Compliant

Description: The Nokia 5110 is a basic graphic LCD screen for lots of applications. It was originally intended for as a cell phone screen. This one is mounted on an easy to solder PCB.

It uses the PCD8544 controller. The PCD8544 is a low power CMOS LCD controller/driver, designed to drive a graphic display of 48 rows and 84 columns. All necessary functions for the display are provided in a single chip, including on-chip generation of LCD supply and bias voltages, resulting in a minimum of external components and low power consumption. The PCD8544 interfaces to microcontrollers through a serial bus interface.

Note: This uses the same driver as the Nokia 3310 LCD.

Dimensions: 45x45mm

Documents:

Pricing

Out of stock



9.95
8.96
7.96

out of stock
backorder allowed


price
10-99
100+

Backorder

Add to Wish List

Autonotify


Comments 122 comments

  • This LCD (I have the old-old kind) is absolutely my favorite. Yes, it has a board-to-glass connector that ranges from bad to abysmal, but it offers such a simple interface and so many pixels for so little money (obviously less if you buy only the panel.) Here are some clever things I’ve discovered:
    Will fully operate on as little as 2.0V. That’s power (Vdd) and i/o. It can be driven at 2MHz at these speeds; in fact, the LCD will work at even lower voltages but the contrast fades quickly and your microcontroller will likely approach its lower voltage limit too.
    The initialization sequence is magic. Here it is, in case you were, like me, frustrated over and over again with varying sequences that others claimed to work but they didn’t for you:

    0x21,   //switch to extended commands  
    0xE0,   //set value of Vop (controls contrast) = 0x80 | 0x60 (arbitrary)  
    0x04,   //set temperature coefficient  
    0x14,   //set bias mode to 1:48.  
    0x20,   //switch back to regular commands  
    0x0C,   //enable normal display (dark on light), horizontal addressing  
    

    Reset/initialization can be picky – the datasheet says that the delay from power-up to reset mustn’t exceed 30ms. What I found to be the best is to set SCE low and reset high at system bootup, wait 5ms for voltages to stabilize, lower reset, delay by ~1uS (1 nop @ 8MHz will do), raise reset then send it the initialization sequence above.
    The LCD will work with the chip-select pin (SCE) tied to ground. This means that if it’s the only device on the SPI bus, don’t bother framing the i/o with a chip-select pin. If the bus is shared, frame the entire transaction, not every individual byte you send to the LCD. Interestingly, the display also seems to work fine with a floating Vdd pin – it must draw sufficient power just from i/o via clamping diodes; not surprising when you consider how low-power it is.
    The Vout pin: Looks like you don’t have to worry about it on this product, but the bare LCD will generate positive 6-9V on that pin. This wasn’t totally clear to me from reading the datasheet.

    • Kuy – good info… A few comments:
      (1) I confirm this intialization sequence works, with the clarification noted in #2 below.
      (2) The second command byte (the 0xE0 shown above) is not arbitrary. It is 0x80, or'ed together with a 7-bit Vop value. I found my display to be somewhat sensitive to this value. At Vop=0xBF, my unit was initializing electronically, but had a blank display (or solid-black, I can’t remember now.) Anyway, I had to play with this value, and 0xB3 ended up working for me, so if you are initializing to this sequence and having trouble, try varying this parameter. The technical details of this parameter are explained in the datasheet, section 8.9, but really, you will just have to play with it.
      (3) I didn’t find reset/init to be all that tricky, but it’s possibly because I’m powering the display unit from a port pin. That’s right, it only draws somewhere around a mA or less, so I just use an output-configured port pin to run the display VDD. (This lets me turn off the display easily when I want to go into low-power Sleep mode on my micro.) So I let my micro do it’s own reset sequence with all my port pins (including Display VDD, !Reset, and !SCE) at “0”, and when I’m ready, I set, in sequence:

      VDD = 1  
      !SCE = 1  
      !Reset = 1  
      

      These end up coming in a 1 us per instruction sequence (running a PIC 18F at 4 MHz.)
      Note the datasheet says reset can be low when VDD is applied, and then has to be at least a 100ns “low” pulse. So powering up VDD, then applying !SCE at 1 us and !Reset at 2 us meets that spec just fine. I have had perfectly consistent startup operation with this sequence.
      (4) !SCE tied to ground – yes, you could, but I’ve had fine results framing each byte with the !SCE signal – there’s nothing wrong with that. Yes, framing a whole transaction is fine, too. Note the datasheet timing diagrams show that !SCE serves a reset function on the incoming serial shift register, so if you ever get a glitch in your serial transmission that gets the bit count off, respecting the !SCE timing (whether on byte- or transaction-basis) will automatically get the display controller’s serial receiver synchronized back up on the next byte or transaction.
      (5) If you are using a PIC to run ths thing, and using the PIC’s USART or EUSART in a synchronous mode, be sure to note that the LCD controller expects the MSBit of each byte to be transmitted first on the serial line. The PIC 18F EUSART transmits the LSBit first. For now, I have lots of extra code space, so I’ve wasted a 256-byte section on a lookup table that reverses the bits in a byte. This way, I just write my initialization code normally, and I have a TransmitCommandByte() function that looks up every byte it sends so I don’t have to think about that.
      Once I get to a final version (or at whatever point I need to conserve code space) I’ll just establish my final command sequencing, and hard-code in the bit-reversed values so I can get rid of that lookup table.
      As a separate issue from the command bytes, all my graphic data are already created with the proper bit orientation, so I don’t have to look them up to do the reversal.

  • If you wanna make the first (simple) example code at http://www.arduino.cc/playground/Code/PCD8544 work you should add (in void LcdInitialise(void))
    LcdWrite( LCD_CMD, 0x21 ); // LCD Extended Commands.
    LcdWrite( LCD_CMD, 0xBf ); // Set LCD Vop (Contrast). //B1
    LcdWrite( LCD_CMD, 0x04 ); // Set Temp coefficent. //0x04
    LcdWrite( LCD_CMD, 0x14 ); // LCD bias mode 1:48. //0x13
    LcdWrite( LCD_CMD, 0x0C ); // LCD in normal mode. 0x0d for inverse
    (taken from the second code example) and also in the beginning of your code:

    define LCD_CMD 0

    • You’ll want to put a command byte of 0x20 in there, after the 0x14, and before the 0x0C. This is needed to put the display back into its “basic” command set, so it will correctly recognize the 0x0C command byte that puts it into “normal” (not inverse) display mode.

  • Why is the diode missing in the working example?

  • Hello.
    I am having problems to get this LCD working with Arduino
    (I’m just a newbie)
    I’m trying it with the first Arduino example, linked above, using the initialization sequence pointed by Kuy and Member197735 (thanks to both).
    I have readed carefully all the comments, and recomendations. But I should be missing something.
    I’m using voltage dividers to supply 3V in the inputs of the LCD, because of the Arduino works in 5V. LCD Vcc and LED are powered from the 3.3V output of the Arduino. The LCD only displayed something when I used: R1=470K,R2=820K. I have tried several values to obtain 3V, but the LCD showed nothing. I don’t understand that.
    This is my circuit and this and this is what the LCD is showing.
    Any help would be very appreciated.
    Thanks!

    • I answer my self:
      I powered this PCB from the 5V line of Arduino, and used 5V logic, directly from the Arduino’s digital lines, without voltage dividers.
      It worked very well, including the Arduino example linked above.
      I also used a 270-Ohm resistor to limit the current in the backlight leds.
      This is a very nice and cheap display!

  • Got it working using the 5V straight from the Arduino. Also used the ‘Example Code’ cited above, but modified the pin assignments to fit my setup.
    You can check out my setup here.

  • I would like to know the measures of the board/LCD. Also I would like to know the schematic and if the LCD have back light.
    Thanks.

    • I think it does have a backlight… the datasheet is just for the display controller IC. The photo of the PCB shows a pin labeled LED.

  • Fantastic! It appears from your example link that this uses the same controller as the Nokia 3310 that I’ve already used in past projects. The only thing that made it so cumbersome was trying to connect to its fine pitch press on type connector. This gives me a great low cost display option that is easy to connect to.
    If anyone doesn’t have experience with this LCD, take a peak at the Arduino example link above to see just how easy it is to use. If you use plain C on your AVRs, I have sample code on http://tinkerish.com.
    Great job sparkfun!

  • Fantastic! It appears from your example link that this uses the same controller as the Nokia 3310 that I’ve already used in past projects. The only thing that made it so cumbersome was trying to connect to its fine pitch press on type connector. This gives me a great low cost display option that is easy to connect to.
    If anyone doesn’t have experience with this LCD, take a peak at the Arduino example link above to see just how easy it is to use. If you use plain C on your AVRs, I have sample code on http://tinkerish.com.
    Great job sparkfun!

  • Here is a PicBasic Pro example for the 3310, which should be compatible with the 5110. http://www.picbasic.co.uk/forum/content.php?r=174-Using-Nokia-3310-LCD

  • Here’s an AVR example in C: http://pastie.org/1332371

    It’s for the ATtiny2313 but it should work with just about any AVR.

  • If you want to wire up several up these to a single microcontroller, you might take advantage of my freshly GPL’d C++ driver library for PCD8544 devices. It’s templated, so you can avoid duplicating code all over the place. Here’s a picture of two PCD8544 screens running off of an ATmega328. (The screens are operating independently, even though they happen to be showing the same logo graphic in that picture.)



  • The datasheet and examples imply that this runs on 3.3V, but I don’t see it mentioned explicitly anywhere. Is that correct?

    • Yes this runs on 3.3V

    • In the datasheet, check Section 11, DC Characteristics. This table shows VDD2 (when used with internally generated VLCD) as min 2.7V and max 3.3V.

  • Is there any more documentation available for the additions to the LCD? For example, the datasheet has no information (that I could find, at least) on the LED. Everything seems fine on 3.3V, but what is the current limit on the LED? (note: if it wasn’t for work, I would just mess around with it myself.)


    Thanks,

  • I made some changes/additions to the example code linked above. The main addition is a function that makes it easy to turn individual pixels on/off.


    The code is here: https://github.com/centerblack/PCD8544_Arduino/blob/master/PCD8544.pde


    There’s some examples of drawing a world map, lines, rectangles, etc.

    • Syndicated,


      The Pin layout and defines don’t seem to match up with the actual board.


      define PIN_SCE 7 // LCD CS …. Pin 3

      define PIN_RESET 6 // LCD RST …. Pin 1

      define PIN_DC 5 // LCD Dat/Com. Pin 5

      define PIN_SDIN 4 // LCD SPIDat . Pin 6

      define PIN_SCLK 3 // LCD SPIClk . Pin 4

      // LCD Gnd …. Pin 2

      // LCD Vcc …. Pin 8

      // LCD Vlcd … Pin 7


      For the PCD8544 this seems to be the correct layout


      define PIN_SCE 3

      define PIN_RESET 4

      define PIN_DC 5

      define PIN_SDIN 6

      define PIN_SCLK 7

      define PIN_LED 8


      Is there something I’m missing how you got this to work?

      • The defines specify which pin on the Arduino is connected to a particular pin on the display (not what pin on the LCD is what).

  • Can we have some data on the LED pin?

    • For those interested, I have taken a few measurements of the current draw of the LED backlight of my LCD. As I said earlier, powering the LED with 5V external has caused permanent damage to one, perhaps two of the four LEDs. So, use the following graph at your own risk.
      I will update this graph once I get a new LCD to test.

      • Thanks for providing the graph.

        People have been asking what resistor to use with 3.3v. I’ve been using a 220Ohm resister to limit the current with a 3.3v supply. The voltage drop on the resistor is a little over 0.5v and the current is 2-3mA which is about right for your graph. I think this is safe for not burning the LEDs. It provides plenty of light when you need it and doesn’t drain the batteries too much.

  • FWIW I have connected this LCD with a 5V power supply to a 5V Arduino board with no level conversion and it worked. Presumably this may reduce the lifetime of the LCD.
    According to the Datasheet this is operating within the “Limiting Values” listed on page 17 of the driver IC. “Stresses above those listed under limiting values may cause permanent damage to the device.”

    • I am attempting to use this with a Duemilanove (ATmega328). Up til now, I have been powering it with the 3.3V line, including the LED. The datasheet for the LDC claims: “VDDmax = 5 V if LCD supply voltage is internally generated (voltage generator enabled).” The logic levels should be kept from 2.7V to 3.3V. Since the Duemilanove uses 5V logic levels, I am using a simple voltage divider on the communication line with no issues.
      Now, when I attempted to use the board on 5V, some of the magic smoke escaped. It may be just the LEDs, since now one doesn’t work and another is very dim.
      Summary: Use 3.3V logic, and 3.3V for the LEDs and you should be okay IMO.

      • I think only the backlight LEDs might have a problem with 5V.
        It says under the absolute maximum ratings section of that datasheet that VddMAX=5V (internally generated voltage) and VinMAX= Vdd+0.5. So I would think that 5V logic is ok as long as the power supply is at 5V also.
        Where does it say that “the logic levels should be kept from 2.7V to 3.3V”?
        Anyway, I haven’t tried this out yet. I’ll try and get it running at 5V with the backlight hooked up to the 3.3V on my uno.

        • The Absolute Maximums section of a datasheet (also known as Limiting Values as in the Philips datasheet here) is only used to specify conditions that might cause permanent damage to a device, and should not be used to infer normal operating parameters.
          Normal operating parameters are found in the DC Characteristics and AC Characteristics tables. Note that in DC Characteristics, the VDD2 is listed as min 2.7V and max 3.3V. This is the manufacturer’s specification for how to run the device to its specified performance.
          Also note that logic levels in the DC Characteristics table are constrained to be between VSS and VDD.
          So in summary:
          DC/AC Characteristics tables tell you how to run the device in its normal operating range, to achieve manufacturer’s specified performance.
          If you run outside this range, performance is not specified, and you’re on your own. (Maybe it won’t work at all, will work inconsistently, or maybe it will work but other specs will be off – it may draw more current, timing may be off, etc…)
          Running outside the ranges listed in Absolute Maximums is likely to cause permanent damage.

          • The maximum logic value of 3.3 volts made me cautious of driving the LCDs at the native 5 volts of my Teensy AVR. That said, running purely off 5 volts seems to do no harm to the LCD.
            EDIT: Perhaps not. My LCD ended up only being able to display every 2nd row of pixels, and out of frustration, I damaged the screen further.

      • It would be nice to have a real spec on the LEDs, though. After looking at BlackJester’s graph I went ahead and wired the LEDs to 3.3 with no current limiting resistor and all seems fine — but I don’t really know if I’m limiting the life of the parts….

  • How do i wire this up to my arduino as the pins on the example do not match the pins on the board

    • It depends on the code that you are using to control the LCD. If you are using the Arduino example above, the pins are defined in the beginning of the code.

  • Does anyone know the diode rating and package size, also does anyone know where to get the rubber ferroius connector behind the LCD mine is defective. Has anyone come into issues with the breadboard the LCD is connected to, a few aren’t working for me.

    • Yes, we have noticed that the PCB was bowing and as a result the LCD now only works when we press down on the metal strip at the top. I hope that only a small number of these LCDs have this problem. We’re expecting a shipment to arrive today, I will be running more tests.

      • I have two display boards that both work, but I do see the bowing along the “top” edge of the metal bracket. I haven’t taken one apart yet, but I assume this is the edge nearest the elastomeric strip, which is creating this bowing force.
        I wish the designer(s) had put one more hold down tab on the metal bracket (like the pair on each side, which go down through the PCB slots) along this top edge, to minimize the board bowing. There are traces running through there, but it shouldn’t have been hard to route a couple of signals around such a slot…

      • I got two of these defective boards. I tested one with every mechanical thing I could think of to fix it, even soldered a paper clip as a spring to hold pressure from the back side. Nothing worked permanently. I ended up cracking the glass trying just to get the thing to work! I cracked it more out of frustration.
        My second one had the exact same problem. I took the glass off and have applied superglue to the back of the glass and am clamping it (more gently this time) overnight to try to just get my $20 worth (at this point) out of the last one I have.
        Edit: After leaving glue to dry overnight, LCD simply does not turn on anymore. All the connections are good, but absolutely nothing shows on the LCD now at all. Only the LEDs come on.
        I suggest no one buys these. For $10 you are just buying frustration… LCD won’t work at all.

        • Did you get either of the LCDs to display anything, at any time? Is it possible that the connections were OK, but you were not initializing or driving them correctly? Or did they start to work at one point, and then fail at some later point?
          When I originally tried to get mine working, I was seeing NOTHING on the display. Then I had to get my initialization sequence correct, and adjusted my Vop value (ultimately using a byte of 0xB3) before the screen would display anything visible at all.
          Note that the backlight LED’s are soldered onto the breakout board, and have nothing to do with the circuitry of the controller and LCD. So just because the backlights are shining doesn’t tell you anything about the operability of the LCD itself.

  • Thanks Sparkfun! Good to be able to buy it as a standalone display at a reasonable price.
    I have published sample code for Bascom AVR on AVR freaks:
    http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_type=project&item_id=887
    I have also published a bitmap converter:
    http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_type=project&item_id=903
    BR /Niclas

  • It looks like the board just has 4 white LEDs in parallel and no current limiting resistors. To drive them safely from 5V you should probably use something along the lines of at least a 22 Ohm resistor which should limit the current to 80mA (20mA per LED).

  • I have been running this at 5V with no problems, I have not been using the back light. Love this thing, need a few more. @ 5v mine pulls about 1ma. Not to bad.This + openlog + atmega328 @8 mhz = 10-12ma max this is so cool.

  • Hi, I just bought this wonderful LCD but I’m having huge huge problems connecting it..could anyone please point me in the right direction? Since there are pins that aren’t metioned in the code, for example the 6 – DNK(MOSI)…
    Help please..
    Regards
    ps: I’m using it with a Arduino UNO, so I have the 3.3V pin…

  • Do you have an eagle schematic for this?

  • Yes, it does have a backlight. I have several of these, be careful to only give 3.3v or else it will be toast!

  • I got this little screen for my Netduino but it just won’t work! I’ve tried everything, and even worked on it with someone who had the same screen but it won’t work. We got it all right, but it just won’t work. If anyone here gets it to work with the netduino please let me know.
    EDIT: It is now working go here: http://forums.netduino.com/index.php?/topic/860-lcd-help-needed-16x2s-are-boring/pagest20

  • After working out a messy voltage divider for all of the inputs to this guy, I figured I would share a drawing of my breadboard for anybody else who wanted a pre-done example of how to set it up:
    nokia5110_bb.png
    I’m sure there are better ways to do it, but this one is working for me right now.

    • Don’t do this. Each divider will be burning 20x the entire amount of current that the display needs to function, and the whole assembly will waste 100x the LCD’s needed power and many, many times more than even the atmega needs to run at full speed. This will kill battery life.
      Either use higher resistor values, n-mosfets for level conversion (see this Sparkfun BOB for an example), or drive the whole system on 2.0V – 3.3V (don’t know how easy that is with an Arduino.)

  • Has anyone controlled this LCD via a Picaxe processor?

  • Would you guys offer bare PCB? Or .brd file.
    Thank You

  • I bought one of these that has the problem where you have to squeeze the top to make it work. Is there any way to fix it? If I take off the aluminium bezel am I in for a hard time?

  • Are there available pcb dimensions? At least pitch between holes and pcb connection….. Thanks.

  • Is there a way to control contrast?
    My display shows all dark, with the text darker… Not quite optimal.

  • I’ve followed the linked-to Arduino example and I get nothing on the display. Should it just work without any other components? The link mentions a possible cap on VOUT but there’s no such pin. Googling has suggested my Duemilanove’s digital pins will be @5V but I need 3.3V?
    I have connected LCD:Arduino as
    VCC:3V3
    GND:GND
    SCE:7
    RST:6
    D/C:5
    DN(MOSI):4 is this “SDIN”??
    SCLK:3
    any help would be appreciated, thanks!

    • Well I tried cluening’s voltage divider and still nothing so I suspect, like Skye, I have a dud. The board is a little warped
      :–(

      • 1) don’t give up
        2) read every posting
        3) follow every link
        4) try every suggestion
        I have mine working now! The secret was oz-solutions’s linked-to observation about the second code example which does more initialisation. I suspect that the default contrast etc makes the screen blank.

  • As much as I love SFE products and will continue to order from them, this is one product I would not recommend. The connection between the LCD unit itself and the carrier board is via those rubber polymer connectors. All the planets must line up properly for them to work. In this case, the carrier board was warped preventing the connection from working. You will find other such remarks in the comments area.
    I wish I could have gotten this to work because it was the perfect match to my needs (other than that it had to work!).

    • I have purchased 3 of these in recent past. One of them would power up but not display. They are a great size for what I want to use them for.

      • Out of curiosity – what indication is it giving you that it is powering up, if there is nothing on the display? There are no outputs brought out from the controller, so what feedback are you seeing that leads you to believe it is powering up?

        • I was referring to the backlight. I have used several of these for wireless devices and noticed the quality seems to degrade overtime.

  • Anyone have any example code for PicAxe please? Thanks much! Andrew

  • i try example for arduino… i change pin… but it not worked…
    Who ever started this screen? can you publish simple worked example?

  • The code is unportable for the MSP430 using C. :/

    • The code is portable!
      I forgot to include one of the most important commands:

      Const
      
      • Awesome. So does that mean that the code can (largely?) be copy-pasted into an MSP430 IDE and executed?
        If you’ve got some example code for it, I’d love to see it! I’ve got plenty of MSP430s lying unused.

  • I accidentally (well, intentionally, but stupidly) plugged the LED backlight line directly into 5V when I first got this, and I saw (and smelled) the magic black smoke escape. I believe the black smoke only came from one of the backlight LEDs burning out, because I only notice one of them not working now. The other backlight LEDs still light up okay, but I also now seem to be having trouble getting the display to show anything. I’m just wondering if I could have messed anything else up. It seems like others have had their issues with this display, so I was hoping I maybe had something misconfigured. I’m fairly certain I have the pins assigned properly, but maybe I’ll tinker with the contrast. Any recommendations for setting the contrast value?
    I’m using a Teensy 1.0 as a Teensyduino, and everything runs at 5V logic.
    Any ideas, tips, recommendations?

    • I’ve had issues with the LCD not showing anything intermittently. You got to make sure that all the connections are secure, and for the reset pulse, be sure to have a delay that’s 30-50 milliseconds long.

  • Seems like the PCD8544 library does it’s own SPI bit managing and it really doesn’t like me using the SD library (also talks SPI) at the same time. I’ve made sure I’ve got all the SPI pins matching for both libraries (MISO, MOSI, Clock are the same and each device has it’s own Select), but it looks like the SD.begin() call just breaks the SPI bus for the 5110 and it becomes non-responsive. The LCD works just fine if I don’t initialize the SD library and the SD card works fine if I do initialize the SD card.
    Anyone have any experience using this LCD with another SPI device? How did you keep everything happy?
    Thanks!

    • I’m pretty sure I tracked down the problem- the PCD8544 library uses software SPI while the SD library uses hardware SPI and I’m pretty sure the Arduino can’t do both over the same SPI clock/miso/mosi pins. Anyone know if this LCD will work with hardware SPI?

      • The answer was yes. Ended up being a small change to the PCD8544 library and now it works great!

  • I recently obtained a virtually identical LCD from a Nokia 5160, and although its backlight LEDs are green, not white and conversely use different voltages, I had success hooking up the LEDs' Vcc pin to a PWM capable pin on the microcontroller, allowing me to control backlight intensity (I didn’t need a current limiting resistor for this either, but adding one will help reduce current drain on the controller).

  • A couple things:
    first off, the best contrast setting for the unit I received was B3. This can be done like this:

    LcdWrite( LCD_CMD, 0xB3 );  
    

    You can also use FastLCD to convert your bitmaps – google it. It outputs BASIC code, but you just search and replace &h to 0x and you’re grand. It has the added advantage of being an editor for touching up output.

    • I found that same 0xB3 value works just right for the two units I have. I wonder if some of the difficulties people have getting them going is from using “E0” or “BF” or some of the other values I’ve seen posted. When I first powered mine up, I got NOTHING on the screen, and I would have thought it was dead, or assumed mine had “bad connections”, if I hadn’t known to play with that Vop value…

  • This is a great little lcd. When I first wired it up, the backlight was shorted (accidentally) against my 5v rail, so i got some magic smoke, and burnt to LEDs but it re-soldered the offending joints and it works very well now. Something to note: the refresh and write times are much, much slower if you use 5 volt logic. I stuck in a logic level converter and it ran at least 5x faster.

    • I did the same thing (see my comment above), but I still can’t seem to get anything to display. 3 of the 4 backlight LEDs still light up when I give them power, but I’m wondering what joints you re-soldered to get it to work again.
      Also, I’m assuming it’s okay that there’s no diode on my board like there is shown in the product image. I guess other people’s boards are coming like that, too?

  • Stuck. Blank LCD. Added 0x20, changed Vop to 0xB3. Guessing connections may be the issue? 3.3v for LED and VCC. GND to GND. Remainder connected to Arduino via voltage dividers. What am I doing wrong?

  • This lcd is so easy to use!
    For those of the arduino persuasion, I wrapped some simple methods up in a library based on this arduino page http://www.arduino.cc/playground/Code/PCD8544.
    This is my first library for arduino but I hope it’s useful to someone. Check it out here:
    http://unicycle.drupalgardens.com/content/speedometer-hello-world

  • Could someone please post a “hello world” code for Pic 16Fxxx? (MPLAB)
    The Arduino code works fine for me, but I can’t make any thing work with Pic. I found this code at http://www.sunbizhosting.com/~spiral/ , but can’t figure out what I’m doing wrong.

    • C code…
      (your PIC specific includes)

      #include "nokia5110Driver.h" // download from post below  
      

      void main(void)
      {

      nokia_init(); // initialize nokia lcd  
      nokia_gotoxy(8,0);  // position in x, y  
      printf(nokia_printchar,"   Hello World   "); //refer to the nokia driver include for formatting  
      }
      
    • I used port C on my 18F for the outputs to the Nokia lcd…

      // Matches Sparkfun Pinouts  
      #define nok_cs    PIN_C0  // 3-SCE  
      #define nok_res   PIN_C1  // 4-RST  
      #define nok_dc    PIN_C2  // 5-D/C  
      #define nok_sda   PIN_C3  // 6-DN(MOSI)  
      #define nok_sclk  PIN_C4  // 7-SCLK  
      #define bk_sel    PIN_C5 // 8-LED
      
  • Has anyone created an eagle footprint for this? I’ll be doing so when the order arrives. Basically just the outline with mounting holes and the 8 pin header.
    Edit
    Cadsoft eagle library for Nokia 5110 – Nokia 5110 Eagle lbr
    Modified C Driver for Microchip PIC 16, 18 series with backlight control (for Sparkfun pinouts) – Nokia 5110 PIC C Driver
    Somebody should permanently host these files, any takers?

  • Does anyone know whether this can be stripped of its backing so it can be used in transmission? I would love to use this as a modulator for a laser beam. Or if someone knows a similarly cheap transmission LCD that would be fine too.

  • If you are having problems with the black pixels in images/warping PCB, use original Nokia 5110, I happened to have one at home and it works as it should, no bad connections degrading image quality.

  • I found the LCD bias value must be set to 0x15 to get good constrast consistently.
    Using a 3V source, my LCD often worked OK using bias 0x14 like the other examples, but sometimes it would appear gray and faded. The fading would lessen if I touched the panel lightly with my hand for a few seconds, then let go, so maybe it’s a temperature-dependent thing?
    After writing a program to let me interactively adjust Vop, temperature coefficient, and bias, and experimenting with different values, I found that bias 0x15 worked much, much better than 0x14. I’m also using Vop 0xD0 and temperature coeff 0x04, but those don’t seem to matter as much.
    I also noticed an error that’s repeated in many of the examples:

    0x14,   //set bias mode to 1:48.  
    

    0x14 is not 1:48 bias. If you read the datasheet on the top of page 16, 0x14 corresponds to a bias of 1:40/1:34. If you want 1:48 bias as the comment says, use 0x13. The 0x15 value I’m using corresponds to 1:24 bias.

    • Ack! After two days of working nicely with 0x15 bias, I reset the board today, and the LCD appeared way over-dark. I changed the bias back to 0x14 and it looks perfect. What the heck?! I think there must be some temperature-sensing or temperature-dependence going on, so the same init values may produce good-looking results one day but not the next.

  • I finally got around to running this LCD on my 3310 PCB. It is working fine with one minor problem. The SF 3310 display hides to first line of bytes for some reason and I had to offset everything to compensate. The 5110 doesn’t do this as behaves as expected. I haven’t heard anyone else report this so maybe my initialization code is different.
    My fix.

    ifdef lcd3310

    SendLcd(LCDCommand,0x40 | ++RAMY);   //row - row zero is hidden so inc  
    

    endif

    ifdef lcd5110

    SendLcd(LCDCommand,0x40 | RAMY);  
    

    endif

  • all the nokia 5110 lcd i recieved, i have noticed that the RED PCB is a bit bended.
    I have 6 of them. I have only test 2 of those and they work fine.
    I dont know why they are noticeably bended.

    • I am guessing that you are seeing the PCB bent away from the back of the display, up near the “top” of the display region, when it is viewed in normal operation, right?
      This is because this is where the connections are on the back of the “display glass”. These connections are carried down into the PCB via a small strip of that elastomeric connector material. This material works by being compressed between the two substrates (the glass and the PCB) to hold it in place and make the connections between the pads on each surface. As a result of being compressed, it puts a force “up” on the glass, and “down” onto the PCB. In this particular design, this has the result of bowing the PCB in the units I have purchased.
      My thought, if I were up to me, would be to redesign the metal hold-down bracket, to have one more metal tab going down through an additional slot in the PCB, right there at the center of the top edge of the hold-down bracket. This would carry the majority of the reaction to the force exerted by the elastomeric strip, and should minimize board bowing.

  • I made a little font generator for the Nokia 5110 in the processing programming language (processing.org). It allows you to convert any font and any character that you can display on the screen into a list of hex codes that can be directly used in an embedded system (I’m using msp430). Just type a character and the corresponding hex codes will be in your clipboard and you can copy them into your program. It starts with an example with the chinese character for 5. It should work on any system that can run processing (e.g. mac osx).
    https://sites.google.com/site/arduinowatch/Home/FontGenerator2.pde?attredirects=0&d=1

  • What does the VOUT pin do?

  • I just got 2 of these. Haven’t had a chance to hook them up yet. But I gather that the LEDs are green. Has anyone managed to lift up the display and change the LEDs for white or other color?

  • I recently completed a port of the Arduino GLCD library for the PCD8544 using one of these displays. You can find it here:
    git@github.com:MikeSmith/glcd_pcd8544.git
    In conjunction with M2TK this gets you a fairly respectable graphics library and a forms-based menu system on your tiny device. Woot!

    • This is really nice. But it’s in CPP. I use the gcc (win-avr) compiler. Do you have a link to a C library like this? Otherwise I’ll have to try to port this to C. Which would be a real task because I have no experience with CPP.

    • Mike,
      the url you provided doesn’t work in a browser, but this one does: https://github.com/MikeSmith/glcd_pcd8544

  • Might I suggest you (SFE) source some of the Electronic Assembly’s LCD Dog-S series. I think they would be a step up from these at a reduced price. I don’t think that they website is up to date, but their part number is LED39x41-GR.
    edit: Correction, that is the part number for the backlight module. The LCD is DOGS102W-6.

  • LadyAda has a nice write-up on how to use this here; http://ladyada.net/products/nokia5110/
    It’s roughly the same price on both sites.
    BTW; I’m not advertising; i’m just trying to help out- it helped me!

  • What is the usable display size for this screen? (Dimensions were there are pixels.)

  • I see that this item is Out of Stock (back-order allowed). I have a embedded system I have been documenting / publishing the design for over the last month, so I would like to know if Sparkfun Plans on keeping this part and if so for how long? Is there a part you would recommend for replacement if this one is going away?
    Thanks!

    • we have every intention of keeping this item, it’s just taking a little longer than usual to restock it. There isn’t an ETA right now though, sorry!

  • Here is one way to control the 5110 LCD display with a Launchpad.

  • at adafruit they say that you need a level shifter that they include. Im confused it seems like no one here is using one. whats the deal?

  • Is it possible to display text on this? If so, how?

    Thanks.

  • It works quite easily (if you pay attention to the voltage advice).

    I only had a little problem showing lower case chars when using the example code but it seemed to be a problem with the comment “// 5c \”. Once the backslash was removed everything was working as expected. Great display, I think I’m going to get a bunch of these.

    • Thats a really good catch. The text editor doesn’t catch it, so I wonder what the issue is. It must be some sort of continue to next line character.I would have spent all night trying to figure it out. Thanks

  • would this work with the pro mini

  • would this work with the pro mini