worked on SPI, fixed some bugs
adjusted LCD code added code for INA3221 worked on UI
This commit is contained in:
120
ext/lcd/ST7735.h
120
ext/lcd/ST7735.h
@@ -84,80 +84,88 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
#define V 128
|
||||
#define H 160
|
||||
static constexpr const int V = 128;
|
||||
static constexpr const int H = 160;
|
||||
|
||||
void waitLong() {
|
||||
for (int i = 0; i < 50; ++i) {
|
||||
//os_delay_us(10*1000);
|
||||
vTaskDelay(10 / portTICK_PERIOD_MS);
|
||||
}
|
||||
inline void waitLong() {
|
||||
//vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||
for (int i = 0; i < 0x1FFFFF; ++i) {asm("nop");} // vTaskDelay seems not to block? maybe when display is allocated outside of a function?
|
||||
}
|
||||
|
||||
void waitShort() {
|
||||
//os_delay_us(10*1000);
|
||||
vTaskDelay(10 / portTICK_PERIOD_MS);
|
||||
inline void waitShort() {
|
||||
//vTaskDelay(20 / portTICK_PERIOD_MS);
|
||||
for (int i = 0; i < 0xFFFF; ++i) {asm("nop");}
|
||||
}
|
||||
|
||||
void init() {
|
||||
|
||||
//spi::init();
|
||||
debugMod(NAME, "init()");
|
||||
|
||||
select();
|
||||
sendCommand(ST7735_SWRESET); // 1: Software reset, 0 args
|
||||
deselect();
|
||||
waitLong();
|
||||
|
||||
select();
|
||||
sendCommand(ST7735_SLPOUT); // 2: Out of sleep mode, 0 args
|
||||
deselect();
|
||||
waitLong();
|
||||
|
||||
select();
|
||||
|
||||
sendCommand(ST7735_SWRESET); // 1: Software reset, 0 args
|
||||
waitLong();
|
||||
|
||||
sendCommand(ST7735_SLPOUT); // 2: Out of sleep mode, 0 args
|
||||
waitLong();
|
||||
|
||||
|
||||
sendCommand(ST7735_FRMCTR1); // 3: Frame rate ctrl - normal mode) 3 args: 0xb1
|
||||
sendData(0x01); sendData(0x2C); sendData(0x2D); // Rate = fosc/(1x2+40) * (LINE+2C+2D)
|
||||
|
||||
waitShort();
|
||||
|
||||
sendCommand(ST7735_FRMCTR2); // 4: Frame rate control - idle mode) 3 args: 0xb2
|
||||
sendData(0x01); sendData(0x2C); sendData(0x2D); // Rate = fosc/(1x2+40) * (LINE+2C+2D)
|
||||
|
||||
waitShort();
|
||||
|
||||
sendCommand(ST7735_FRMCTR3); // 5: Frame rate ctrl - partial mode) 6 args: 0xb3
|
||||
sendData(0x01); sendData(0x2C); sendData(0x2D); // Dot inversion mode
|
||||
sendData(0x01); sendData(0x2C); sendData(0x2D); // Line inversion mode
|
||||
|
||||
waitShort();
|
||||
|
||||
sendCommand(ST7735_INVCTR); // 6: Display inversion ctrl) 1 arg) no delay: 0xb4
|
||||
sendData(0x07); // No inversion
|
||||
|
||||
|
||||
sendCommand(ST7735_PWCTR1); // 7: Power control) 3 args) no delay: 0xc0
|
||||
sendData(0xA2);
|
||||
sendData(0x02); // -4.6V
|
||||
sendData(0x84); // AUTO mode
|
||||
|
||||
|
||||
sendCommand(ST7735_PWCTR2); // 8: Power control) 1 arg) no delay: 0xc1
|
||||
sendData(0xC5); // VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
|
||||
|
||||
|
||||
sendCommand(ST7735_PWCTR3); // 9: Power control) 2 args) no delay: 0xc2
|
||||
sendData(0x0A); // Opamp current small
|
||||
sendData(0x00); // Boost frequency
|
||||
|
||||
|
||||
sendCommand(ST7735_PWCTR4); // 10: Power control) 2 args) no delay:
|
||||
sendData(0x8A); // BCLK/2) Opamp current small & Medium low
|
||||
sendData(0x2A);
|
||||
|
||||
|
||||
sendCommand(ST7735_PWCTR5); // 11: Power control) 2 args) no delay:
|
||||
sendData(0x8A); sendData(0xEE);
|
||||
|
||||
|
||||
sendCommand(ST7735_VMCTR1); // 12: Power control) 1 arg) no delay:
|
||||
sendData(0x0E);
|
||||
|
||||
|
||||
sendCommand(ST7735_INVOFF); // 13: Don't invert display) no args) no delay 0x20
|
||||
|
||||
|
||||
sendCommand(ST7735_MADCTL); // 14: Memory access control (directions)) 1 arg:
|
||||
sendData(0xC8); // row addr/col addr); bottom to top refresh
|
||||
|
||||
waitShort();
|
||||
|
||||
sendCommand(ST7735_COLMOD); // 15: set color mode); 1 arg); no delay:
|
||||
sendData(0x05); // 16-bit color
|
||||
|
||||
deselect();
|
||||
|
||||
// required??? adjusts colors or something???
|
||||
if (1 == 1) {
|
||||
|
||||
// required???
|
||||
if (1 == 1) {
|
||||
|
||||
select();
|
||||
sendCommand(ST7735_GMCTRP1); // 1: Magical unicorn dust, 16 args, no delay:
|
||||
sendData(0x02); sendData(0x1c); sendData(0x07); sendData(0x12);
|
||||
sendData(0x37); sendData(0x32); sendData(0x29); sendData(0x2d);
|
||||
@@ -169,17 +177,20 @@ private:
|
||||
sendData(0x2E); sendData(0x2C); sendData(0x29); sendData(0x2D);
|
||||
sendData(0x2E); sendData(0x2E); sendData(0x37); sendData(0x3F);
|
||||
sendData(0x00); sendData(0x00); sendData(0x02); sendData(0x10);
|
||||
deselect();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
select();
|
||||
sendCommand(ST7735_NORON); // 3: Normal display on, no args
|
||||
waitShort();
|
||||
|
||||
sendCommand(ST7735_DISPON); // 4: Main screen turn on, no args
|
||||
waitLong();
|
||||
|
||||
deselect();
|
||||
waitLong();
|
||||
|
||||
select();
|
||||
sendCommand(ST7735_DISPON); // 4: Main screen turn on, no args
|
||||
deselect();
|
||||
waitLong();
|
||||
|
||||
debugMod(NAME, "init() done");
|
||||
|
||||
}
|
||||
@@ -223,21 +234,22 @@ public:
|
||||
|
||||
select();
|
||||
|
||||
sendCommand(ST7735_CASET); // Column addr set
|
||||
sendCommand(ST7735_CASET); // Column addr set
|
||||
sendData(0x00);
|
||||
sendData(0); // XSTART
|
||||
sendData(0); // XSTART
|
||||
sendData(0x00);
|
||||
sendData(V-1); // XEND
|
||||
sendData(V-1); // XEND
|
||||
|
||||
sendCommand(ST7735_RASET); // Row addr set
|
||||
sendCommand(ST7735_RASET); // Row addr set
|
||||
sendData(0x00);
|
||||
sendData(0); // YSTART
|
||||
sendData(0); // YSTART
|
||||
sendData(0x00);
|
||||
sendData(H-1); // YEND
|
||||
sendData(H-1); // YEND
|
||||
|
||||
sendCommand(ST7735_RAMWR);
|
||||
|
||||
modeData();
|
||||
/*
|
||||
for (int i = 0; i < (V*H); ++i) {
|
||||
const uint16_t color = data[i];
|
||||
//const uint8_t lo = color & 0xFF;
|
||||
@@ -246,7 +258,9 @@ public:
|
||||
//sendData(hi);
|
||||
//spi::writeWord(color);
|
||||
spi.writeWord(color);
|
||||
}
|
||||
}*/
|
||||
spi.write((const uint8_t*)data, V*H*sizeof(uint16_t));
|
||||
|
||||
|
||||
deselect();
|
||||
|
||||
@@ -258,43 +272,31 @@ private:
|
||||
|
||||
void sendData(uint8_t data) {
|
||||
modeData();
|
||||
//select();
|
||||
//spi::writeByte(data);
|
||||
spi.writeByte(data);
|
||||
//deselect();
|
||||
}
|
||||
|
||||
void sendCommand(uint8_t cmd) {
|
||||
modeCommand();
|
||||
//select();
|
||||
//spi::writeByte(cmd);
|
||||
spi.writeByte(cmd);
|
||||
//deselect();
|
||||
}
|
||||
|
||||
/** switch D/C line low */
|
||||
inline void modeCommand() {
|
||||
//GPIO5_OUTPUT_SET;
|
||||
//GPIO5_L;
|
||||
MyGPIO::clear(PIN_DATA_COMMAND);
|
||||
}
|
||||
|
||||
/** switch D/C line high */
|
||||
inline void modeData() {
|
||||
//GPIO5_OUTPUT_SET;
|
||||
//GPIO5_H;
|
||||
MyGPIO::set(PIN_DATA_COMMAND);
|
||||
}
|
||||
|
||||
/** set CS = low */
|
||||
inline void select() {
|
||||
MyGPIO::clear(PIN_CS);
|
||||
//spi::chipSelect();
|
||||
}
|
||||
|
||||
/** set CS = high */
|
||||
inline void deselect() {
|
||||
//spi::chipDeselect();
|
||||
MyGPIO::set(PIN_CS);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user