View previous topic :: View next topic |
Author |
Message |
hemnath
Joined: 03 Oct 2012 Posts: 242 Location: chennai
|
Winstar GLCD display |
Posted: Tue Oct 08, 2013 12:43 am |
|
|
Hi,
I'm using PIC18LF2520, Oscillator type: Internal 1Mhz, GLCD: Winstar WG12232A-YYH, Compiler version: 4.114
Earlier i worked with KS0108 display. But i have problem with winstar display. I can't see the enable pin.
Which driver can i use to display the text on the display?
Thanks in advance:) |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19498
|
|
Posted: Tue Oct 08, 2013 2:35 am |
|
|
You'd have to write your own.....
However not (possibly) quite as bad as it sounds. This display has two controllers each operating half the display. Each is a SBN1661, and these are compatible with the SED1520. Now the SED 1520, uses a subset of the commands supported by the SED1335 (which supports larger panels). There is a driver for the 1335 with the compiler. There are two separate 'enable' pins for the two chips, pins 5&6 (CE1, and CE2). Temporarily ignore half the display, and using just one enable, try the SED1335 driver, modified for the smaller display. If this can be got working, then it just becomes a matter of enabling the second chip when using the second half of the display, and offsetting the X coordinate.
Best Wishes |
|
|
hemnath
Joined: 03 Oct 2012 Posts: 242 Location: chennai
|
|
Posted: Tue Oct 08, 2013 3:57 am |
|
|
Thanks Ttelmah for your suggestion.
First, I'm displaying all the pixels ON. But nothing on the display.
Code: | #include "18F2520.h"
#fuses INTRC_IO
#use delay(clock = 1000000)
#define CS1 PIN_B4
#define CS2 PIN_B5
#define A0 PIN_B3
void main()
{
// R/W pin - LOW; RES pin- HIGH
output_high(CS1);
output_high(CS2);
output_high(A0); // command mode
output_a(0x3F); //
while(1)
{
output_low(CS1);
output_high(CS2);
delay_ms(500);
output_high(CS1);
output_low(CS2);
}
} |
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19498
|
|
Posted: Tue Oct 08, 2013 4:19 am |
|
|
You are just toggling the chip selects. You still have to write data, set direction etc...
As I said, look at the SED1335 driver, and modify this for one half the display width.
You are not going to get very far just operating the select lines. You need byte wide data, plus the R/W control etc... |
|
|
hemnath
Joined: 03 Oct 2012 Posts: 242 Location: chennai
|
|
Posted: Tue Oct 08, 2013 4:42 am |
|
|
In SED1335 Driver, I have changed the following lines,
GLCD_WIDTH as 122
GLCD_HEIGHT as 32
input_d() as input_a()
A0 as PIN_B3
CS as PIN_B4
But don't know what to assign to these defines,
Code: |
#ifndef GLCD_RD
#define GLCD_RD PIN_B5
#endif
#ifndef GLCD_WR
#define GLCD_WR PIN_B1
#endif |
|
|
|
hemnath
Joined: 03 Oct 2012 Posts: 242 Location: chennai
|
|
Posted: Wed Oct 09, 2013 2:30 am |
|
|
I have only R/W pin.. What is GLCD_RD and GLCD_WR in that driver?
Which pins should i connect to?
Please help. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19498
|
|
Posted: Wed Oct 09, 2013 3:12 am |
|
|
As I said, _modified_.
The larger chip has separate read/write pins. The smaller has instruction/data enable, chip enable, and a combined R/W. The point is that the basic command set is the same, so you have to write the I/O section using this, to talk to your display.
It's called programming..... |
|
|
hemnath
Joined: 03 Oct 2012 Posts: 242 Location: chennai
|
|
Posted: Wed Oct 09, 2013 3:42 am |
|
|
Yes i have modified the code as you said.
sample code:
Quote: | #include "18F2520.h"
#fuses INTRC_IO
#use delay(clock = 1000000)
#include "SED1335_LPM.c"
void main()
{
glcd_systemSetup();
glcd_init(ON);
glcd_power(ON);
while(1)
{
glcd_fillScreen(ON);
}
} |
SED1335_LPM.c
Code: | #ifndef GLCD_WIDTH
#define GLCD_WIDTH 122
#endif
#ifndef GLCD_HEIGHT
#define GLCD_HEIGHT 32
#endif
#ifndef GLCD_CHAR_WIDTH
#define GLCD_CHAR_WIDTH 8
#endif
#ifndef GLCD_CHAR_HEIGHT
#define GLCD_CHAR_HEIGHT 8
#endif
#ifndef GLCD_RST
#define GLCD_RST PIN_C1
#endif
#ifndef GLCD_RD
#define GLCD_RD PIN_C0
#endif
#ifndef GLCD_WR
#define GLCD_WR PIN_C0
#endif
#ifndef GLCD_CS
#define GLCD_CS PIN_B4
#endif
#ifndef GLCD_A0
#define GLCD_A0 PIN_B3
#endif |
and output_d() as output_a()
But nothing is displayed on the display. I don't know what to do now. Please help. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19498
|
|
Posted: Wed Oct 09, 2013 4:18 am |
|
|
As I said, _you_need to modify the code. Not just the settings. |
|
|
hemnath
Joined: 03 Oct 2012 Posts: 242 Location: chennai
|
|
Posted: Wed Oct 09, 2013 4:37 am |
|
|
I dunno where to modify. So i'm writing of my own. Please check this program. It is not working. Does my glcd_cmd and glcd_data are correct?
Code: | #include "18F2520.h"
#fuses INTRC_IO
#use delay(clock = 1000000)
#define A0 PIN_B3
#define CS1 PIN_B4
#define CS2 PIN_B5
const unsigned char data[] = {0x00, 0x00, 0xE7, 0xE7, 0xE7, 0xE7, 0x00, 0x00}; // invert of H
void glcd_data(unsigned char z);
void glcd_cmd(unsigned char c);
unsigned int i;
void main()
{
output_high(CS1); // CS1 connected to PIN_B0
output_high(CS2); // CS2 connected to PIN_B1
glcd_cmd(0xe2); //software Reset
glcd_cmd(0xa0); //Select ADC = 0
glcd_cmd(0xa4); //Static Drive OFF
glcd_cmd(0xa9); //Select Duty = 1 /32
glcd_cmd(0xc0); //Set Start Line 0(C0H)~31(DFH)
glcd_cmd(0xb8); //Set Page Address 0(B8H)~3(BBH)
glcd_cmd(0x00); //Set segment Address 0(00H)~(4FH)
glcd_cmd(0xaf); //Set Display ON
while(1)
{
output_high(CS1);
output_high(CS2);
glcd_cmd(0xC0); // display start line
glcd_cmd(0xB8);
for (i = 0; i < 8; i++)
{
glcd_data(data[i]);
}
}
}
void glcd_cmd(unsigned char c)
{
output_low(A0);
output_a(c);
output_low(CS1);
output_low(CS2);
delay_ms(50);
output_high(CS1);
output_high(CS2);
}
void glcd_data(unsigned char z)
{
output_high(A0);
output_a(z);
output_low(CS1);
output_low(CS2);
delay_ms(50);
output_high(CS1);
output_high(CS2);
}
|
|
|
|
hemnath
Joined: 03 Oct 2012 Posts: 242 Location: chennai
|
|
Posted: Thu Oct 10, 2013 5:32 am |
|
|
by which command, the chip gets activated?
output_high(CS1);
(or)
output_low(CS1);
?? |
|
|
oxo
Joined: 13 Nov 2012 Posts: 219 Location: France
|
|
Posted: Thu Oct 10, 2013 5:53 am |
|
|
Read the display data sheet and understand it. If you can't do that, then embedded programming is not for you. |
|
|
|