ILI9163C 128x128 TFT driver

Status
Not open for further replies.
Nevermind, can replicate the problem and fixed. The incoming 1.0p7 will fix this and add many other features.
The problem it's caused by the damn offset introduced in every new display that it's always different and forced chinese vendor to setup displays with different memory map even if size it's 128*128, figure out what I have to do inside library to fit every configuration without slow down code and take care of every configuration, sigh.
 
I just ordered a couple of these LCD 1.44" Red Serial 128X128 SPI - shown with yellow pins and smaller PCB. Delivery ePacket CN to US May 3-17.

My boards came - not powered but it looks like this: spi128st7735.png
 
Last edited:
Cool - Thanks! I just plugged it into the ILI9341 Touch board (shifted to the left) I wired up based on the store page.

The Post #77 "Yellow Pin" works properly adjusted on a T_3.2 with comment to line 13 and uncomment the line 14 below in the 1.0r6:

#include "../_display/TFT_ILI9163C_RED_PCB_YPIN.h"//the infamous 2016 yellow pin/red pcb one

To SomeBars_example it needed 'tft' added: TFT_ILI9163C tft = TFT_ILI9163C(__CS, __DC, __RST);

IT RUNS REALLY REALLY FAST!
 
sumotoy - I see some bar to bar crosstalk in this modified version of "SomeBars_example"?

BTW - it updates smoothly at 20 FPS - but without delay it hit 100 FPS - it doesn't have problems at 100 FPS - but it is too fast have the bars stabilize

Modified this to stay in the BLUE bar range (with fewer bars) where the contrast is most obvious - and slowed it down so you could watch:

Code:
/*
	Very easy vertical VU
*/

#include <SPI.h>
#include <TFT_ILI9163C.h>

/*
  Teensy3.x and Arduino's
  You are using 4 wire SPI here, so:
  MOSI:  11//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
  MISO:  12//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
  SCK:   13//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
  Teensy 3.x can use: 2,6,10,15,20,21,22,23
  Arduino's 8 bit: any
  DUE: check arduino site
  If you do not use reset, tie it to +3V3
  ESP8266-----------------------------------
  Use:
  #define __CS  16  //(D0)
  #define __DC  5   //(D1)
  #define __RST 4   //(D2)

  SCLK:D5
  MOSI:D7
*/
#define __CS   10
#define __DC  9
#define __RST   14


#define _BARS 		4
#define _BARWIDTH 	22
#define _BARSPACE 	1
TFT_ILI9163C tft = TFT_ILI9163C(__CS, __DC, __RST);
void setup() {
  Serial.begin(38400);
  while (!Serial && (millis ()  <= 3000)) ;
  Serial.println("Init! ");
  tft.begin();
}
uint cnt = 0;
int delta = 1;
uint saved = 1;
elapsedMicros timed;

#define __MAX 25  // MAX full range 255 - _BARS
#define __MIN 2   // MIN full range is 0
#define __DELAY 100000 // microseconds delay

void loop() {
  for (uint8_t i = 0; i < _BARS; i++) {
    //    drawVerticalVU(_BARWIDTH * i + _BARSPACE * i, _BARS, _BARWIDTH, random(255), 0);
    if ( i == ( cnt % _BARS ) )
      drawVerticalVU(_BARWIDTH * i + _BARSPACE * i, 1, _BARWIDTH, random(255), 0);
    else
      drawVerticalVU(_BARWIDTH * i + _BARSPACE * i, 1, _BARWIDTH, cnt + i, 0);
  }
  drawVerticalVU(_BARWIDTH * _BARS + _BARSPACE * _BARS, 1, _BARWIDTH, __MAX - cnt, 0);
  cnt += delta;
  if ( cnt > __MAX || __MIN == cnt) {
    cnt = timed;
    if ( 1 == saved ) {
      saved = 0;
      timed = 0;
    }
    else if ( 0 == saved ) {
      saved = cnt;
      Serial.print("for ");
      Serial.print(__MAX);
      Serial.print(" Full bar cycles == ");
      Serial.println(saved);
    }
    if ( 1 == delta ) {
      delta = -1;
      cnt = __MAX;
    }
    else  {
      delta = 1;
      cnt = __MIN;
    }
    if ( 15000000 < timed ) {
      saved = 1;
      timed = 0;
    }
  }
  delayMicroseconds(__DELAY);
}

/*
  if color = 0 it will create a value sensitive spectrum color
*/
void drawVerticalVU(uint8_t x, uint8_t y, uint8_t w, uint8_t val, uint16_t color) {
  uint8_t h = map(val, 0, 255, 127 - y, 0);
  if (color < 1) color = tft.grandient(map(val, 0, 255, 0, 127));
  tft.fillRect(x, 0, w, h, DARK_GREY);
  if (val > 4) tft.fillRect(x, h + 1, w, 127 - (h + y + 2), color);
}
 
Oh, missed some post!
defragster, I have almost ready the 1.0p7 with lots of changes, I will publish later, thanks for observations, all precious!
The 1.0p7 finally fix scroll, better circle drawing(filled or not) plus lot of small optimizations and ability to change default font.
I have introduced grandients in some function as well, those displays are so small that grandients are not so consuming...
 
sumotoy - I'll try again when you push 1.0p7 and update. After I figured out how to get github to give me 1.0p6 - no longer using Adafruit.gfx - I checked for the 1.0p7 and figured it was still cooking - get back to work ;-)

It took me a bit to find the _settings.h to adjust to my YELLOW spacer red board for the screen shift, even then I was happy to see it running!
 
is it easy to use the multifont library? I am considering that one form my Diy Smartwatch project because the sumotoy library uses only 1 fontbut with several sizes, so how is it going with spi flash? is there a way to reconfigure the spi speed? I am usng sumotoy library right now, and i've read somewhere that the default is at 20Mhz is it pissible to make it 36Mhz or use the teensy -lc 40Mhz?
 
Library is multifont, you can use more fonts. The 1.0p7 (incoming) let you change the default font as well and you can convert your own fonts.
About the SPI speed, I'm using 30Mhz (that fall down automatically in relation CPU speed) but since all library uses SPI Transactions it's easy change speed and new 1.0p7 has a constant for that.
Btw the speed with Teensy LC is not as Teensy 3.x, I can improve a lot but in the future....
 
Sumotoy, could you help with your library, I need to put a simple bitmap but I can't doit , I don't know what I am doing wrong.
I put the code

Code:
/* Binary sketch size: 10,188 bytes (of a 30,720 byte maximum)
   Tested and documented by M. Ray Burnette 20140812
   Compiled with Arduino 1.0.5 for Arduino Nano (clone)
   WARNING: direct GLCD wiring requires that Arduino run at 3.3 Volts maximum!
*/
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <TFT_ILI9163C.h>
#include <avr/pgmspace.h>

extern uint8_t sinagua[];

// All wiring required, only 3 defines for hardware SPI on 328P
#define __DC 9
#define __CS 10
#define __RST 12
// Color definitions
#define	BLACK   0x0000
#define	BLUE    0x001F
#define	RED     0xF800
#define	GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0  
#define WHITE   0xFFFF

TFT_ILI9163C tft = TFT_ILI9163C(__CS, __DC, __RST);

void setup() {
  tft.begin();
  draw();
}

void loop(){
}


unsigned long draw() {
  tft.fillScreen();
  tft.setCursor(0, 0);
  tft.setTextColor(WHITE);  
  tft.setTextSize(1);
  tft.println("Sin agua");
  tft.drawBitmap(0, 0, sinagua, 48, 48, WHITE);

  delay(5000);
}

and this is the code for the bitmap

Code:
#include <avr/pgmspace.h>

const unsigned char sinagua [] PROGMEM = {
0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80,
0x01, 0x01, 0xC0, 0xC0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xC0, 0xC0, 0x01, 0x01, 0x00,
0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x81, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC1,
0xE3, 0xE6, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xEC, 0xC6,
0xC3, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x0F,
0x8F, 0xDF, 0x7F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x3F, 0x7F, 0xDF, 0x9F,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x07, 0x87, 0xC7, 0x67, 0x33, 0x18, 0x0C, 0x06, 0x03,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80
};

I use this web to doit http://javl.github.io/image2cpp/ I show the array is correct and the bitmap in the web looks perfect.
Captura de pantalla 2016-05-09 10.10.12.png

76155723-fa15-4333-b224-25a3dfa837d9.jpg

I attach the program,
View attachment sumotoy_bitmap.zip
Thanks for your help
 
Last edited:
Using the 1.0p6 version on my system there were some compile problems (edit included below). I got around those and get a similar image to what you get, except at 0,0 the bitmap overwrites the text.

Going to the place you say converted the bitmap - which you didn't include the source for - I see this which demonstrates something like the problem:

Draw mode: {}Horizontal {}Vertical
If your image looks all messed up on your display, like the image below, try the other mode.

Based on that you should try your image as Vertical instead of the default horizontal.

<edit>:I tried this with my own image and the code generated by image2cpp/ doesn't seem to work with any options
sumotoy Github links to a converter - but I don't have a way to build that to run on Windows.
Here is the file I tried:: pjrcdefragster.png

Code:
/* Binary sketch size: 10,188 bytes (of a 30,720 byte maximum)
   Tested and documented by M. Ray Burnette 20140812
   Compiled with Arduino 1.0.5 for Arduino Nano (clone)
   WARNING: direct GLCD wiring requires that Arduino run at 3.3 Volts maximum!
*/

// https://forum.pjrc.com/threads/25862-ILI9163C-128x128-TFT-driver?p=104002&viewfull=1#post104002

#include <SPI.h>
//#include <Adafruit_GFX.h>
#include <TFT_ILI9163C.h>

const uint8_t sinagua[]  = {
 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80,
 0x01, 0x01, 0xC0, 0xC0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xC0, 0xC0, 0x01, 0x01, 0x00,
 0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x81, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC1,
 0xE3, 0xE6, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xEC, 0xC6,
 0xC3, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFE, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x0F,
 0x8F, 0xDF, 0x7F, 0x3F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x3F, 0x7F, 0xDF, 0x9F,
 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07, 0x07, 0x87, 0xC7, 0x67, 0x33, 0x18, 0x0C, 0x06, 0x03,
 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80
 };
//extern uint8_t sinagua[];

// All wiring required, only 3 defines for hardware SPI on 328P
#define __DC 9
#define __CS 10
#define __RST 14 // 12
// Color definitions
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0  
#define WHITE   0xFFFF

TFT_ILI9163C tft = TFT_ILI9163C(__CS, __DC, __RST);

void setup() {
  tft.begin();
  draw();
}

void loop(){
}


void draw() {
  tft.fillScreen( BLACK );
  tft.setCursor(0, 0);
  tft.setTextColor(WHITE);  
  tft.setTextSize(1);
  tft.println("Sin agua");
  delay(5000);
  tft.drawBitmap(0, 20, sinagua, 48, 48, WHITE);

}
 
Last edited:
I think the problem is the byte formatting from the converter. Maybe sumotoy can clarify - or convert my image to test.
 
elricho - your screen is shifted down from mine according to the picture - the text should be at the top. Look at my post #78 in the _settings file to make sure you have the right display selected.
 
Yes on my libraries\TFT_ILI9163C\_settings\TFT_ILI9163C_settings.h

Code:
#ifndef _TFT_ILI9163C_USETT_H_
#define _TFT_ILI9163C_USETT_H_
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
									USER SETTINGS
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*--------------------------------------------------------------------------------
Here you have to select the display you own..........................
You have a RED PCB, BLACK PCB or what?
Default: #include "../_display/TFT_ILI9163C_RED_PCB_OLD.h"
(uncomment just one below...)
----------------------------------------------------------------------------------*/
//#include "../_display/TFT_ILI9163C_BLACK_PCB.h"
//#include "../_display/TFT_ILI9163C_RED_PCB_OLD.h"
#include "../_display/TFT_ILI9163C_RED_PCB_YPIN.h"//the infamous 2016 yellow pin/red pcb one
/*--------------------------------------------------------------------------------
- Default Display Rotation -
This parameter can be changed in your code but here you can force orientation
Default:0 
----------------------------------------------------------------------------------*/
#define _ILI9163C_ROTATION			0
/*--------------------------------------------------------------------------------
- Default Background Color & Default Foreground Color -
When display turns on, it will set the defaul background and foreground.
the default background and foreground affects several other function
when you forget to assign color, for example clearScreen() will clear screen to black
Assigning setBackground(0xF800), red, will result in a red screen when cleared.
Default:BLACK & WHITE
----------------------------------------------------------------------------------*/
#define _ILI9163C_BACKGROUND		BLACK
#define _ILI9163C_FOREGROUND		WHITE
/*--------------------------------------------------------------------------------
- Pre 1.0.r6 Font Compatibility -
Since version preview 1.0r6 the library use a slight different font conversion to ensure
compatibility with online compilers or OSX custom IDE. The reason it's get rid of preprocessor
placeholders that causes errors in some compilers. The new font scheme it's compatible with
old library versions but the fonts pre-1.0r6 NOT. By uncomment the below you will force
library to handle with old font scheme but I raccomand to use the new one (or just re-convert 
your font with the 1.0r6 version template (sumotoy_font_2.1.tmpl, preset (Font_Conversion.xml)
Default:commented
----------------------------------------------------------------------------------*/
//#define _TFTILI9163_OLDFNT//uncomment for use pre 1.0.r6 font scheme fonts
/*--------------------------------------------------------------------------------
- Teensy LC Fast CS Port option -
Teensy LC optional Direct Port vs digitalWriteFast methods
If you have any issues ONLY with Teensy LC and other SPI devices that share
the same SPI lines try to comment the line nelow...
The library default uses Direct Port Manipulation (that it's slight faster)
Default:uncommented
----------------------------------------------------------------------------------*/
#define _TEENSYLC_FASTPORT
/*--------------------------------------------------------------------------------
- ESP8266 SPI Speed -
Some module has problems to work at full speed, I don't know exactly why but I have four nodemcu modules
all running at full speed and never a problem. I actually updated all my modules with 
v1.3.0.2 AT Firmware.bin, official one, but I'm not expert on this, maybe it's not important.
You can slow down the speed by changing the default to 8000000.
Default:80000000UL
----------------------------------------------------------------------------------*/
#define _ESP8266MAXSPISPEED			80000000UL
/*--------------------------------------------------------------------------------
- ESP8266 Compatibility mode -
This force library to use an alternative way to trigger ESP8266 GPIO, if you uncomment
the line it will use the standard digitaWrite wich is slow, this help debuggin.
NOTE: This is MUCH slower!
Default:commented
----------------------------------------------------------------------------------*/
//#define _ESP8266_STANDARDMODE
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*---------------------------------------------------------------------------------
 							 END OF USER SETTINGS
----------------------------------------------------------------------------------*/

/* GAMMA SET DEFINITIONS ----------------------------------------------------------*/
	#if defined(__GAMMASET1)
		static const uint8_t pGammaSet[15]= {0x36,0x29,0x12,0x22,0x1C,0x15,0x42,0xB7,0x2F,0x13,0x12,0x0A,0x11,0x0B,0x06};
		static const uint8_t nGammaSet[15]= {0x09,0x16,0x2D,0x0D,0x13,0x15,0x40,0x48,0x53,0x0C,0x1D,0x25,0x2E,0x34,0x39};
	#elif defined(__GAMMASET2)
		static const uint8_t pGammaSet[15]= {0x3F,0x21,0x12,0x22,0x1C,0x15,0x42,0xB7,0x2F,0x13,0x02,0x0A,0x01,0x00,0x00};
		static const uint8_t nGammaSet[15]= {0x09,0x18,0x2D,0x0D,0x13,0x15,0x40,0x48,0x53,0x0C,0x1D,0x25,0x2E,0x24,0x29};
	#elif defined(__GAMMASET3)
		static const uint8_t pGammaSet[15]= {0x3F,0x26,0x23,0x30,0x28,0x10,0x55,0xB7,0x40,0x19,0x10,0x1E,0x02,0x01,0x00};
		static const uint8_t nGammaSet[15]= {0x09,0x18,0x2D,0x0D,0x13,0x15,0x40,0x48,0x53,0x0C,0x1D,0x25,0x2E,0x24,0x29};
	#else
		static const uint8_t pGammaSet[15]= {0x3F,0x25,0x1C,0x1E,0x20,0x12,0x2A,0x90,0x24,0x11,0x00,0x00,0x00,0x00,0x00};
		static const uint8_t nGammaSet[15]= {0x20,0x20,0x20,0x20,0x05,0x15,0x00,0xA7,0x3D,0x18,0x25,0x2A,0x2B,0x2B,0x3A};
	#endif
/*---------------------------------------------------------------------------------*/
//Constants (do not change!)
	//well I don't know any display different than 128*128!
	static const int16_t TFT_ILI9163C_W 		=		128;
	static const int16_t TFT_ILI9163C_H 		=		128;
	static const uint16_t TFT_ILI9163C_CGRAM	=		TFT_ILI9163C_CGR_W * TFT_ILI9163C_CGR_H;
#endif

This is my configuration, and this is my screen
IMG-20160509-WA0007.jpgIMG-20160509-WA0005.jpg
 
That's the display and _settings I have - what is displayed looks like mine now. We'll see if the 1.0p7 update changes anything - or other sumotoy feedback.
 
I will probably (99% sure) release 1.0p7 tomorrow, just checking between MCU's to be sure anithing broken. Then I'll help you Elrico.
It's a massive upgrade, lot's of changes and fixes.

The converter I use for fonts and images WORKS on windows, linux (Osx need to be compiled), just be sure read the github readme and you will find this

 
Last edited:
Thanks sumotoy - indeed there is a working Windows EXE in there. Now I just need to know how to use it.

I tried a conversion and get bad screen drawing - copied into the LoadImage_noSD code and that failed. That didn't show BatMan either so will wait for p7 release.

<edit>: By the way BigTest works - lots of variety in the display and fast.
 
Last edited:
I'm currently fixing the last issues with the damn scroll that is memory mapped and I have to deal with all chinese display variations (aka, offset) without create a mess in code, this issue it's really time-consuming, I never used scroll but it will be nice to have this damn thing fixed.
Apart that, the 1.0p7 have LoadImage_noSD fixed and quite a lot of other stuff optimized, fixed.
I will try to include animation icons as well!
The purpose is use the entire library skeleton for many other display library I have on github and since I'm using an custom optimized font rendering, fonts and images can be shared between libraries.
The font rendering has a nice decent speed for small fonts but really fast on big ones and if display chip has hardware accellerated primitives it will shine because it analize glyph and try to draw by using primitives, this is not the case of ILI9163C but on RA8875 and some SSD chip will make the difference, last test shows that even without hardware accelleration it makes the difference.
Fonts are encoded in a way that AVR can use PROGMEM so I can use library even with memory limited CPU, the 1.0p7 has a new encoding structure so old library fonts should be simply re-encoded with new scheme, the library will include the Template for font converter, but I will include some other fonts for play.
I will publish a couple of wiki about converting fonts and images. The converter uses templates and presets, I have already create both so you can easily follow wiki and use my templates.
Thanks to test it! I have included all the necessary to build GUY easy and with new library scheme user can choose many different display's (even OLED) and use same code, fonts, images, at list this is what I'm try to do!

UPDATE:
Added the ability to have multiple instances even with display of different type, sharing same fonts and images, probably (have to test in a bit) using just one more wire per display.
This allow user to use 2 or more display with few resources.

The Yellow pin RED PCB display seems upside down, have to fix more stuff inside library so pardon me if I'm late.
 
Last edited:
Hi defragster, tomorrow I can send you a beta if you want to test.
Yesterday I've enabled multiple instances option and discovered more issues, thanks to double screen, sigh!
But I solved most, still have to tuning the damn scroll for all display strain (for yellow pin it's just fine).
It's a massive upgrade so I want be sure it works better than before!
I can drive 2 or more display by just add one wire each, for slow update display I experimented 16 display by using just 1 more wire upgradeable to 64 or more (I will send a video of 15) and MCP23s17 plus a couple of buffers.
 
Library is multifont, you can use more fonts. The 1.0p7 (incoming) let you change the default font as well and you can convert your own fonts.
About the SPI speed, I'm using 30Mhz (that fall down automatically in relation CPU speed) but since all library uses SPI Transactions it's easy change speed and new 1.0p7 has a constant for that.
Btw the speed with Teensy LC is not as Teensy 3.x, I can improve a lot but in the future....
thanks for this info, I was able to use other fonts, but it would be awesome though to reduce the size of the text when I choose textsize=2, it is too big,

@sumoty, can you create a font similar to those fonts used in iphone? that would be so awesome
 
Status
Not open for further replies.
Back
Top