void PICadillo35t::setRotation(uint8_t m) { writeCommand(HX8357_SET_ADDRESS_MODE); rotation = m % 4; // can't be higher than 3 switch (rotation) { case 0: //PORTRAIT writeData(0x0000); _width = PICadillo35t::Width; _height = PICadillo35t::Height; break; case 1: //LANDSCAPE writeData(0x0060); _width = PICadillo35t::Height; _height = PICadillo35t::Width; break; case 2: //UPSIDE DOWN PORTRAIT writeData(0x00C0); _width = PICadillo35t::Width; _height = PICadillo35t::Height; break; case 3: //UPSIDE DOWN LANDSCAPE writeData(0x00A0); _width = PICadillo35t::Height; _height = PICadillo35t::Width; break; } _cacheState = cacheInvalid; clearClipping(); }
//============================================================== // Initialise HX8357 LCD Driver IC //============================================================== void PICadillo35t::initializeDevice() { PMCONbits.ON = 0; asm volatile("nop"); PMCONbits.PTWREN = 1; PMCONbits.PTRDEN = 1; PMCONbits.CSF = 0; PMAEN = 0x0001; // Enable PMA0 pin for RS pin and CS1 as CS PMMODEbits.MODE16 = 1; PMMODEbits.MODE = 0b10; PMMODEbits.WAITB = 0; PMMODEbits.WAITM = 0; PMMODEbits.WAITE = 0; //PMADDR = 0; // Set current address to 0 PMADDR = 0x0000; // Set current address to 0, CS1 Active PMCONbits.ON = 1; _width = PICadillo35t::Width; _height = PICadillo35t::Height; colstart = 0; //NEED TO CONFIRM rowstart = 0; //NEED TO CONFIRM writeCommand(HX8357_EXIT_SLEEP_MODE); //Sleep Out delay(150); writeCommand(HX8357_ENABLE_EXTENSION_COMMAND); writeData(0xFF); writeData(0x83); writeData(0x57); delay(1); writeCommand(HX8357_SET_POWER_CONTROL); writeData(0x00); writeData(0x12); writeData(0x12); writeData(0x12); writeData(0xC3); writeData(0x44); delay(1); writeCommand(HX8357_SET_DISPLAY_MODE); writeData(0x02); writeData(0x40); writeData(0x00); writeData(0x2A); writeData(0x2A); writeData(0x20); writeData(0x91); delay(1); writeCommand(HX8357_SET_VCOM_VOLTAGE); writeData(0x38); delay(1); writeCommand(HX8357_SET_INTERNAL_OSCILLATOR); writeData(0x68); writeCommand(0xE3); //Unknown Command writeData(0x2F); writeData(0x1F); writeCommand(0xB5); //Set BGP writeData(0x01); writeData(0x01); writeData(0x67); writeCommand(HX8357_SET_PANEL_DRIVING); writeData(0x70); writeData(0x70); writeData(0x01); writeData(0x3C); writeData(0xC8); writeData(0x08); delay(1); writeCommand(0xC2); // Set Gate EQ writeData(0x00); writeData(0x08); writeData(0x04); delay(1); writeCommand(HX8357_SET_PANEL_CHARACTERISTIC); writeData(0x09); delay(1); writeCommand(HX8357_SET_GAMMA_CURVE); writeData(0x01); writeData(0x02); writeData(0x03); writeData(0x05); writeData(0x0E); writeData(0x22); writeData(0x32); writeData(0x3B); writeData(0x5C); writeData(0x54); writeData(0x4C); writeData(0x41); writeData(0x3D); writeData(0x37); writeData(0x31); writeData(0x21); writeData(0x01); writeData(0x02); writeData(0x03); writeData(0x05); writeData(0x0E); writeData(0x22); writeData(0x32); writeData(0x3B); writeData(0x5C); writeData(0x54); writeData(0x4C); writeData(0x41); writeData(0x3D); writeData(0x37); writeData(0x31); writeData(0x21); writeData(0x00); writeData(0x01); delay(1); writeCommand(HX8357_SET_PIXEL_FORMAT); //COLMOD RGB888 writeData(0x55); writeCommand(HX8357_SET_ADDRESS_MODE); writeData(0x00); writeCommand(HX8357_SET_TEAR_ON); //TE ON writeData(0x00); delay(10); writeCommand(HX8357_SET_DISPLAY_ON); //Display On delay(10); writeCommand(HX8357_WRITE_MEMORY_START); //Write SRAM Data _cacheState = cacheInvalid; clearClipping(); }
void HX8347D::initializeDevice() { _dc_port = getPortInformation(_dc, &_dc_mask); _cs_port = getPortInformation(_cs, &_cs_mask); _spi->begin(); _spi->setSpeed(20000000UL); pinMode(_dc, OUTPUT); pinMode(_cs, OUTPUT); digitalWrite(_dc, HIGH); digitalWrite(_cs, HIGH); _width = HX8347D::Width; _height = HX8347D::Height; //Driving ability Setting setRegister(0xEA,0x00); //PTBA[15:8] setRegister(0xEB,0x20); //PTBA[7:0] setRegister(0xEC,0x0C); //STBA[15:8] setRegister(0xED,0xC4); //STBA[7:0] setRegister(0xE8,0x38); //OPON[7:0] setRegister(0xE9,0x10); //OPON1[7:0] setRegister(0xF1,0x01); //OTPS1B setRegister(0xF2,0x10); //GEN //Gamma 2.2 Setting setRegister(0x40,0x01); // setRegister(0x41,0x00); // setRegister(0x42,0x00); // setRegister(0x43,0x10); // setRegister(0x44,0x0E); // setRegister(0x45,0x24); // setRegister(0x46,0x04); // setRegister(0x47,0x50); // setRegister(0x48,0x02); // setRegister(0x49,0x13); // setRegister(0x4A,0x19); // setRegister(0x4B,0x19); // setRegister(0x4C,0x16); // setRegister(0x50,0x1B); // setRegister(0x51,0x31); // setRegister(0x52,0x2F); // setRegister(0x53,0x3F); // setRegister(0x54,0x3F); // setRegister(0x55,0x3E); // setRegister(0x56,0x2F); // setRegister(0x57,0x7B); // setRegister(0x58,0x09); // setRegister(0x59,0x06); // setRegister(0x5A,0x06); // setRegister(0x5B,0x0C); // setRegister(0x5C,0x1D); // setRegister(0x5D,0xCC); // //Power Voltage Setting setRegister(0x1B,0x1B); //VRH=4.65V setRegister(0x1A,0x01); //BT (VGH~15V,VGL~-10V,DDVDH~5V) setRegister(0x24,0x2F); //VMH(VCOM High voltage ~3.2V) setRegister(0x25,0x57); //VML(VCOM Low voltage -1.2V) //****VCOM offset**/// setRegister(0x23,0x88); //for Flicker adjust //can reload from OTP //Power on Setting setRegister(0x18,0x34); //I/P_RADJ,N/P_RADJ, Normal mode 60Hz setRegister(0x19,0x01); //OSC_EN='1', start Osc setRegister(0x01,0x00); //DP_STB='0', out deep sleep setRegister(0x1F,0x88);// GAS=1, VOMG=00, PON=0, DK=1, XDK=0, DVDH_TRI=0, STB=0 delay(5); setRegister(0x1F,0x80);// GAS=1, VOMG=00, PON=0, DK=0, XDK=0, DVDH_TRI=0, STB=0 delay(5); setRegister(0x1F,0x90);// GAS=1, VOMG=00, PON=1, DK=0, XDK=0, DVDH_TRI=0, STB=0 delay(5); setRegister(0x1F,0xD0);// GAS=1, VOMG=10, PON=1, DK=0, XDK=0, DDVDH_TRI=0, STB=0 delay(5); //262k/65k color selection setRegister(0x17,0x05); //default 0x06 262k color // 0x05 65k color //SET PANEL setRegister(0x36,0x00); //SS_P, GS_P,REV_P,BGR_P //Display ON Setting setRegister(0x28,0x38); //GON=1, DTE=1, D=1000 delay(40); setRegister(0x28,0x3F); //GON=1, DTE=1, D=1100 setRegister(0x16,0x18); //Set GRAM Area setRegister(0x02,0x00); setRegister(0x03,0x00); //Column Start setRegister(0x04,0x00); setRegister(0x05,0xEF); //Column End setRegister(0x06,0x00); setRegister(0x07,0x00); //Row Start setRegister(0x08,0x01); setRegister(0x09,0x3F); //Row End clearClipping(); }