Mostly touch screen changes
This commit is contained in:
parent
1ac4e022a3
commit
02d8870981
|
|
@ -55,7 +55,6 @@ void Adafruit_RA8875::softReset(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adafruit_RA8875::PLLinit(void) {
|
void Adafruit_RA8875::PLLinit(void) {
|
||||||
// for 480 x 272
|
|
||||||
if (_size == RA8875_480x272) {
|
if (_size == RA8875_480x272) {
|
||||||
writeReg(RA8875_PLLC1, RA8875_PLLC1_PLLDIV1 + 10);
|
writeReg(RA8875_PLLC1, RA8875_PLLC1_PLLDIV1 + 10);
|
||||||
delay(1);
|
delay(1);
|
||||||
|
|
@ -70,15 +69,23 @@ void Adafruit_RA8875::PLLinit(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Adafruit_RA8875::initialize(void) {
|
void Adafruit_RA8875::initialize(void) {
|
||||||
PLLinit();
|
PLLinit();
|
||||||
writeReg(RA8875_SYSR, RA8875_SYSR_16BPP | RA8875_SYSR_MCU8);
|
writeReg(RA8875_SYSR, RA8875_SYSR_16BPP | RA8875_SYSR_MCU8);
|
||||||
|
|
||||||
// for 480 x 272
|
/* Timing values */
|
||||||
uint8_t pixclk, hsync_start, hsync_pw, hsync_finetune, hsync_nondisp, vsync_pw;
|
uint8_t pixclk;
|
||||||
uint16_t vsync_nondisp, vsync_start;
|
uint8_t hsync_start;
|
||||||
if (_size == RA8875_480x272) {
|
uint8_t hsync_pw;
|
||||||
|
uint8_t hsync_finetune;
|
||||||
|
uint8_t hsync_nondisp;
|
||||||
|
uint8_t vsync_pw;
|
||||||
|
uint16_t vsync_nondisp;
|
||||||
|
uint16_t vsync_start;
|
||||||
|
|
||||||
|
/* Set the correct values for the display being used */
|
||||||
|
if (_size == RA8875_480x272)
|
||||||
|
{
|
||||||
pixclk = RA8875_PCSR_PDATL | RA8875_PCSR_8CLK;
|
pixclk = RA8875_PCSR_PDATL | RA8875_PCSR_8CLK;
|
||||||
hsync_nondisp = 10;
|
hsync_nondisp = 10;
|
||||||
hsync_start = 8;
|
hsync_start = 8;
|
||||||
|
|
@ -87,13 +94,14 @@ void Adafruit_RA8875::initialize(void) {
|
||||||
vsync_nondisp = 3;
|
vsync_nondisp = 3;
|
||||||
vsync_start = 8;
|
vsync_start = 8;
|
||||||
vsync_pw = 10;
|
vsync_pw = 10;
|
||||||
} else if (_size == RA8875_800x480) {
|
}
|
||||||
|
else if (_size == RA8875_800x480)
|
||||||
|
{
|
||||||
pixclk = RA8875_PCSR_PDATL | RA8875_PCSR_2CLK;
|
pixclk = RA8875_PCSR_PDATL | RA8875_PCSR_2CLK;
|
||||||
hsync_nondisp = 26;
|
hsync_nondisp = 26;
|
||||||
hsync_start = 32;
|
hsync_start = 32;
|
||||||
hsync_pw = 96;
|
hsync_pw = 96;
|
||||||
hsync_finetune = 0;
|
hsync_finetune = 0;
|
||||||
|
|
||||||
vsync_nondisp = 32;
|
vsync_nondisp = 32;
|
||||||
vsync_start = 23;
|
vsync_start = 23;
|
||||||
vsync_pw = 2;
|
vsync_pw = 2;
|
||||||
|
|
@ -101,13 +109,15 @@ void Adafruit_RA8875::initialize(void) {
|
||||||
|
|
||||||
writeReg(RA8875_PCSR, pixclk);
|
writeReg(RA8875_PCSR, pixclk);
|
||||||
delay(1);
|
delay(1);
|
||||||
// Horizontal settings registers
|
|
||||||
|
/* Horizontal settings registers */
|
||||||
writeReg(RA8875_HDWR, (_width / 8) - 1); // H width: (HDWR + 1) * 8 = 480
|
writeReg(RA8875_HDWR, (_width / 8) - 1); // H width: (HDWR + 1) * 8 = 480
|
||||||
writeReg(RA8875_HNDFTR, RA8875_HNDFTR_DE_HIGH + hsync_finetune);
|
writeReg(RA8875_HNDFTR, RA8875_HNDFTR_DE_HIGH + hsync_finetune);
|
||||||
writeReg(RA8875_HNDR, (hsync_nondisp - hsync_finetune - 2)/8); // H non-display: HNDR * 8 + HNDFTR + 2 = 10
|
writeReg(RA8875_HNDR, (hsync_nondisp - hsync_finetune - 2)/8); // H non-display: HNDR * 8 + HNDFTR + 2 = 10
|
||||||
writeReg(RA8875_HSTR, hsync_start/8 - 1); // Hsync start: (HSTR + 1)*8
|
writeReg(RA8875_HSTR, hsync_start/8 - 1); // Hsync start: (HSTR + 1)*8
|
||||||
writeReg(RA8875_HPWR, RA8875_HPWR_LOW + (hsync_pw/8 - 1)); // HSync pulse width = (HPWR+1) * 8
|
writeReg(RA8875_HPWR, RA8875_HPWR_LOW + (hsync_pw/8 - 1)); // HSync pulse width = (HPWR+1) * 8
|
||||||
// Vertical settings registers
|
|
||||||
|
/* Vertical settings registers */
|
||||||
writeReg(RA8875_VDHR0, (uint16_t)(_height - 1) & 0xFF);
|
writeReg(RA8875_VDHR0, (uint16_t)(_height - 1) & 0xFF);
|
||||||
writeReg(RA8875_VDHR1, (uint16_t)(_height - 1) >> 8);
|
writeReg(RA8875_VDHR1, (uint16_t)(_height - 1) >> 8);
|
||||||
writeReg(RA8875_VNDR0, vsync_nondisp-1); // V non-display period = VNDR + 1
|
writeReg(RA8875_VNDR0, vsync_nondisp-1); // V non-display period = VNDR + 1
|
||||||
|
|
@ -116,21 +126,21 @@ void Adafruit_RA8875::initialize(void) {
|
||||||
writeReg(RA8875_VSTR1, vsync_start >> 8);
|
writeReg(RA8875_VSTR1, vsync_start >> 8);
|
||||||
writeReg(RA8875_VPWR, RA8875_VPWR_LOW + vsync_pw - 1); // Vsync pulse width = VPWR + 1
|
writeReg(RA8875_VPWR, RA8875_VPWR_LOW + vsync_pw - 1); // Vsync pulse width = VPWR + 1
|
||||||
|
|
||||||
// Set active window X
|
/* Set active window X */
|
||||||
writeReg(RA8875_HSAW0, 0); // horizontal start point
|
writeReg(RA8875_HSAW0, 0); // horizontal start point
|
||||||
writeReg(RA8875_HSAW1, 0);
|
writeReg(RA8875_HSAW1, 0);
|
||||||
writeReg(RA8875_HEAW0, (uint16_t)(_width - 1) & 0xFF); // horizontal end point
|
writeReg(RA8875_HEAW0, (uint16_t)(_width - 1) & 0xFF); // horizontal end point
|
||||||
writeReg(RA8875_HEAW1, (uint16_t)(_width - 1) >> 8);
|
writeReg(RA8875_HEAW1, (uint16_t)(_width - 1) >> 8);
|
||||||
|
|
||||||
// Set active window Y
|
/* Set active window Y */
|
||||||
writeReg(RA8875_VSAW0, 0); // vertical start point
|
writeReg(RA8875_VSAW0, 0); // vertical start point
|
||||||
writeReg(RA8875_VSAW1, 0);
|
writeReg(RA8875_VSAW1, 0);
|
||||||
writeReg(RA8875_VEAW0, (uint16_t)(_height - 1) & 0xFF); // horizontal end point
|
writeReg(RA8875_VEAW0, (uint16_t)(_height - 1) & 0xFF); // horizontal end point
|
||||||
writeReg(RA8875_VEAW1, (uint16_t)(_height - 1) >> 8);
|
writeReg(RA8875_VEAW1, (uint16_t)(_height - 1) >> 8);
|
||||||
|
|
||||||
// touch panel?
|
/* ToDo: Setup touch panel? */
|
||||||
|
|
||||||
// clear full window
|
/* Clear the entire window */
|
||||||
writeReg(RA8875_MCLR, RA8875_MCLR_START | RA8875_MCLR_FULL);
|
writeReg(RA8875_MCLR, RA8875_MCLR_START | RA8875_MCLR_FULL);
|
||||||
delay(500);
|
delay(500);
|
||||||
}
|
}
|
||||||
|
|
@ -138,8 +148,6 @@ void Adafruit_RA8875::initialize(void) {
|
||||||
uint16_t Adafruit_RA8875::width(void) { return _width; }
|
uint16_t Adafruit_RA8875::width(void) { return _width; }
|
||||||
uint16_t Adafruit_RA8875::height(void) { return _height; }
|
uint16_t Adafruit_RA8875::height(void) { return _height; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/************************* Graphics ***********************************/
|
/************************* Graphics ***********************************/
|
||||||
|
|
||||||
void Adafruit_RA8875::pushPixels(uint32_t num, uint16_t p) {
|
void Adafruit_RA8875::pushPixels(uint32_t num, uint16_t p) {
|
||||||
|
|
@ -205,42 +213,45 @@ void Adafruit_RA8875::PWM2config(boolean on, uint8_t clock) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adafruit_RA8875::touchEnable(boolean on) {
|
void Adafruit_RA8875::touchEnable(boolean on)
|
||||||
if (on) {
|
{
|
||||||
writeReg(RA8875_TPCR0, RA8875_TPCR0_ENABLE | RA8875_TPCR0_WAIT_4096CLK |
|
if (on)
|
||||||
RA8875_TPCR0_WAKEDISABLE | RA8875_TPCR0_ADCCLK_DIV4); // 10mhz max!
|
{
|
||||||
writeReg(RA8875_TPCR1, RA8875_TPCR1_AUTO | RA8875_TPCR1_VREFEXT
|
/* Enable Touch Panel (Reg 0x70) */
|
||||||
| RA8875_TPCR1_DEBOUNCE);
|
writeReg(RA8875_TPCR0, RA8875_TPCR0_ENABLE |
|
||||||
|
RA8875_TPCR0_WAIT_4096CLK |
|
||||||
|
RA8875_TPCR0_WAKEDISABLE |
|
||||||
|
RA8875_TPCR0_ADCCLK_DIV4); // 10mhz max!
|
||||||
|
/* Set Auto Mode (Reg 0x71) */
|
||||||
|
writeReg(RA8875_TPCR1, RA8875_TPCR1_AUTO |
|
||||||
|
RA8875_TPCR1_VREFEXT |
|
||||||
|
RA8875_TPCR1_DEBOUNCE);
|
||||||
|
/* Enable TP INT */
|
||||||
writeReg(RA8875_INTC1, readReg(RA8875_INTC1) | RA8875_INTC1_TP);
|
writeReg(RA8875_INTC1, readReg(RA8875_INTC1) | RA8875_INTC1_TP);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Disable TP INT */
|
||||||
writeReg(RA8875_INTC1, readReg(RA8875_INTC1) & ~RA8875_INTC1_TP);
|
writeReg(RA8875_INTC1, readReg(RA8875_INTC1) & ~RA8875_INTC1_TP);
|
||||||
|
/* Disable Touch Panel (Reg 0x70) */
|
||||||
writeReg(RA8875_TPCR0, RA8875_TPCR0_DISABLE);
|
writeReg(RA8875_TPCR0, RA8875_TPCR0_DISABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean Adafruit_RA8875::touched(void) {
|
boolean Adafruit_RA8875::touched(void)
|
||||||
|
{
|
||||||
if (readReg(RA8875_INTC2) & RA8875_INTC2_TP) return true;
|
if (readReg(RA8875_INTC2) & RA8875_INTC2_TP) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean Adafruit_RA8875::touchRead(uint16_t *x, uint16_t *y) {
|
boolean Adafruit_RA8875::touchRead(uint16_t *x, uint16_t *y)
|
||||||
|
{
|
||||||
uint16_t tx, ty;
|
uint16_t tx, ty;
|
||||||
uint8_t temp;
|
uint8_t temp;
|
||||||
|
|
||||||
writeCommand(RA8875_TPXH);
|
|
||||||
tx = readData();
|
|
||||||
ty = readData();
|
|
||||||
temp = readData();
|
|
||||||
Serial.print("[0x");
|
|
||||||
Serial.print(tx, HEX); Serial.print(", ");
|
|
||||||
Serial.print(ty, HEX); Serial.print(", ");
|
|
||||||
Serial.print(temp, HEX); Serial.println("]");
|
|
||||||
|
|
||||||
/*
|
|
||||||
tx = readReg(RA8875_TPXH);
|
tx = readReg(RA8875_TPXH);
|
||||||
ty = readReg(RA8875_TPYH);
|
ty = readReg(RA8875_TPYH);
|
||||||
temp = readReg(RA8875_TPXYL);
|
temp = readReg(RA8875_TPXYL);
|
||||||
*/
|
|
||||||
tx <<= 2;
|
tx <<= 2;
|
||||||
ty <<= 2;
|
ty <<= 2;
|
||||||
tx |= temp & 0x03; // get the bottom x bits
|
tx |= temp & 0x03; // get the bottom x bits
|
||||||
|
|
@ -249,19 +260,22 @@ boolean Adafruit_RA8875::touchRead(uint16_t *x, uint16_t *y) {
|
||||||
*x = tx;
|
*x = tx;
|
||||||
*y = ty;
|
*y = ty;
|
||||||
|
|
||||||
|
/* Clear TP INT Status */
|
||||||
writeReg(RA8875_INTC2, RA8875_INTC2_TP);
|
writeReg(RA8875_INTC2, RA8875_INTC2_TP);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adafruit_RA8875::displayOn(boolean on) {
|
void Adafruit_RA8875::displayOn(boolean on)
|
||||||
|
{
|
||||||
if (on)
|
if (on)
|
||||||
writeReg(RA8875_PWRR, RA8875_PWRR_NORMAL | RA8875_PWRR_DISPON);
|
writeReg(RA8875_PWRR, RA8875_PWRR_NORMAL | RA8875_PWRR_DISPON);
|
||||||
else
|
else
|
||||||
writeReg(RA8875_PWRR, RA8875_PWRR_NORMAL | RA8875_PWRR_DISPOFF);
|
writeReg(RA8875_PWRR, RA8875_PWRR_NORMAL | RA8875_PWRR_DISPOFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adafruit_RA8875::sleep(boolean sleep) {
|
void Adafruit_RA8875::sleep(boolean sleep)
|
||||||
|
{
|
||||||
if (sleep)
|
if (sleep)
|
||||||
writeReg(RA8875_PWRR, RA8875_PWRR_DISPOFF | RA8875_PWRR_SLEEP);
|
writeReg(RA8875_PWRR, RA8875_PWRR_DISPOFF | RA8875_PWRR_SLEEP);
|
||||||
else
|
else
|
||||||
|
|
@ -270,26 +284,28 @@ void Adafruit_RA8875::sleep(boolean sleep) {
|
||||||
|
|
||||||
/************************* Low Level ***********************************/
|
/************************* Low Level ***********************************/
|
||||||
|
|
||||||
void Adafruit_RA8875::writeReg(uint8_t reg, uint8_t val) {
|
void Adafruit_RA8875::writeReg(uint8_t reg, uint8_t val)
|
||||||
|
{
|
||||||
writeCommand(reg);
|
writeCommand(reg);
|
||||||
writeData(val);
|
writeData(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Adafruit_RA8875::readReg(uint8_t reg) {
|
uint8_t Adafruit_RA8875::readReg(uint8_t reg)
|
||||||
|
{
|
||||||
writeCommand(reg);
|
writeCommand(reg);
|
||||||
return readData();
|
return readData();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adafruit_RA8875::writeData(uint8_t d) {
|
void Adafruit_RA8875::writeData(uint8_t d)
|
||||||
|
{
|
||||||
digitalWrite(_cs, LOW);
|
digitalWrite(_cs, LOW);
|
||||||
SPI.transfer(RA8875_DATAWRITE);
|
SPI.transfer(RA8875_DATAWRITE);
|
||||||
SPI.transfer(d);
|
SPI.transfer(d);
|
||||||
digitalWrite(_cs, HIGH);
|
digitalWrite(_cs, HIGH);
|
||||||
|
|
||||||
Serial.print(" = 0x"); Serial.println(d, HEX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Adafruit_RA8875::readData(void) {
|
uint8_t Adafruit_RA8875::readData(void)
|
||||||
|
{
|
||||||
digitalWrite(_cs, LOW);
|
digitalWrite(_cs, LOW);
|
||||||
SPI.transfer(RA8875_DATAREAD);
|
SPI.transfer(RA8875_DATAREAD);
|
||||||
uint8_t x = SPI.transfer(0x0);
|
uint8_t x = SPI.transfer(0x0);
|
||||||
|
|
@ -297,15 +313,16 @@ uint8_t Adafruit_RA8875::readData(void) {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adafruit_RA8875::writeCommand(uint8_t d) {
|
void Adafruit_RA8875::writeCommand(uint8_t d)
|
||||||
//Serial.print("$"); Serial.print(d, HEX);
|
{
|
||||||
digitalWrite(_cs, LOW);
|
digitalWrite(_cs, LOW);
|
||||||
SPI.transfer(RA8875_CMDWRITE);
|
SPI.transfer(RA8875_CMDWRITE);
|
||||||
SPI.transfer(d);
|
SPI.transfer(d);
|
||||||
digitalWrite(_cs, HIGH);
|
digitalWrite(_cs, HIGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Adafruit_RA8875::readStatus(void) {
|
uint8_t Adafruit_RA8875::readStatus(void)
|
||||||
|
{
|
||||||
digitalWrite(_cs, LOW);
|
digitalWrite(_cs, LOW);
|
||||||
SPI.transfer(RA8875_CMDREAD);
|
SPI.transfer(RA8875_CMDREAD);
|
||||||
uint8_t x = SPI.transfer(0x0);
|
uint8_t x = SPI.transfer(0x0);
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,10 @@
|
||||||
// Sizes!
|
// Sizes!
|
||||||
enum RA8875sizes { RA8875_480x272, RA8875_800x480 };
|
enum RA8875sizes { RA8875_480x272, RA8875_800x480 };
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Adafruit_RA8875 {
|
class Adafruit_RA8875 {
|
||||||
public:
|
public:
|
||||||
Adafruit_RA8875(uint8_t cs, uint8_t rst);
|
Adafruit_RA8875(uint8_t cs, uint8_t rst);
|
||||||
|
|
||||||
boolean begin(enum RA8875sizes s);
|
boolean begin(enum RA8875sizes s);
|
||||||
void softReset(void);
|
void softReset(void);
|
||||||
void displayOn(boolean on);
|
void displayOn(boolean on);
|
||||||
|
|
@ -18,16 +17,19 @@ class Adafruit_RA8875 {
|
||||||
void setXY(uint16_t x, uint16_t y);
|
void setXY(uint16_t x, uint16_t y);
|
||||||
void fillRect(void);
|
void fillRect(void);
|
||||||
|
|
||||||
|
/* Backlight */
|
||||||
void GPIOX(boolean on);
|
void GPIOX(boolean on);
|
||||||
void PWM1config(boolean on, uint8_t clock);
|
void PWM1config(boolean on, uint8_t clock);
|
||||||
void PWM2config(boolean on, uint8_t clock);
|
void PWM2config(boolean on, uint8_t clock);
|
||||||
void PWM1out(uint8_t p);
|
void PWM1out(uint8_t p);
|
||||||
void PWM2out(uint8_t p);
|
void PWM2out(uint8_t p);
|
||||||
|
|
||||||
|
/* Touch screen */
|
||||||
void touchEnable(boolean on);
|
void touchEnable(boolean on);
|
||||||
boolean touched(void);
|
boolean touched(void);
|
||||||
boolean touchRead(uint16_t *x, uint16_t *y);
|
boolean touchRead(uint16_t *x, uint16_t *y);
|
||||||
|
|
||||||
|
/* Low level access */
|
||||||
void writeReg(uint8_t reg, uint8_t val);
|
void writeReg(uint8_t reg, uint8_t val);
|
||||||
uint8_t readReg(uint8_t reg);
|
uint8_t readReg(uint8_t reg);
|
||||||
void writeData(uint8_t d);
|
void writeData(uint8_t d);
|
||||||
|
|
@ -47,8 +49,7 @@ class Adafruit_RA8875 {
|
||||||
enum RA8875sizes _size;
|
enum RA8875sizes _size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Colors (RGB565)
|
||||||
// Colors!
|
|
||||||
#define RA8875_BLACK 0x0000
|
#define RA8875_BLACK 0x0000
|
||||||
#define RA8875_BLUE 0x001F
|
#define RA8875_BLUE 0x001F
|
||||||
#define RA8875_RED 0xF800
|
#define RA8875_RED 0xF800
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue