Voltage follower for LCD with ST7036 controller

Status
Not open for further replies.

rolls

New Member
I am currently writing a driver for this LCD **broken link removed** and it uses the ST7036 driver http://www.sitronix.com.tw/sitronix/SASpecDoc.nsf/FileDownload/ST7036936139/$FILE/ST7036-V17a.pdf

Now the datasheet that they provide for the actual LCD is useless, I cannot figure out how to set the contrast. 'drive supply voltage' I'm assuming this means pull V0-V4 high, I've done this and tried enable/disabling the internal voltage follower, changing contrast from 0-15, I've tried this with the V0-V4 lines tied high/low and even with an external voltage follower.

Does anyone have any idea how I should wire this up and then what commands I should send the LCD so that it isn't entirely black or off?

Also I'm using a 3.6V supply, I2C interface on a PIC 24.

Also if I pull out the V2 and V3 wires and plug them in quickly it shows the text I've sent to the display for about half a second, then it dissapears or goes black again.
 
Last edited:
Reading the ST7036 datasheets, I see that the contrast function is controlled by pin EXT (see page 13/70) as is the LCD bias. Then starting at page 47/70 I see different LCD supply configurations. Which one are you using? How is your EXT pin connected? How are OPF1 and OPF2 connected?
 
Last edited:
I've attached a slightly more detailed data sheet that they just emailed me, from the looks of it OPF1, OPF2 and EXT are attached to VSS.
 

Attachments

  • HTG1603A Manual.pdf
    1.2 MB · Views: 346
Ok I've got a flashing cursor and can control the contrast via a trimpot but I can't see any text. I can however see the text for about half a second if I randomly disconnect and short the V1-V4 pins.

Here is the list of commands I've sent the display via I2C:

Power on:

//Sequence to trigger power on initialisation
VSS = 1;
delay(5); //power on for 0.1<trcc<10ms
VSS = 0;
delay(10); //power back on aftertoff>1ms
VSS = 1;
delay(85); //delay 40ms for power to stabilise

i2c_enable();
i2c_start();
i2c_sbyte(0x78); //(Slave address << 1 & RS bit)
i2c_sbyte(0x00); //(Control byte)
i2c_sbyte(0x0F); //(Power on)
i2c_stop();
i2c_disable();



Display 'abc' on line 1:
//Line 1 DDRAM address 00 - OF
//Line 2 DDRAM address 10 - 1F
//Line 3 DDRAM address 20 - 2F
/* Control Byte format: CO,RS,000000) Where CO = 0 (Last Control byte to be send)
CO = 1 (More control bytes to follow after each Data byte)*/
int result;
i2c_enable();
i2c_start();
i2c_sbyte(0x78); //Slave address of display 1 (3C << 1) & 0(R/W) (Slave address-7bits-(xxxxxxx,R/W)
i2c_sbyte(0x80); //Control byte = Interleave Control byte, data byte etc. RS = 0
i2c_sbyte(0x80); //Set DDRAM address to 0 for first character
//wait 27us
i2c_sbyte(0xC0); //Control byte to enable writing to DDRAM, more control bytes to follow RS = 1 CO = 1
i2c_sbyte(0x61); //write 'a' (0110 0001) to address 0

i2c_sbyte(0x80); //Control byte = Interleave Control byte, data byte etc. RS = 0
i2c_sbyte(0x81); //Set DDRAM address to 1 for first character
//wait 27us
i2c_sbyte(0xC0); //Control byte to enable writing to DDRAM, more control bytes to follow RS = 1 CO = 1
i2c_sbyte(0x62); //write 'b' (0110 0010) to address 1

i2c_sbyte(0x80); //Control byte = Interleave Control byte, data byte etc. RS = 0
i2c_sbyte(0x82); //Set DDRAM address to 1 for first character
//wait 27us
i2c_sbyte(0xC0); //Control byte to enable writing to DDRAM, more control bytes to follow RS = 1 CO = 1
i2c_sbyte(0x63); //write 'c' (0110 0010) to address 2
i2c_stop();
i2c_disable();
 
Last edited:
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…