I have an old TFT display (extracted from an MP5 player) and I can't figure out how to connect it with an arduino nano, pls help. here's the datasheet of the TFT: http://read.pudn.com/downloads137/sourcecode/embed/586271/Varitronix-2.8-lcd/vl-ps-cog-t280mbqi-041.pdf Thank you.

  • The datasheet says it all: A ILI9320 display driver with a 16-bit data bus (instead of SPI). Can you show a picture of the display and the connections? It's pretty close to learn.adafruit.com/…. (8bit). If no 16-bit parallel driver is available you'll have to look at the ILI9320 datahseet and build one. However, if your objective is just to get a display for an Arduino, just buy a new well-known display with a simple SPI interface for which there are drivers. May 17, 2018 at 10:08
  • 3
    Is this datasheet hosted on the end of a 56k dialup modem...?
    – Majenko
    May 17, 2018 at 10:11

1 Answer 1


The Nano isn't a good choice for driving that screen. You need almost all the pins of the Nano to connect to the screen alone, and there's not enough to include the touch-screen as well. And that's when you're not using the serial port of the Arduino (TX/RX pins) for communication with the PC.

You need to connect:

  • 16 data pins
  • /CS pin
  • /RS pin
  • /WR pin
  • Optionally RD pin, or tie it to 3.3V
  • /RESET pin

And all those need to be level shifted to 3.3V.

You need to provide 3.3V to VCC1/2 and VCI. The LED A connects to 5V (since it has more current capacity than the 3.3V) and each LED Kx pin through a suitable resistor (220Ω maybe) to ground.

The touchscreen needs the X- and Y- pins connecting to a digital IO pin, and the X+ and Y+ pins to analog IO pins that can also double as digital IO pins (so not A6/A7 on boards that have them).

And then you need to obtain or write the software to drive the ILI9320 through the 16-bit interface.

Driving the interface is simple enough:


  1. Set /CS HIGH
  2. Set /WR HIGH
  3. Set /RD HIGH (if not tied to 3.3V)
  4. Set /RESET HIGH
  5. Short delay
  6. Set /RESET LOW
  7. Short delay
  8. Set /RESET HIGH

Then to transfer a group of 16-bit words:

  1. Set /CS LOW
  2. Set the value to write on the 16 data pins
  3. Pulse /WR LOW then HIGH
  4. Repeat from 2 for each word
  5. Set /CS HIGH

Refer to the ILI9320 datasheet for how to control the chip, or use existing library code (does uTFT or u8glib support it?).

For the touch screen it's a case of setting Y- LOW and Y+ HIGH, and X- and X+ to INPUT, then reading the analog value from X+. Repeat with X- set LOW and X+ set HIGH, and both Y set to INPUT, and read the analog value from Y+.

You can also get better results by reading multiple inverted settings:

  • Y- = LOW, Y+ = HIGH, X- = INPUT, Read X+.
  • Y- = HIGH, Y- = LOW, X- = INPUT, Read X+.
  • Subtract the second reading from 1023
  • Add the first and (modified) second reading
  • Divide by two.
  • Repeat for X-/X+ reading from Y+.

You can also take multiple readings and average them out to reduce noise and stabilise the output somewhat.

And of course on top of all that you need to find a way to connect to a 0.5mm pitch connector. Normally a 0.5mm pitch FPC socket is used, which means a PCB with one on. You may be able to find 37 pin adaptor for it, but 37 pins isn't a common format. Normally 50 pin is more common to accommodate a more general purpose interface including the M0-M2 pins that allow you to select the interface type, as well as an 18-bit data bus to allow full RGB6/6/6 interfacing, and even buffer-less clocking of raw display data for very high speed display updates by MCUs that support such an interface.

  • I'll try it later (can't do it now because my computer is toast), thank you for your help by the way. i'll tell you later if it worked. May 17, 2018 at 12:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.