Driving a Nokia QVGA screen with Arduino (or any uC)

This is a Nokia 6300 screen. It’s a 320×240 display that has about 2″ of diagonal viewing area and boasts 24-bit QVGA TFT technology. It’s going to look fantastic in your next project and it won’t be hard to get up and running thanks to the hardware and software guide which [Andy Brown] put together. He chose this display because of its features, but also because it’s really easy to source and can be had for $5-7 delivered. The guide is aimed at working with the Arduino MEGA, but we’re sure you can port it for just about any microcontroller you’d like.

Much like the FPGA PSP display we just looked at, [Andy] chose to design his own PCB to host the LCD. This makes it a snap to attach the LCD — literally, since he managed to source the correct snap-in connector. The board also hosts a constant-current LED driver which takes care of the backlight, and allowed him to build in a level converter (since the screen communicates at 3.3V but Arduino uses 5V logic).

The software tutorial is lengthy but impressive. We’re surprised at the performance he gets out of the AVR chip. See the screen cycle through a set of demos after the break.

14 thoughts on “Driving a Nokia QVGA screen with Arduino (or any uC)

  1. I would buy this is the driver works with the 1.0 IDE, doesn’t take a million pins and the driver isn’t crap.

  2. but we’re sure you can port it for just about any microcontroller you’d like.

    This board is specifically made to work with megas due to the pinouts and ease of direct (fast) writing. But one could port it, sure.

    1. Nope, he’s using the XMEM interface which is specific to higher pin count AVRs. Otherwise you’re reduced to bit banging the handshake lines which would suck so hard you might as well have just used a display with SPI instead.

      Anyone know of any cheap Nokia LCDs with SPI? I know of 1616/1661 (about $3 a piece) but the resolution is only a quarter QVGA.

  3. Would using an I/O expander work? MCP23S08 is what comes to mind but perhaps even a 74hc595 shift register could be used. I’m likely overlooking someting that would prevent this solution from working but I thought I would throw the idea out there.. Thanks for your time.

    1. Unfortunately no. Bit-banging the 8-bit parallel interface is slow. Using a shift register is even worse. The reason this works so well is because it uses the high-end ATmega’s XMEM memory controller interface to directly send data to the LCD screen. Unfortunately this means that the regular Arduino MCUs (the ATmega328P, etc.) can’t use this library; it just doesn’t have the required hardware interface.

  4. I used to use a siemens S65 (?) LCD for projects. Cheap, connector which was solderable. Then it was nowhere to be found. This is the problem with phone LCDs…. once the model is too old, you won’t be able to find it. In the graphics LCD section you can’t really find a 2×16 equivalent(something trivial, made by many, always available).
    Given the nature of the high resolution, there’s no reason to consider a small uC for it.
    I found this as a reasonable alternative, but haven’t used it yet. Anyone? http://www.soselectronic.com/?str=1098

  5. Actually, if you dig into the code, he has implemented a GPIO version of the drivers. Can’t find documentation on how to invoke it properly, but I’m sure I’ll work it out eventually… He does point out that it is rather slower, but should be possible to get it working on more common or garden Xduino boards. And then maybe port to Raspberry pi, etc?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s