Hello everybody,
As no one answered my posts, I decided to further investigate by myself.
-One: First of all I decided to investigate about the driver chip. It seems that there are 3 types of controller, but I wanted to know, so I took a broken R2A LCD I got and cut the chip off the LCd and put in nitric acid to get the silicon chip. Then I put under the microscope. It revealed to be a S-4595B, which I suspect is the most usual type.
Since the other LCD I have is the same revision, and the silicon chip dimensions are EXACTLY the same I assumed it is the same chip.
-Two: I conected the LCD to my PC LPT port using the schematic provided by RIFER (
http://rifer.narod.ru/i2cldc.html), just changing some components to provide 3V logic and supply to the LCD.
Making some changes to the RIFER provided sources I could check that the LCD sends ACK to address 72, which confirms it is a S-4595.
-Three: As "reset" said that he managed to make the display work and he based on "Bingo600" dump I studied the dump in detail:
+ 1st: I removed the hex part and S2 header to have clear text, which then I arrenged to be read clearly, as follows:
version=200109110;interface=i2c1;
{name=S-4595;type=01;address=72;resolution=65 50;colours=08 03 03 02;offset=1B 00;offset_pd=1B 00;
pd_rectangle=03 0000 0004 0065 001C 0000 001C 0065 0034 0000 0034 0065 004C;
pnp_detect=%a 00 00;
init=%a 03 01 02 00 00 46 01 00 06 01 07 1B 08 7F 09 00 0A 4F 0E 4F 0F 10 10 02 11 17 12 25 13 01 15
00 16 1C 17 00 18 00 19 00 1A 00 1B 50 1C 50 1D 26 1E 26 1F 00 20 00 34 27 35 73 36 04 37 31 38
06 39 2C 3A 24 40 08 41 00 42 07 43 08 44 09 45 0A 46 0B 47 0D 48 10 49 00 4A 05 4B 07 4C 08 4D
09 4E 0A 4F 0C 50 10 51 00 52 07 53 09 54 10 55 00 56 06 57 07 58 08 59 09 5A 0A 5B 0B 5C 10 5D
00 5E 06 5F 07 60 08 61 09 62 0A 63 0B 64 10 65 00 66 07 67 09 68 10 78 01 00 42 04 1B 05 00 %w118;
reinit=;reinit_pd=;power_on=%a 38 02 00 52;
power_off=%a 00 42 38 0A 39 00 %w78 %a 00 46 %w17C;
normal_pd=%a 00 42 38 0A 01 08 16 %pd_startrow %w32 %a 38 06 %w96;
pd_normal=%a 00 42 38 0A 01 00 %wC8;
set_scanrow_pos=%a 04 %x 05 %y;
scanrow=%a 8C;
set_vlcd=%a 39 %vlcd;
set_vlcd_pd=%a 3A %vlcd_pd;}
{name=HD66760;type=02;address=74 76;resolution=68 50;colours=08 03 03 02;offset=00 00;offset_pd=00 00;
pd_rectangle=03 0000 0004 0065 001C 0000 001C 0065 0034 0000 0034 0065 004C;
pnp_detect=%a 00 00;
init=%a 00 03 %a1 1A 34 %w96 %a 00 01 %a1 02 09 %a 00 02 %a1 00 46 %a 00 04 %a1 05 4E %a 00 14 %a1 4F 00;
reinit=;reinit_pd=;power_on=%a 00 07 %a1 00 03;
power_off=%a 00 07 %a1 00 00 %a 00 03 %a1 00 00;
normal_pd=%a 00 07 %a1 00 00 %a 00 03 %a1 19 04 %w0A %a 00 01 %a1 02 02 %a 00 04 %a1 03 5D %a 00 14 %a1 %pd_stoprow %pd_startrow;
pd_normal=%a 00 07 %a1 00 00 %a 00 03 %a1 1A 34 %w0A %a 00 01 %a1 02 09 %a 00 04 %a1 05 50 %a 00 14 %a1 4F 00;
set_scanrow_pos=%a 00 21 %a1 %y %x/2;
scanrow=%a 00 22 %a1;
set_vlcd=%a 00 04 %a1 05 %vlcd;
set_vlcd_pd=%a 00 04 %a1 03 %vlcd_pd;}
{name=S-43200A;type=03;address=70;resolution=65 50;colours=08 03 03 02;offset=00 00;offset_pd=00 00;
pd_rectangle=03 0000 0004 0065 001C 0000 001C 0065 0034 0000 0034 0065 004C;
pnp_detect=%a 00 00;
init=%a 03 01 02 00 00 06 01 00 0E 4F 0F 10 10 02 11 17 12 25 13 01 15 00 16 1C 34 2F 35 73 36 04 37 31
38 06 39 2C 3A 24 40 08 41 00 42 07 43 08 44 09 45 0A 46 0B 47 0D 48 10 49 00 4A 05 4B 07 4C 08 4D
09 4E 0A 4F 0C 50 10 51 00 52 07 53 09 54 10 55 00 56 06 57 07 58 08 59 09 5A 0A 5B 0B 5C 10 5D 00
5E 06 5F 07 60 08 61 09 62 0A 63 0B 64 10 65 00 66 07 67 09 68 10 00 02 04 00 05 00 %w118;
reinit=;reinit_pd=;power_on=%a 38 02 00 12;
power_off=%a 00 02 38 0A 39 00 %w78 %a 00 06 %w17C;
normal_pd=%a 00 02 38 0A 01 08 16 %pd_startrow %w32 %a 38 06 %w96;
pd_normal=%a 00 02 38 0A 01 00 %wC8;
set_scanrow_pos=%a 04 %x 05 %y;
scanrow=%a 8C;
set_vlcd=%a 39 %vlcd;
set_vlcd_pd=%a 3A %vlcd_pd;}
+ 2nd: We do not have the S-4595 datasheet, but we have the Hitachi one. Looking at the dum we can dedece that this type of display uses two I2C addresses 74 and 76. If we take a look at the datasheet, then we can see that both address match the two types of writting (to the register pointer, and to the register itself).
Taking this into account we can deduce from the DUMP that "%a" means 74h and "%a1" means 76h. I also deduced that "%w" means wait, so to initialise the HITACHI display we must send the following string to I2C:
74 00 03 76 1A 34 "wait 96h milliseconds" 74 00 01 76 02 09 74 00 02 76 00 46 74 00 04 76 05 4E 74 00 14 76 4F 00
+ 3th: Following the same scheme, for the S-4595 the initialisation string MUST be the one following "init=" string, just changing "%a" for 72 (note that the init string is much longer than Hitachi one and it comprises several rows, until the final wait "%w118).
I tried it. I sent "init" string followed by "power_on" string...
AND IT WORKED !!!
I can see garbage in the display.
To send data you must used the "scanrow" string followed by data (72 8C xx xx xx...)
I will try to post some code sample and photos later.
To find out which controller your LCD has you shall send the "pnp_detect" string and see if you got and I2C ack.
+4th: Regarding commands:
"pd_rectangle" I think that it defines the rectangle for power down mode (the big clock), but don't know how to use it.
"pnp_detect" I think is used to detect the type of controller.
"init" is the init string to send after reset
"reinit=;reinit_PD=;power_on=" brings the LCD on after init/power_down
"power_off" to power off the LCD
"normal_pd" I think changes from normal mode to power_down, but have not tested yet.
"pd_normal" I think is the opposite of previous command although not tested.
"set_scanrow_pos" this set the pointer to data displayed. NOTE that this type of controller has an offset. initial point is not 0,0, but 1B,0 (if you look at initialisation sequence the last four bytes are 04 1B 05 00 which is the same you have to do in this command. Also note from that sequence that once you send the address (72) you can send several commands by sending REGISTER/VALUE sets of two bytes. This works for all the registers.
"scanrow" is used to send DATA. Is enough with sending the adddress and register once (72 8C), and then you can send all the data bytes in a row without sending again 72 or 8C. Data begings to be displayed from the current pointer (set with "init" or "set_scanrow_pos")
"set_vlcd" set the contrast. This is very important if you want to see something. It is set by default to 2C in "init" command. Values to far from that one will make that you can't see images on LCD.
"set_vlcd_pd" I think is the contract during power down mode, but have not tested yet.
As I told, I will try to post modified schematic, photos and test program when I have time.
I will also try to develop a library for PIC or AVR and post for all the users.
I been a long time after using this display for my projects because I think it will do better with a low cost microcontroller that Nokia 6100 (for example) as it has lower resolution and color depth, as so it required less processing.
I also owned a T68i mobile phone and it was quite bad for photos, but the menus were very nice.
Regards,
Cex.
Hope this helps to anyone. Please if you found this information helpful post a reply so I can know that it was useful to somebody. Thanks.