For my XMega based Terminal emulator, I'd like to be able to output to several different sorts of LCD (or OLED) screen. So I did a bit of research. Here's a brief summary...
I'm only looking at screens that are mounted on their own 'breakout' PCBs at the moment. It drastically reduces the connection methods I need to consider.
I'm only looking at screens which have 'serial' (SPI / I2C) pins.
(these require far fewer header pins to connect to)
I've picked 6 screens to look at.
Adafruit's 1.8" LCD breakout board
Adafruit's 2.2" LCD breakout board
ITead's 1.8" LCD breakout board
ITead's 2.2" LCD breakout board
a 1.8" LCD breakout board I found on eBay
An available from everywhere nokia-5110 breakout board.
They all have single-row 2.54mm headers.
I had been hoping to find a common ordering of their pins, however, as you can see:
They're all different.
MOSI == SDA == DN == Data == data (to screen) line
SCLK == SCK == SCL == clock line
RS == D/C == (Data / Command) line
RST == RESET == Rst == Reset line
CS == LCD_CS == SCE == TFT CS == Screen Select line.
Vin == Vcc == Power in. Sometimes 5v, sometimes 3.3v
There's no way that a single pre-routed PCB header would be able to work with all of those variants.
Therefore, to avoid having to create a different PCB for each and every type of LCD screen, I've gone for a patch-panel approach, similar to that seen on Mayhew Labs' Go Between Shield.
Here's my solder-jumper patch-panel as seen in Eagle:
Blue horizontal copper lines on the bottom.
Red vertical copper lines on the top.
A matrix of vias and solder-jumper pads allows the bottom (horizontal) lines and top (vertical) lines to be connected as required.
This should mean (in theory!) that one PCB design can be used with any of the above boards, just by putting blobs of solder across the appropriate pads.
After that, it's just software. Which is easy. Right?