The problem with using a microcontroller to drive an LCD is that an LCD requires constant attention. This can be mitigated with a CPLD driven over SPI (using DMA, of course), but then you run into the other problem: Color LCDs require a lot of data. 320x240 in black and white is marginal at 9.6KB, but make it 24 bit color and suddenly you need to deliver 230KB of data in 1/60th of a second. (Don't forget, though, that you can get 4-bit, 16-color control just by tieing the low 20 bits to one setting). A 24-bit frame buffer no longer fits in onboard RAM on most microcontrollers, and you probably don't have time to read from an external RAM chip, clock the data out, and still do other processing. Trying to do this with a CPLD (or an FPGA) and a RAM chip gets you well over the $2 price that caused you to balk in your question.
The traditional solution to interfacing a microcontroller with a color LCD is a display controller like an SSD1963. Here's a very simple block diagram:
Parallel input to a big RAM frame buffer (Translation: More than $2) interfaced with a register-configurable parallel LCD interface. The parallel input is usually compatible with a memory bus interface.
The color LCD market is not always easy to find on the web, usually being the domain of OEMs only, with the rest buying displays from companies who integrate the controller with the display. The best resource I've found has been Crystal Fontz, specifically this page on choosing graphic LCDs. Scroll to the bottom for the controllers, which include the following options (note: Not all are color controllers):
- Epson S1D13521B01 E Ink Broadsheet (1 module)
- Epson S1D13700 (11 modules)
- Epson SED1520 Compatible (8 modules)
- Himax HX8345 Compatible (1 module)
- ILITek ILI9325 Compatible (3 modules)
- KS0107/KS0108 Compatible (26 modules)
- Novatek NT7534 (14 modules)
- Orise Technology OTM2201A (1 module)
- Orise Technology SPFD5420A (1 module)
- RAiO RA8835 (1 module)
- Sanyo LC7981 (13 modules)
- Sino Wealth SH1101A (2 modules)
- Sitronix ST7920 (29 modules)
- Solomon SSD1303 (1 module)
- Solomon SSD1305 (9 modules)
- Solomon SSD1325 (2 modules)
- Solomon SSD1332 (1 module)
- Solomon SSD2119 (2 modules)
- ST STV8105 (1 module)
- Toshiba T6963 (23 modules)
The Renesas R61581 is an intelligent display controller that handles all of the high bandwidth tasks needed to refresh the display. The control interface allows a microcontroller to send commands and data to load the in-built video RAM. It is an ideal choice to drive with a medium scale microcontroller.
The datasheet can be downloaded here.
Much of the datasheet refers to connecting the controller to the LCD glass, which you won't need to worry about. The controller has a multitude of host (microcontroller) interface options, but the simplest and easiest way to start is probably by configuring it for 8-bit parallel data access (so long as the display gives you access to the IM pins to set this up, otherwise use what's provided by the display interface). The datasheet includes a comprehensive command reference.
When you can initialise the controller and write a few pixels, then you're up and running and can develop your graphics code incrementally.
Have fun!
Best Answer
These custom LCDs have different drivers and communication protocols. You need to find out:
Then you can start the show. Usually you need to shift in 24 bits (or 16) on a parallel (or a 8 bit) interface to control each pixel. Note that these bigger LCD screens have no full screen display ram, so you need to refresh the screen pixel by pixel regularly - just like a classic CRT.
Therefore for these bigger LCDs usual hobbyst grade solutions such as using a microcontroller, or an Arduino will not work. Just count up the number of pixels and do the math - it might need 200k of ram just to store the display memory, not to mention the referesh requirements.
You need more juice for that. Consider e.g. the old PXA255 which has a built-in display driver via DMA channel to drive these kind of LCDs. You may refer to the datasheet of PXA255 or PXA270 to learn more about this topic.
It can be quite hard, and definitely not the next project after 16x2 standard LCDs :)
However, there is a solution! Because driving those LCDs are so awfully complicated, many companies have developed their own drivers which will off-load all of this mess from you.
Check out 4D systems http://www.4dsystems.com.au/ as they have solutions which reqire only a serial port wire to drive these nice displays.
FTDI also developed their own stuff called EVE, and sell integration-ready LCDs http://www.ftdichip.com/Products/Modules/EVEModules.html and http://www.ftdichip.com/Products/Modules/EVE2Modules.html (This latter looks very similar to the LCD you have found.)
Unless you have a 32bit microcontroller with megabytes of memory and a DMA enabled dedicated display port, this is the only feasible way to go, I am afraid so.