CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Has anyone used Optrex F-51854 graphic LCD?

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
sung



Joined: 10 Jul 2009
Posts: 7

View user's profile Send private message

Has anyone used Optrex F-51854 graphic LCD?
PostPosted: Tue Aug 11, 2009 12:18 pm     Reply with quote

I'm having a problem in initializing and displaying anything on the LCD. Does anyone have driver source code for the LCD or other helpful things?

I've looked at driver source code for similar modules, but they don't provide me much help..

Thanks.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Aug 11, 2009 12:20 pm     Reply with quote

Post a link to the webpage for that module. Post a link to the data sheets
for the module and the controller.
sung



Joined: 10 Jul 2009
Posts: 7

View user's profile Send private message

PostPosted: Tue Aug 11, 2009 1:36 pm     Reply with quote

Website for the Graphic LCD Module:

http://www.optrex.com/products/partdetail.asp?PartNumber=F-51854GNFJ-SLW-ABN



Data sheet for LCD Module:

http://www.optrex.com/SiteImages/PartList/SPEC/51854abe.pdf



Data sheet for LCD Driver CoG:

http://www.optrex.com/SiteImages/PartList/CONTROLLER/S1D15714tm_e_14_0609.pdf
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Tue Aug 11, 2009 6:00 pm     Reply with quote

You will need a complete 8 bit port on the pic - to drive this - as it looks like a pure 8 wide data bus - with a conceptually simple method to address and display BLITS.

Of course what you did not post is the pesky INSTRUCTION set for the part && without THAT - nobody is taking it anywhere.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Aug 11, 2009 6:03 pm     Reply with quote

The commands for the LCD controller are in his 3rd link.
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Tue Aug 11, 2009 7:05 pm     Reply with quote

serial style is probably best for PIC use

i can't find a useful ref to the controller
so this is a write from scratch job

ball's in your court SUNG

POST the code you wrote that is not working - maybe there is an EZ
clue in that
sung



Joined: 10 Jul 2009
Posts: 7

View user's profile Send private message

Code that I made up
PostPosted: Wed Aug 12, 2009 11:23 am     Reply with quote

Here's what I wrote.

Please be patient with my code, since I am a beginner in this area.

Thank you.


Code:
//Graphic_LCD_driver.c

//LCD driver for F-51854GNFJ-SLW-ABN Optrex Graphic LCD
//made by Sung Joon Kim on July 25th, 2009

//F-51854 uses S1D15714 LCD controller
//Refer to the data sheet in the initiallization block diagarm of S1D15714

#include <18f4520.h>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4MHz)

/******************************************************************************/
/*                             Pin Assignments                                */
/******************************************************************************/

#define RES pin_e0

#define A0 pin_c0
#define WR pin_c1
#define RD pin_c2
#define LED pin_c3

#define CS1 pin_b0
#define CS2 pin_b1

#define D0 pin_d0
#define D1 pin_d1
#define D2 pin_d2
#define D3 pin_d3
#define D4 pin_d4
#define D5 pin_d5
#define D6 pin_d6
#define D7 pin_d7

/******************************************************************************/
/*                               Constants                                    */
/******************************************************************************/
//Constants for commands                  // (command number)
#define DISPLAY_ON 0xaf                   // (1)

#define DISPLAY_NORMAL 0xa6               // (2)
#define DISPLAY_REVERSE 0xa7

#define LIGHT_NORMAL 0xa4                 // (3)
#define LIGHT_ALL 0xa5

#define COM_SCAN_DIR_NORMAL 0xc4          // (4)
#define COM_SCAN_DIR_REVERSE 0xc5         

#define DIS_START_LINE_MODE 0x8a          // (5)
#define DIS_START_LINE_00 0x00

#define PAGE_ADD_0 0xb0                   // (6)

#define DIS_DIR_COLUMN 0x84               // (10)

#define COLUMN_ADD_DIR_NORMAL 0xa0        // (11)
#define COLUMN_ADD_DIR_REVERSE 0xa1

#define REV_LINE_COUNT_4 0x30             // (12)

#define NLINE_INV_OFF 0xe4                // (13)

#define DUTY_SET_COMMAND 0x6d             // (14)
#define DUTY_65 0xf0                     

#define BUILT_IN_OSC_OFF 0xaa             // (17)
#define BUILT_IN_OSC_ON 0Xab

#define BUILT_IN_OSC_FREQ_100 0x70        // (18)

#define LCD_POWER_CONTROL 0x25            // (19)
#define LCD_POWER_CONTROL_ALL 0x07

#define LCD_DRIVE_6 0x26                  // (20)

#define LCD_BIAS_RATIO_8 0x50             // (21)

#define E_VOL_MODE 0x81                   // (22)
#define E_VOL_REG_64 0x40                 // 64 in hex

#define TEMP_GRAD_06 0x48                 // (25) -0.06 temperature gradient

#define RES_COMMAND 0xe2                  // (27)



/******************************************************************************/
/*                          Function Definition                               */
/******************************************************************************/

void glcd_control(int control);           // send control command
void glcd_write_data(int data);
void glcd_init(void);



/******************************************************************************/
/*                                Functions                                   */
/******************************************************************************/

/******************************************************************************/
/* void glcd_control(int control)                                             */
/* Purpose: Send control command to the LCD                                   */
/******************************************************************************/
void glcd_control(int control){
   //Implement sending control
   set_tris_c(0xf0);                      //Make A0,WR,RD,LED pins as outputs.
   output_low(A0);                        //Select "instruction" command
   delay_us(10);              //Might need address setup time here
   set_tris_b(0xf4);                      //Make CS1,CS2 pins as outputs.
   output_low(CS1);                       //Send commands to both COGs.
   output_low(CS2);
   
   set_tris_d(0x00);                      //Make Port D output
   output_low(WR);                        //Write the instruction to GLCD
   output_high(RD);                       //Disable Read function
   output_d(control);                     //Load an instruction to Port D.
   delay_us(10);
   output_high(WR);
   output_high(CS1);
   output_high(CS2);
   
}

/******************************************************************************/
/* void glcd_write_data(int data)                                                   */
/* Purpose: Send data to the LCD                                              */
/******************************************************************************/
void glcd_write_data(int data){
   
   //(1)Display ON/OFF command
   glcd_control(DISPLAY_ON);

   /*//(5)Display start line set
   glcd_control(DIS_START_LINE_MODE);
   glcd_control(DIS_START_LINE_00);
   */
   
   //(10)Display data input direction select
   glcd_control(DIS_DIR_COLUMN);
   
   //(6)Page address set
   glcd_control(PAGE_ADD_0);
   
   //Actual writing sequence
   //setup the condition for writing data.
   output_high(A0);                       //Select "data" command
   output_low(CS1);                       //send commands to both COGs.
   output_low(CS2);             
   //maybe a little delay here
   
   
   output_high(RD);                       //Disable Read function
   output_low(WR);                        //Enable Write function
   delay_us(5);                           //Minimum 3us data setup time delay
   output_d(data);                        //Load data to be sent
   delay_us(10);
   output_high(WR);                       //Stop writing data
   output_high(CS1);
   output_high(CS2);
   


}



/******************************************************************************/
/* void glcd_init()                                                           */
/* Purpose: Initiallize the graphic LCD                                       */
/*          Occurs after the reset pin has been pushed and released.          */
/******************************************************************************/
void glcd_init(){
output_high(pin_b3);
   
   ///////////////////////   1.General Initaillization   //////////////////////
   set_tris_e(0xfe);                         //make RES pin an output pin.
   //Hard reset
   output_low(RES);
   //some delay for stable power supply
   delay_ms(10);
   output_high(RES);
   delay_ms(500);                            //Random delay for playing safe.
   
   /*//(27)soft reset
   glcd_control(RES_COMMAND); */
   
   //(11)Column address set direction
   glcd_control(COLUMN_ADD_DIR_NORMAL);
   
   //(4)Common output status select
   glcd_control(COM_SCAN_DIR_NORMAL);
   
   //(2)Display normal/reverse
   glcd_control(DISPLAY_NORMAL);
   
   //(3)Display all lighting ON/OFF
   glcd_control(LIGHT_ALL);
   
   //(14)Set the duty
   glcd_control(DUTY_SET_COMMAND);
   glcd_control(DUTY_65);
   
   //(20)LCD voltage select
   glcd_control(LCD_DRIVE_6);
   
   //(22)Electronic volume
   glcd_control(E_VOL_MODE);
   glcd_control(E_VOL_REG_64);
   
   //(25)Temperature gradient set
   glcd_control(TEMP_GRAD_06);
   
   
   /////////////////////    2.When AC Invert drive is used    //////////////////
  /* //(12)n-line invert drive register set
   glcd_control(REV_LINE_COUNT_4);
   
   //(13)n-line ON/OFF
   glcd_control(NLINE_INV_OFF);
   */
   
   ///////////////    3.When the built-in CR oscillator circuit is used    /////
   //(18)Built-in oscillator circuit frequency select
   glcd_control(BUILT_IN_OSC_FREQ_100);
   
   //(17)Built-in oscillator cirucit ON/OFF
   glcd_control(BUILT_IN_OSC_ON);
   
   
   //////////     4.When the Built-in LCD power supply circuit is used    //////
   //(21)LCD bias change
   glcd_control(LCD_BIAS_RATIO_8);
   
   //(19)Power control set
   glcd_control(LCD_POWER_CONTROL);
   glcd_write_data(LCD_POWER_CONTROL_ALL);
   
   //test if this function has been completed
   
}


/******************************************************************************/
/* void main(void)                                                            */
/* Purpose: Main function of the program (for testing only)                   */
/******************************************************************************/

void main(void){
   glcd_init();
   
   delay_ms(2000);
   
   //Trysing to display random pixels.
   glcd_write_data(0x26);
   glcd_write_data(0x49);
   
   
   while(1) {
      output_toggle(pin_b2);
      delay_ms(500);
}


}
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Wed Aug 12, 2009 4:49 pm     Reply with quote

a couple of quick comments
1- you are starting with a very ambitious complex project
2- there are CCS things to be aware of - unless you declared
#FAST_IO you need not do set_tris - compiler will do it for you
yo can get VERY tangled up by confusing that - and THAT could be giving you trouble you dont understand

USE one method or the other - read doc or CCS man pages for more

3-keep it very simple at first
4 check your command def words for accuracy

just try to reliably CLEAR the display and make baby steps at first
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group