Pages: [1]   Go Down
Author Topic: Graphic ST7565 Negative LCD 128x64  (Read 986 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi people

I was going to program a Graphic ST7565 Negative LCD 128x64 to display 4 numbers that are read from 4 sensors at each of the 4 corners of the LCD. However, I can't figure out how I can navigate through pixels on the LCD, by looking at the library file. It seems that there are function(s) for it, but I cant figure out which one(s).

Any help will be appreciated smiley
Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 170
Posts: 12483
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Can you post the code you made sofar,
and a link to the library you use
and a link to the datasheet of the LCD if possible.
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Here's a link to where I downloaded the library:

https://github.com/adafruit/ST7565-LCD

Here's a link to the datasheet:

http://www.ladyada.net/learn/lcd/TG12864H3-03A%20EN_V1.1.pdf

Also this is the webpage on adafruit website where I found those links. ( I bought the LCD off that website):

http://www.ladyada.net/learn/lcd/st7565.html

I still haven't written any code, because unlike GLCD library pdf file, I couldn't find any good documentations on how the functions work in this LCD model.

I appreciate any hints or help. smiley-grin
« Last Edit: August 03, 2013, 01:36:49 am by JimboJohn » Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 170
Posts: 12483
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A quick look shows that there is at least a game of life example that does the some pixel addressing

the .h file shows quite a straight forward interface. it has functions to draw lines and write text etc.
Code:
void st7565_init(void);
  void begin(uint8_t contrast);
  void st7565_command(uint8_t c);
  void st7565_data(uint8_t c);
  void st7565_set_brightness(uint8_t val);
  void clear_display(void);
  void clear();
  void display();

  void setpixel(uint8_t x, uint8_t y, uint8_t color);
  uint8_t getpixel(uint8_t x, uint8_t y);
  void fillcircle(uint8_t x0, uint8_t y0, uint8_t r,
  uint8_t color);
  void drawcircle(uint8_t x0, uint8_t y0, uint8_t r,
  uint8_t color);
  void drawrect(uint8_t x, uint8_t y, uint8_t w, uint8_t h,
uint8_t color);
  void fillrect(uint8_t x, uint8_t y, uint8_t w, uint8_t h,
uint8_t color);
  void drawline(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1,
uint8_t color);
  void drawchar(uint8_t x, uint8_t line, char c);
  void drawstring(uint8_t x, uint8_t line, char *c);
  void drawstring_P(uint8_t x, uint8_t line, const char *c);

  void drawbitmap(uint8_t x, uint8_t y,
  const uint8_t *bitmap, uint8_t w, uint8_t h,
  uint8_t color);

Think it is just time to write some code, I don't have such a display so I cannot test it.
Here is some code that should get you started
Code: (not tested)
#define BACKLIGHT_LED 10

// don't know how you connect the thing
// pin 9 - Serial data out (SID)
// pin 8 - Serial clock out (SCLK)
// pin 7 - Data/Command select (RS or A0)
// pin 6 - LCD reset (RST)
// pin 5 - LCD chip select (CS)
ST7565 glcd(9, 8, 7, 6, 5);

void setup()
{
  Serial.begin(115200);
  Serial.println("Set backlight");
  pinMode(BACKLIGHT_LED, OUTPUT);
  digitalWrite(BACKLIGHT_LED, HIGH);

  glcd.st7565_init();
  glcd.st7565_command(CMD_DISPLAY_ON);
  glcd.st7565_command(CMD_SET_ALLPTS_NORMAL);
  glcd.st7565_set_brightness(0x18);

  glcd.display(); // show splashscreen

  glcd.clear();

  glcd.drawstring(20,20, "hello");

  glcd.drawline(0,0,0,60, 0);
  glcd.drawline(0,0,60,60, 1);
  glcd.drawline(0,60,60,60, 2);
}
void loop(){};
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cheers! smiley
Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 170
Posts: 12483
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

did you test it ?
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sorry for late reply.

Thanks again for the code. I tried to upload the code and I got this error:

sketch_aug14a.ino: In function 'void drawGabrielsp138()':
sketch_aug14a:55: error: 'st7565_buffer' was not declared in this scope
sketch_aug14a.ino: In function 'void drawGlider()':
sketch_aug14a:67: error: 'st7565_buffer' was not declared in this scope

Then I put this piece of code in and the error was gone:

extern uint8_t st7565_buffer[1024];

However, nothing was displayed on the lcd, even though the code compiled and uploaded successfully.

I will fiddle with it more and let you know of my progress.

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,
Me again.

The reason it wasnt showing anything was a loose wire...... my baaaaaaad!!!

But, something interesting happens.When i write:

glcd.drawstring(20,20,"hello");

it only displays "h". But when I write:

glcd.drawstring(0,0,"hello");

it displays "hello".

any ideas what could be happening here??
Logged

Israel
Offline Offline
Sr. Member
****
Karma: 4
Posts: 278
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

I will go out on a limp here and assume this is because when you use drawString, the x,y coordinates actually refer to column and row, not a pixel based x,y.
Usually a single character is considered to be 6 pixels wide and 8 pixels in height.
Try something like glcd.drawstring(2,2,"Hello"); and see what happens.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The fact that it wasn't displaying was a loose wire (clumsy me!!!!! smiley-sweat). However, you are correct about it working in column and row system. I have discovered that it does not go over 7 rows and the screen is divided to around 100 columns. each column is as thick as one character.
Logged

Pages: [1]   Go Up
Jump to: