Interfacing colored LCD ILI9341 with 8-bit Microcontroller

For my current project, a compact sized multiband transceiver, I wanted to have a colored LCD module as display. On the web I found the ILI9341 LCD. This display has got up to >200000 different colors (depending on the respective mode you chose) and a resolution of 320×240 pixels. It can be driven in various parallel and serial (SPI) modes, therefore it is very versatile. Price for the LCD is about 10 US$ (11€).

First I developed code for a 4-line SPI interface. The display worked, but I found that it was much too slow. A lot of data has to be transferred because due to the higher resolution of the LCD I chose a 12×16 pixel font. That is very much for a small microcontroller (I am using an old ATMega128) clocked to 16 MHz via serial transmission

But I loved the colors and the luminance of the LCD. After a brief research I found that there is also a PCB available for parallel driving. This is sold as a “CP11003” display. The ATMega128 has plenty of ports and that made me think of driving it in parallel mode.

This display has 16 data connectors (DB0:DB15) of which 8 can be used for driving it in parallel mode. As common for parallel bus type LCDs these are the higher 8 bits of the data bus, thus DB8:DB15. DB0:DB7 are not used and therefore not connected.

As control lines there are “RS” (Data or command indicator), “WR” (write operation indicator),”RD” (read operation indicator) and “RES” (reset) are used for control.

CS (chip select) can be connected to GND when the LCD is the only device connected to the 8-bit bus.

ILI9341 LCD TFT display - 8bit parallel bus mode
ILI9341 LCD TFT display – 8bit parallel bus mode

Software development was easy using the GNU C compiler vor AVRs. (I still don’t use Arduino libraries! ;-)) The code can be found after this article.

Final hint: The module also has a touchscreen integrated but that is not in use here!

73 de Peter (DK7IH)

Code for ili9341_par_8bit