void MI0283QT2::begin(uint_least8_t clock_div) { //init pins #if defined(RST_PIN) pinMode(RST_PIN, OUTPUT); RST_ENABLE(); #endif pinMode(LED_PIN, OUTPUT); pinMode(CS_PIN, OUTPUT); pinMode(CLK_PIN, OUTPUT); pinMode(MOSI_PIN, OUTPUT); pinMode(MISO_PIN, INPUT); LED_DISABLE(); CS_DISABLE(); #if defined(ADS7846) pinMode(ADSCS_PIN, OUTPUT); ADSCS_DISABLE(); #endif #if !defined(SOFTWARE_SPI) SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(clock_div); SPI.begin(); #endif //reset display reset(clock_div); //enable backlight led(50); return; }
void MI0283QT9::begin(uint_least8_t clock_div) { //init pins #if defined(RST_PIN) pinMode(RST_PIN, OUTPUT); RST_ENABLE(); #endif pinMode(LED_PIN, OUTPUT); pinMode(CS_PIN, OUTPUT); #if defined(LCD_8BIT_SPI) pinMode(RS_PIN, OUTPUT); RS_HIGH(); #endif pinMode(SCK_PIN, OUTPUT); pinMode(MOSI_PIN, OUTPUT); pinMode(MISO_PIN, INPUT); LED_DISABLE(); CS_DISABLE(); #if defined(ADS7846) pinMode(ADSCS_PIN, OUTPUT); ADSCS_DISABLE(); #endif #if !defined(SOFTWARE_SPI) lcd_clock_div = clock_div; SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); //SPI.setClockDivider(clock_div); SPI.begin(); #endif //SPI speed-down #if !defined(SOFTWARE_SPI) # if F_CPU >= 128000000UL SPI.setClockDivider(SPI_CLOCK_DIV64); # elif F_CPU >= 64000000UL SPI.setClockDivider(SPI_CLOCK_DIV32); # elif F_CPU >= 32000000UL SPI.setClockDivider(SPI_CLOCK_DIV16); # elif F_CPU >= 16000000UL SPI.setClockDivider(SPI_CLOCK_DIV8); # else //elif F_CPU >= 8000000UL SPI.setClockDivider(SPI_CLOCK_DIV4); # endif #endif //reset display reset(); //SPI speed-up #if !defined(SOFTWARE_SPI) SPI.setClockDivider(clock_div); #endif //enable backlight led(50); return; }
uint_least8_t MI0283QT9::touchRead(void) { #if defined(ADS7846) uint_least8_t p, a1, a2, b1, b2; uint_least16_t x, y; //SPI speed-down #if !defined(SOFTWARE_SPI) && defined(__AVR__) uint_least8_t spcr, spsr; spcr = SPCR; spsr = SPSR; # if F_CPU >= 16000000UL SPI.setClockDivider(SPI_CLOCK_DIV8); # elif F_CPU >= 8000000UL SPI.setClockDivider(SPI_CLOCK_DIV4); # else //elif F_CPU >= 4000000UL SPI.setClockDivider(SPI_CLOCK_DIV2); # endif #endif //get pressure ADSCS_ENABLE(); wr_spi(ADS_CMD_START | ADS_CMD_8BIT | ADS_CMD_DIFF | ADS_CMD_Z1_POS); a1 = rd_spi()&0x7F; wr_spi(ADS_CMD_START | ADS_CMD_8BIT | ADS_CMD_DIFF | ADS_CMD_Z2_POS); b1 = (255-rd_spi())&0x7F; ADSCS_DISABLE(); p = a1 + b1; if(p > MIN_PRESSURE) { /*//using 4 samples for x and y position for(x=0, y=0, i=4; i!=0; i--) { ADSCS_ENABLE(); //get X data wr_spi(ADS_CMD_START | ADS_CMD_12BIT | ADS_CMD_DIFF | ADS_CMD_X_POS); a = rd_spi(); b = rd_spi(); x += 1023-((a<<2)|(b>>6)); //12bit: ((a<<4)|(b>>4)) //10bit: ((a<<2)|(b>>6)) //get Y data wr_spi(ADS_CMD_START | ADS_CMD_12BIT | ADS_CMD_DIFF | ADS_CMD_Y_POS); a = rd_spi(); b = rd_spi(); y += ((a<<2)|(b>>6)); //12bit: ((a<<4)|(b>>4)) //10bit: ((a<<2)|(b>>6)) ADSCS_DISABLE(); } x >>= 2; //x/4 y >>= 2; //y/4*/ //using 2 samples for x and y position ADSCS_ENABLE(); //get X data wr_spi(ADS_CMD_START | ADS_CMD_12BIT | ADS_CMD_DIFF | ADS_CMD_X_POS); a1 = rd_spi(); b1 = rd_spi(); wr_spi(ADS_CMD_START | ADS_CMD_12BIT | ADS_CMD_DIFF | ADS_CMD_X_POS); a2 = rd_spi(); b2 = rd_spi(); if(a1 == a2) { x = 1023-((a2<<2)|(b2>>6)); //12bit: ((a<<4)|(b>>4)) //10bit: ((a<<2)|(b>>6)) //get Y data wr_spi(ADS_CMD_START | ADS_CMD_12BIT | ADS_CMD_DIFF | ADS_CMD_Y_POS); a1 = rd_spi(); b1 = rd_spi(); wr_spi(ADS_CMD_START | ADS_CMD_12BIT | ADS_CMD_DIFF | ADS_CMD_Y_POS); a2 = rd_spi(); b2 = rd_spi(); if(a1 == a2) { y = ((a2<<2)|(b2>>6)); //12bit: ((a<<4)|(b>>4)) //10bit: ((a<<2)|(b>>6)) if(x && y) { tp_x = x; tp_y = y; } lcd_z = p; }