[SOLVED]5" tft lcd and mega128....not working

Go To Last Post
29 posts / 0 new
Author
Message
#1
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

okay im at wits end, after going over this 500 times the last couple days i still cant get this lcd to work...

info
this is the lcd i bought based off SSD1963 driver
http://www.ebay.ca/itm/5-5-0-inch-TFT-LCD-module-Font-IC-800x480-SSD1963-arduino-DUE-MEGA2560-3-5-7-3-/111005370687?pt=LH_DefaultDomain_0&hash=item19d86f893f

I have been unable to find any atmega libraries for the SSD1963 so aftergetting copies from the arduinos, pic, and the SSD1963 datasheet and what not for reference's ive done my own library.

So at the end of my init routine it should turn the screen red, and all i get from my lcd is a white screen, so it looks like its turning on but thats about it.....Anybody able to help me figure whats wrong

ftf.c

#include 
#include 
#include 
#include 
#include 
#include "TFTLCD.h"


#define sbi(pin) CONPORT |= pin
#define cbi(pin) CONPORT &= ~pin
#define pulse_high(pin) sbi(pin); cbi(pin);
#define pulse_low(pin) cbi(pin); sbi(pin);
#define swap(i, j) {int t = i; i = j; j = t;}


int fcolorr = 0;
int fcolorg = 0;
int fcolorb = 0;
int bcolorr = 0;
int bcolorg = 0;
int bcolorb = 0;
void Setxy(int x1, int y1, int x2, int y2);
void clrxy(void);
void SetColor(int r, int g, int b);
void SetBackground(int r, int g, int b);
void TFT_Write_Bus(char VL);
void TFT_WRITE_COM(char VL);
void TFT_WRITE_DATA(char VL);
void TFTinit(void);

void clrScr(void)
{
	int i;
	int j;
	cbi(CS);
	clrxy();
	for (j=0; j<480; j++)
	{
		for(i=0; i<800; i++)
		{
			TFT_WRITE_DATA(bcolorr);
			TFT_WRITE_DATA(bcolorg);
			TFT_WRITE_DATA(bcolorb);
		}
	}
	
}
void clrxy(void)
{
	Setxy(0, 0, 800, 480);
}
void SetColor(int r, int g, int b)
{
	fcolorr = r;
	fcolorg = g;
	fcolorb = b;
}
void SetBackground(int r, int g, int b)
{
	bcolorr = r;
	bcolorg = g;
	bcolorb = b;
}

void TFT_Write_Bus(char VL)
{
	DATAPORT = VL;
	pulse_low(WR);
}
void TFT_WRITE_COM(char VL)
{
	cbi(RS);
	TFT_Write_Bus(VL);
	
}
void TFT_WRITE_DATA(char VL)
{
	sbi(RS);
	TFT_Write_Bus(VL);
}
void TFTinit(void)
{
	sbi(RST);
	sbi(CS);
	sbi(RD);
	sbi(WR);
	sbi(RS);
	_delay_us(5);
	cbi(RST);
	_delay_us(15);
	sbi(RST);
	_delay_us(15);
	cbi(CS);
	_delay_us(100);
	TFT_WRITE_COM(0xE2);	//Set PLL
	TFT_WRITE_DATA(0x1E);	//m=30
	TFT_WRITE_DATA(0x02);	//n=2
	TFT_WRITE_DATA(0x04);	//Use MN values
	TFT_WRITE_COM(0xE0);	//Start PLL at 103Mhz
	TFT_WRITE_DATA(0x01);
	_delay_us(100);
	TFT_WRITE_COM(0xE0);	//Enable PLL
	TFT_WRITE_DATA(0x03);
	_delay_us(10);
	TFT_WRITE_COM(0x01);	//software reset
	_delay_us(100);
	TFT_WRITE_COM(0xE6);	//PCLK speed based off PLL Freq 33Mhz
	TFT_WRITE_DATA(0x01);
	TFT_WRITE_DATA(0x48);
	TFT_WRITE_DATA(0x13);
	TFT_WRITE_COM(0xB0);	//LCD Spcifications
	TFT_WRITE_DATA(0x24);
	TFT_WRITE_DATA(0x00);
	TFT_WRITE_DATA(0x03);	//Set HDP 799
	TFT_WRITE_DATA(0x1F);
	TFT_WRITE_DATA(0x01);	//Set VDP 479
	TFT_WRITE_DATA(0xDF);
	TFT_WRITE_DATA(0x00);
	TFT_WRITE_COM(0xB4);	//HSYNC
	TFT_WRITE_DATA(0x03);	//Set HT 928
	TFT_WRITE_DATA(0xA0);
	TFT_WRITE_DATA(0x00);	//Set HPS 46
	TFT_WRITE_DATA(0x2E);
	TFT_WRITE_DATA(0x30);	//Set HPW 48
	TFT_WRITE_DATA(0x00);	//Set LPS 15
	TFT_WRITE_DATA(0x0F);
	TFT_WRITE_DATA(0x00);
	TFT_WRITE_COM(0xB6);	//VSYNC
	TFT_WRITE_DATA(0x02);	//Set VT 525
	TFT_WRITE_DATA(0x0D);
	TFT_WRITE_DATA(0x00);	//Set VPS 16
	TFT_WRITE_DATA(0x10);
	TFT_WRITE_DATA(0x10);	//Set VPW 16
	TFT_WRITE_DATA(0x00);	//Set FPS 8
	TFT_WRITE_DATA(0x08);
	TFT_WRITE_COM(0xBA);
	TFT_WRITE_DATA(0x0F);	//GPIO[3:0] out 1
	TFT_WRITE_COM(0xB8);
	TFT_WRITE_DATA(0x07);	//GPIO=Input, GPIO[2:0]=output
	TFT_WRITE_DATA(0x01);	//GPIO0 Normal
	TFT_WRITE_COM(0x36);	//Rotation
	TFT_WRITE_DATA(0x22);
	TFT_WRITE_COM(0xF0);	//Set pixle interface
	TFT_WRITE_DATA(0x00);
	_delay_us(1);
	Setxy(0,0,799,479);
	TFT_WRITE_COM(0x29);	//Turn LCD On
	TFT_WRITE_COM(0xBE);	//Set BL
	TFT_WRITE_DATA(0x06);
	TFT_WRITE_DATA(0xF0);
	TFT_WRITE_DATA(0x01);
	TFT_WRITE_DATA(0xF0);
	TFT_WRITE_DATA(0x00);
	TFT_WRITE_DATA(0x00);
	TFT_WRITE_COM(0xD0);
	TFT_WRITE_DATA(0x0D);
	TFT_WRITE_COM(0x2C);/start memory write
	sbi(CS);
	SetColor(255,255,255);
	SetBackground(255,0,0);
	Setxy(0,0,0,0);
	clrScr();
}
void Setxy(int x1, int y1, int x2, int y2)
{
	//int tmp;
	swap(x1, y1);
	swap(x2, y2);
	TFT_WRITE_COM(0x2A);
	TFT_WRITE_DATA(x1);
	TFT_WRITE_DATA(x2);
	TFT_WRITE_COM(0x2B);
	TFT_WRITE_DATA(y1);
	TFT_WRITE_DATA(y2);
	TFT_WRITE_COM(0x2C);//write Memory Start
}

tft header file


#define DATAPORT PORTA //D0-7
#define CONPORT PORTC
#define WR 1
#define CS 2
#define RD 4
#define RS 3
#define RST 6

void Setxy(int x1, int y1, int x2, int y2);
void clrxy(void);
void clrSr(void);
void SetColor(int r, int g, int b);
void SetBackground(int r, int g, int b);
void TFT_Write_Bus(char VL);
void TFT_WRITE_COM(char VL);
void TFT_WRITE_DATA(char VL);
void TFTinit(void);

main code

#include 
#include 
#include 
#include 
#include 
#include 
#include "TFTLCD.h"

#define F_CPU 8000000


int main(void)
{
	DDRA = 0xFF;
	DDRC = 0xFF;
	DDRD = 0xFF;
	void TFTinit(void);
    while(1)
    {
        	PORTD ^= 0xFF;// heart beat
		_delay_ms(1000);
    }
}
Last Edited: Sun. May 12, 2013 - 11:14 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Are you using 8 bit mode or 16 bit mode? or other?

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

For starters, these are wrong:

#define sbi(pin) CONPORT |= pin
#define cbi(pin) CONPORT &= ~pin

With the constants being sent in defined as bit numbers, these should be:

#define sbi(pin) CONPORT |= (1<<pin)
#define cbi(pin) CONPORT &= ~(1<<pin) 

Regards,
Steve A.

The Board helps those that help themselves.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

8 bit...so i send each color in 8 bit format for a total of 24 bits per pixel

Koshchi wrote:
For starters, these are wrong:

#define sbi(pin) CONPORT |= pin
#define cbi(pin) CONPORT &= ~pin

With the constants being sent in defined as bit numbers, these should be:

#define sbi(pin) CONPORT |= (1<<pin)
#define cbi(pin) CONPORT &= ~(1<<pin) 

I will give that a shot right now.....Fingers crossed

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

damn no change....screen still white

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:
I have been unable to find any atmega libraries for the SSD1963
Huh??? There is one linked to on the ebay page that you bought the display from!

Regards,
Steve A.

The Board helps those that help themselves.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:
8 bit format for a total of 24 bits per pixel
Not sure about that, the stuff I have used in 8 bit more requires 2x8 bit data still formatted as 565 format. But your display may be different.

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Koshchi wrote:
Quote:
I have been unable to find any atmega libraries for the SSD1963
Huh??? There is one linked to on the ebay page that you bought the display from!

that library is for the arduino

Quote:

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

js wrote:
Quote:
8 bit format for a total of 24 bits per pixel
Not sure about that, the stuff I have used in 8 bit more requires 2x8 bit data still formatted as 565 format. But your display may be different.

according to the SSD1963 data sheet, for the 0xF0 command sets the pixel data interface which i set as 0x00 which is 8 bit so i send my color 8 bits red , then 8 bits green, and then 8bits blue....the 2 LSB of each color is ignored by the SSD1963

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:
that library is for the arduino
So what? Arduino uses megas. There is almost nothing in that code that is Arduino specific, and what is can easily be ported to straight C.

Regards,
Steve A.

The Board helps those that help themselves.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

that was one of the libraries i used for my reference....
the init routine their is identical except for 2 differences...my pixel clock is set to 33mhz instead of 51.5mhz as per the datasheet for the lcd panel itself, and my routine sets the data interface to 8 bit instead of 16bit

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:
my routine sets the data interface to 8 bit instead of 16bit
But what is the GLCD HARDWARE set for? There is usually a jumper to set 8, 16 bits or other.

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

js wrote:
Quote:
my routine sets the data interface to 8 bit instead of 16bit
But what is the GLCD HARDWARE set for? There is usually a jumper to set 8, 16 bits or other.

according to the schematic and documentation their are no hardware jumpers and that it will accept 8 bit and 16 bit interfaces

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Where did you get the GLCD schematics from? I could not find it, however the "shields" were both wired for 16 bit mode.

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

js wrote:
Where did you get the GLCD schematics from? I could not find it, however the "shields" were both wired for 16 bit mode.

right above the links for tft libraries or the arduino.... or click the link below
http://coldtears.lin3.siteonlinetest.com/files/5.0F.zip

that zip file also contains all the datasheets aswell

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Well that display seems quite different than ones I have used.

If you look at the SSD1963 datasheet under 7.1.4 Pixel Data Format you can see the various way data needs to be presented to the display, however I don't see any HARDWARE way of selecting the different modes, maybe the software does it for you.

The only hardware pin available seems to be the CONF pin MCU interface configuration 0: 6800 Interface 1: 8080 Interface which is pulled up so it is running in 8080 Interface mode.

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

js wrote:
Well that display seems quite different than ones I have used.

If you look at the SSD1963 datasheet under 7.1.4 Pixel Data Format you can see the various way data needs to be presented to the display, however I don't see any HARDWARE way of selecting the different modes, maybe the software does it for you.

The only hardware pin available seems to be the CONF pin MCU interface configuration 0: 6800 Interface 1: 8080 Interface which is pulled up so it is running in 8080 Interface mode.

correct i am in 8080 mode and have set the 8 bit transfer mode...data is latched when #CS is 0 and when #WR transstions from 0 to 1

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I found some code which uses 8 or 16 bit mode, I don't think I have even used 8 bit mode with that chip. Here is the init for what it is worth in case it helps.

void GLCD_Init(void)

{

//SSD1963 here Reset is high and has been pulsed.

//Kitronix code

// Enter sleep mode (if we are not already there).
	 GLCD_Write_Register (SSD1963_SOFT_RESET);	// software reset
 
// Delay for 1ms.
 	_delay_ms(1);

   	GLCD_Write_Register (SSD1963_SET_PLL_MN);	//PLL multiplier, set PLL clock to 120M
	GLCD_Write_Data(0x002E);	//29	    //N=0x36 for 6.5M, 0x23 for 10M crystal
	GLCD_Write_Data(0x0003);
	GLCD_Write_Data(0x0004);

	GLCD_Set_Register (SSD1963_SET_PLL, 0x0001);	// PLL enable

// Delay for 100us.
	_delay_us(100);

	GLCD_Set_Register (SSD1963_SET_PLL, 0x0003);

// Delay for 500us.
 	_delay_us(500);

	GLCD_Write_Register (SSD1963_SET_LSHIFT_FREQ);	//PLL setting for PCLK, depends on resolution
	GLCD_Write_Data (0x0002);	//04
	GLCD_Write_Data (0x00C0);	//B9
	GLCD_Write_Data (0x0038);	//38

	GLCD_Write_Register (SSD1963_SET_LCD_MODE);		//LCD SPECIFICATION
	GLCD_Write_Data (0x0020);	//24
	GLCD_Write_Data (0x0000);

	GLCD_Write_Data (0x03);
	GLCD_Write_Data (0x1f);
	GLCD_Write_Data (0x01);
	GLCD_Write_Data (0xdf);

	GLCD_Write_Data (0x0000);

	GLCD_Write_Register (SSD1963_SET_HORI_PERIOD);	//HSYNC
	GLCD_Write_Data (0x03);
	GLCD_Write_Data (0xF8);
	GLCD_Write_Data (0);
	GLCD_Write_Data (0xB4);
	GLCD_Write_Data (0x59);
	GLCD_Write_Data (0);
	GLCD_Write_Data (0);
	GLCD_Write_Data (0);

	GLCD_Write_Register (SSD1963_SET_VERT_PERIOD);	//VSYNC
	GLCD_Write_Data (0x01);
	GLCD_Write_Data (0xFB);
	GLCD_Write_Data (0);
	GLCD_Write_Data (0x14);
	GLCD_Write_Data (0x09);
	GLCD_Write_Data (0);
	GLCD_Write_Data (0);

	GLCD_Write_Register (SSD1963_SET_GPIO_CONF);
	GLCD_Write_Data (0x0007);					//GPIO3=input, GPIO[2:0]=output
	GLCD_Write_Data (0x0001);					//GPIO0 normal

	GLCD_Set_Register (SSD1963_SET_GPIO_VALUE, 0x000F);

	GLCD_Write_Register (SSD1963_SET_ADDRESS_MODE);	//rotation
#ifdef Landscape
	GLCD_Write_Data (1<<Flip_Horizontal);			//(0x0002);
#else
	GLCD_Write_Data (1<<Portrait | 1<<Flip_Horizontal | 1<<Flip_Vertical);
#endif


#ifdef GLCD_8_BIT_MODE
	GLCD_Set_Register (SSD1963_SET_PIXEL_DATA_INTERFACE, SSD1963_PDI_8BIT);			//pixel data interface 8 bits
#else
	GLCD_Set_Register (SSD1963_SET_PIXEL_DATA_INTERFACE, SSD1963_PDI_16BIT565 );	//pixel data interface 16 bits
#endif

// Delay for 1ms.
	_delay_ms(1);

//LCD_clear();
	GLCD_Write_Register (SSD1963_SET_PWM_CONF);	//set PWM for B/L
	GLCD_Write_Data (0x0001);					//06 frequency
	GLCD_Write_Data (0x00FF);					//C0 duty
	GLCD_Write_Data (0x0009);					//bit[3]DBC enable,bit[0]PWM enable
	GLCD_Write_Data (0x00FF);					//C0 DBC manual brightness
	GLCD_Write_Data (0x0088);					//10 DBC minimum brightness
	GLCD_Write_Data (0x0000);					//08 Brightness prescaler

	GLCD_Write_Register (SSD1963_SET_DBC_TH);
	GLCD_Write_Data (0x0000);
	GLCD_Write_Data (0x001C);
	GLCD_Write_Data (0x0020);
	GLCD_Write_Data (0x0000);
	GLCD_Write_Data (0x0046);
	GLCD_Write_Data (0x0050);
	GLCD_Write_Data (0x0000);
	GLCD_Write_Data (0x00A8);
	GLCD_Write_Data (0x00C0);

	GLCD_Set_Register (SSD1963_SET_DBC_CONF, 0x0001);	//DBC disable
	//GLCD_Write_Data(0x000D);	//DBC Aggressive mode

// Set the X address of the display cursor.
	GLCD_Write_Register (SSD1963_SET_COLUMN_ADDRESS);
	GLCD_Write_Data(0);
	GLCD_Write_Data(0);
	GLCD_Write_Data (SCREEN_HOR_SIZE >>8);
	GLCD_Write_Data (SCREEN_HOR_SIZE & 0xFF);

// Set the Y address of the display cursor.
    GLCD_Write_Register (SSD1963_SET_PAGE_ADDRESS);
	GLCD_Write_Data(0);
	GLCD_Write_Data(0);
	GLCD_Write_Data (SCREEN_VER_SIZE >>8);
	GLCD_Write_Data (SCREEN_VER_SIZE & 0xFF);

	GLCD_Write_Register (SSD1963_SET_DISPLAY_ON);	//display on
}    

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Wow were did you find that....i spent a good week on google trykng to find code.....ill try that lib when i get home

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:

Wow were did you find that....i spent a good week on google trykng to find code...

If you now Google for something fairly unique from that such as: "GLCD_Write_Register (SSD1963_SET_PAGE_ADDRESS); " you will find that the only place it has ever been "published" is this very thread in fact (1 hit on Google). I believe it's John's own code and he's previously used that display.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Well I'm not really that clever :-) , I got bits and pieces from variuous sources including some from Kentec who sells the display I used.

I massaged things so that I can easily (almost) change driver chips by changing only about 3 or 4 functions, the most important is the init.

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

okay so i changed some values based off the code you provided JS....which only really happened to be the pll frequency and the pixel clock frequency....

nothing still just a white display....

also noted 2 other errors in my code....in my clrsrc routine i forgot to set CS again...also in my setxy routine the ssd1963 requires 2 bytes for x start 2 bytes for x end, 2 bytes for y start and 2 bytes for y end... for a total of 8 bytes and i was only sending 4.....

although im still at the white screen of death as i have dubbed it!!! :(

Only plus side is im learning this ssd1963 chip inside out....im rarley having to look at the datasheet for register addresses:)

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Codevision has a ready made example project for the SSD1963 to test your hardware, however you will need to wireup your module the way the demo version shows and it is for the Xmega chip unfortuanately for you.
(and the libraries are precompiled)

Not sure if the ASF supports the SSD1963 yet, but if it does you will need to be a super genius to get anything to work with th ASF. :(

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

js wrote:
Codevision has a ready made example project for the SSD1963 to test your hardware, however you will need to wireup your module the way the demo version shows and it is for the Xmega chip unfortuanately for you.
(and the libraries are precompiled)

Not sure if the ASF supports the SSD1963 yet, but if it does you will need to be a super genius to get anything to work with th ASF. :(

not really unfortunate seeing as i have recently recieved the a1 xplaied board....whioch means maybe ill wire that up and test if maybe the lcd is cooked....if it works on the explained board then i know the is something wrong with my code or my hardware...

thanks for finding that demo for me!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

figured it out...after tyring that demo code on my xplained A1 I went back over my code and saw my mistake....and i can't believe nobody else noticed it..

in my main function i wrote

void TFT_init(void);

instead of what i should have had

TFT_init();

so in other words the compiler just skipped right to the heart beat....didnt even try and initialize!!!

thanks for the help everyone....once i get my ssd1963 library done I will post for everyone to enjoy!!!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Quote:
i can't believe nobody else noticed it..
Maybe no one looked? ;-)

I can't look at code because I get seasick, the only way I do things it to have a debugger plugged into my board and start running the code, then figure out why things don't work.

Congratulations anyway.

John Samperi

Ampertronics Pty. Ltd.

www.ampertronics.com.au

* Electronic Design * Custom Products * Contract Assembly

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

js wrote:
Quote:
i can't believe nobody else noticed it..
Maybe no one looked? ;-)

I can't look at code because I get seasick, the only way I do things it to have a debugger plugged into my board and start running the code, then figure out why things don't work.

Congratulations anyway.

well usually i would do that but when i started this thread my avr dragon wouldnt work right at 3.3V...as in I could program but it would fail the varification process, so i was constantly disconnecting my lcd to program in 5v then switch back to 3.3v ...i just found out today that the reason it was doing that was because my 10pin ribbon was to long...once i switched to a short one everything worked perfectly!!!! thanks for all the help js!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Please provide the meaning of pixel data interface format and tft panel data width mentioned in ssd1963 data sheet anybody. I have read data sheet but i am little confused and i want to know and verify whether i am thinking in right direction or not.

PS: I am keeping 8 bit pixel data interface format for 24bpp (rgb) and 24 bit tft panel data width.

Thanks in advance. Hoping for an answer!!!!!!

Kunal

Last Edited: Fri. Jul 15, 2016 - 08:51 AM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

If you have an 8 bit port to write a 24 bit pixel, you need to write the r,g,b bytes into the controller one at a time. How about using a 16 bit pixel, with 565 rgb. You only have to write 2 bytes, so it will redraw 33% faster. 565 mode has 64000 colors, 24 bit mode has 16 million colors. 64000 might be Good Enough.

Imagecraft compiler user