Pages: [1]   Go Down
Author Topic: Adafruit ST7565 Display TG12864H3-05A + ST7565 library = problems  (Read 1311 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Karma: 0
Posts: 2
Arduino rocks ARM
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi, all,
Just have the ST7565 controlled monochrome LCD display TG12864H3-05A from Adafruit
on the table and downloaded/installed their library from here:
I was not able to use adafruits turorial:
without further web search because the pinout of the delivered TG12864H3-05A differs from the one shown in the tutorial.

Their code examples are running "quite ok" (despite their printing-the-font-chars-example  smiley-wink ) in the setup,
but I had difficulties displaying chars incoming from the serial port in the loop,
until I changed their lib-code in the following drawchar procedure in two places:

(Original Code, ST7565.cpp, line 181ff:)
void  ST7565::drawchar(uint8_t x, uint8_t line, char c) {
  for (uint8_t i =0; i<5; i++ ) {
    st7565_buffer[x + (line*128) ] = pgm_read_byte(font+(c*5)+i);
  updateBoundingBox(x, line*8, x+5, line*8 + 8);

Modified code:
void  ST7565::drawchar(uint8_t x, uint8_t line, uint8_t c) {
  for (uint8_t i =0; i<5; i++ ) {
    st7565_buffer[x + (line*128) ] = pgm_read_byte(font+(c*5)+i);
  //updateBoundingBox(x, line*8, x+5, line*8 + 8); //won't work
  updateBoundingBox(x-5, line*8, x, line*8 + 8);   //works well

Short explanation of the parameters:
- "x" is the pixel (horizontally, starting leftmost with zero ) where the character's bytes will be drawn verticaly like "|||||"
  with the most significant bit of the five bytes upmost.
- "line" is the line number (0 based) for 8 pixel high characters.
- "c" has been originaly been type "char", but represents only a number of a character in the font pixelmap (glcdfont.c)
and definitely MUST be a byte, otherwise with "char" above 127 you will get bullshit on your LCDscreen, when you want to display
special characters like the ° or € etc from your 256 x 5-byte font.

For your own characters or the modification of the existing 8x6 font dataset use:

Now everything is fine, and the chars I type on the PC (including special chars)
are appearing on the display:


#include "ST7565.h"

int ledPin =  13;    // LED connected to digital pin 13

// the LCD backlight is connected up to a pin so you can turn it on & off
#define BACKLIGHT_LED 10

// 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);

#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16

uint8_t c=0 ;
uint8_t r=0 ;
uint8_t  q;

// The setup() method runs once, when the sketch starts
void setup()   {                
  // turn on backlight
  digitalWrite(BACKLIGHT_LED, HIGH);

  // initialize and set the contrast to 0x18

  for (byte i=42; i<(42+(21*8)); i++){
    glcd.drawchar(c, r, i);
    if (c>125){
      if (r>7){r=0;}

void loop() {  
  if (Serial.available()>0) {;
    glcd.drawchar(c, r, q);
    if (c>125){ //line feed before reaching Maxpixels-6
      if (r>7){r=0;} //restart in first line

// this handy function will return the number of bytes currently free in RAM, great for debugging!  
int freeRam(void)
  extern int  __bss_end;
  extern int  *__brkval;
  int free_memory;
  if((int)__brkval == 0) {
    free_memory = ((int)&free_memory) - ((int)&__bss_end);
  else {
    free_memory = ((int)&free_memory) - ((int)__brkval);
  return free_memory;

Took a bit of time to figure out, what was going wrong...
Maybe somebody phone with adafuit to have them correct their library?
I hate half-cooked dishes!  smiley-confuse



« Last Edit: April 27, 2013, 10:54:02 am by HDS » Logged

Offline Offline
Shannon Member
Karma: 222
Posts: 12725
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I'm sure you could report this on their forum and link to this thread for the details - they are generally
pro-active in sorting out issues...

[ I won't respond to messages, use the forum please ]

Pages: [1]   Go Up
Jump to: