Epson S1D15G10 Nokia LCD

Interfacing the Arduino to the 128x128 12bit color 3V Epson Nokia Knock-Off LCD.

Hardware Introduction

This is the first color, graphic LCD display I worked with. I made some assumptions when I first began working with it. From previously working with TTL logic in college, I assumed CS and RESET could just be tied high for simplicity. It wont work if you do that. They must be wired to the micro-controller to get reliable operation from the LCD. Toggling them is necessary for normal operation.

After wiring everything up, I desperately wanted some sign of life from the LCD, to know if it was wired correctly. Figuring out how to use the LCD without reading the datasheet is impossible. You could send random data to the display for a thousand years and never see any indication that it's working. Towards the end of the data sheet are application notes and a nice walk through for configuring the display. Usually, after setting the contrast for it, and writing some data to the display's ram, you'll see it do something. Otherwise, simply powering the LCD and back-light (necessary) will give you a blue screen, and maybe just some sporadic lines from noise.

Speaking of noise, this project has had the worst problems of any I've ever done. It's probably been resolved by now with newer displays. Aside from using an external voltage booster for the backlight, an insulated foil ground plane could've been sandwiched between the display and breakout board. Scotch tape on one side of aluminum foil, the side against the board, and connect the foil to ground.

Circuit Notes

Requires 5V to 3V conversion. There's more than one way, the simplest being resistor voltage dividers, or operating the Arduino from 3V.

Schematic

Sparkfun's Nokia 6100 Knockoff

Sparkfun's part# LCD-08600 does not work properly with the old original source code from this page. You can read the post in the forums here

Using Thomas J's library with Phokur's edits, the resulting library can be downloaded

A newer edit to the fonts in the above library

void NokiaLCD::draw_text_line(word fcolor, word bcolor,byte x, byte y,char c)
{
	lcd_set_box(x,y,x,y+7);
	sendCMD(RAMWR);
	char i;
	for(i=0;i<4;i++)
	{
		switch( ((0x03<<(i*2)) & c) >> (i*2) ){
		  case 0x00:
			  sendData((bcolor >> 4) & 0xFF);
			  sendData(((bcolor & 0xF) << 4) | ((bcolor >> 8) & 0xF));
			  sendData(bcolor & 0xFF);
			  break;
		  case 0x01:
			  sendData((fcolor >> 4) & 0xFF);
			  sendData(((fcolor & 0xF) << 4) | ((bcolor >> 8) & 0xF));
			  sendData(bcolor & 0xFF);
			  break;
		  case 0x02:
			  sendData((bcolor >> 4) & 0xFF);
			  sendData(((bcolor & 0xF) << 4) | ((fcolor >> 8) & 0xF));
			  sendData(fcolor & 0xFF);
			  break;
		  case 0x03:
			  sendData((fcolor >> 4) & 0xFF);
			  sendData(((fcolor & 0xF) << 4) | ((fcolor >> 8) & 0xF));
			  sendData(fcolor & 0xFF);
			  break;
		}
	}
}

Original Source Code

(removed - see above)

Share