мне пришел такой же обрезаный, я даташит изучил вдоль и поперек, там написано по GM0 и GM1, что от них зависит разрешение, но как их поменять нигде нет. были мысли что есть недокументированные команды, я даже написал скетч который сыплет случайными командами(за исключением некоторых типа софтресета и выкл) с рандомными параметрами -- за час чуда не произошло, я уж признаться решил что партия бракованая. Решение подсказал продавец, скинул скетч из которого я и выудил нужную мантру: две команды без параметров 0xfe, 0xef потом две команды с параметрами по одному на каждую 0xb6 c параметром 0x11, 0xac с параметром 0x0b и о чудо - весь экран заработал
круто но непонятно! ты расшифровал бы два своих поста и скетч к удобочитаемому виду привёл, ...наверное проще поправить библиотеку, в частности функцию setRotation();
скетч из которого я и выудил нужную мантру: две команды без параметров 0xfe, 0xef потом две команды с параметрами по одному на каждую 0xb6 c параметром 0x11, 0xac с параметром 0x0b и о чудо - весь экран заработал
Подскажите, пожалуйста. C помощью Ардуино как эти команды подать?
Спасибо и вам не хворать.
Извените но разница в коде только в иницализации экрана, а это буквально несколько строк.
Но и на этом спасибо.
Извените но разница в коде только в иницализации экрана, а это буквально несколько строк.
сообщение об ошибке говорит, что разница в процедуре что-то там ...userCode(), а не только в инициализации экрана
Всем спасибо разобрался сам , просто пропустил скобку.
Всем спасибо разобрался сам , просто пропустил скобку.
всегда рады помочь
Всем спасибо разобрался сам , просто пропустил скобку.
если нашёл одну ошибку ищи ещё одну, PS нашёл в исходнике аж 6-ть (Шесть)
мне пришел такой же обрезаный, я даташит изучил вдоль и поперек, там написано по GM0 и GM1, что от них зависит разрешение, но как их поменять нигде нет. были мысли что есть недокументированные команды, я даже написал скетч который сыплет случайными командами(за исключением некоторых типа софтресета и выкл) с рандомными параметрами -- за час чуда не произошло, я уж признаться решил что партия бракованая. Решение подсказал продавец, скинул скетч из которого я и выудил нужную мантру: две команды без параметров 0xfe, 0xef потом две команды с параметрами по одному на каждую 0xb6 c параметром 0x11, 0xac с параметром 0x0b и о чудо - весь экран заработал
круто но непонятно! ты расшифровал бы два своих поста и скетч к удобочитаемому виду привёл, ...наверное проще поправить библиотеку, в частности функцию setRotation();
// OTHER FUNCTIONS ********************************************************* /**************************************************************************/ /*! @brief Set origin of (0,0) and orientation of TFT display @param m The index for rotation, from 0-5 inclusive */ /**************************************************************************/ void Adafruit_ST7735::setRotation(uint8_t m) { uint8_t madctl = 0; rotation = m & 5; // can't be higher than 5 // For ST7735 with GREEN TAB (including HalloWing)... if ((tabcolor == INITR_144GREENTAB) || (tabcolor == INITR_HALLOWING)) { // ..._rowstart is 3 for rotations 0&1, 1 for rotations 2&3 _rowstart = (rotation < 2) ? 3 : 1; } switch (rotation) { case 0: if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) { madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_RGB; } else { madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST7735_MADCTL_BGR; } if (tabcolor == INITR_144GREENTAB) { _height = ST7735_TFTHEIGHT_128; _width = ST7735_TFTWIDTH_128; } else if (tabcolor == INITR_MINI160x80) { _height = ST7735_TFTHEIGHT_160; _width = ST7735_TFTWIDTH_80; } else { _height = ST7735_TFTHEIGHT_160; _width = ST7735_TFTWIDTH_128; } _xstart = _colstart; _ystart = _rowstart; break; case 1: if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) { madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB; } else { madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST7735_MADCTL_BGR; } if (tabcolor == INITR_144GREENTAB) { _width = ST7735_TFTHEIGHT_128; _height = ST7735_TFTWIDTH_128; } else if (tabcolor == INITR_MINI160x80) { _width = ST7735_TFTHEIGHT_160; _height = ST7735_TFTWIDTH_80; } else { _width = ST7735_TFTHEIGHT_160; _height = ST7735_TFTWIDTH_128; } _ystart = _colstart; _xstart = _rowstart; break; case 2: if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) { madctl = ST77XX_MADCTL_RGB; } else { madctl = ST7735_MADCTL_BGR; } if (tabcolor == INITR_144GREENTAB) { _height = ST7735_TFTHEIGHT_128; _width = ST7735_TFTWIDTH_128; } else if (tabcolor == INITR_MINI160x80) { _height = ST7735_TFTHEIGHT_160; _width = ST7735_TFTWIDTH_80; } else { _height = ST7735_TFTHEIGHT_160; _width = ST7735_TFTWIDTH_128; } _xstart = _colstart; _ystart = _rowstart; break; case 3: if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) { madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB; } else { madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST7735_MADCTL_BGR; } if (tabcolor == INITR_144GREENTAB) { _width = ST7735_TFTHEIGHT_128; _height = ST7735_TFTWIDTH_128; } else if (tabcolor == INITR_MINI160x80) { _width = ST7735_TFTHEIGHT_160; _height = ST7735_TFTWIDTH_80; } else { _width = ST7735_TFTHEIGHT_160; _height = ST7735_TFTWIDTH_128; } _ystart = _colstart; _xstart = _rowstart; break; case 4: if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) { madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB; } else { madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST7735_MADCTL_BGR; } if (tabcolor == INITR_144GREENTAB) { _width = ST7735_TFTHEIGHT_128; _height = ST7735_TFTWIDTH_128; } else if (tabcolor == INITR_MINI160x80) { _width = ST7735_TFTHEIGHT_160; _height = ST7735_TFTWIDTH_80; } else { _width = ST7735_TFTHEIGHT_160; _height = ST7735_TFTWIDTH_128; } _ystart = _colstart; _xstart = _rowstart; break; case 5: if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) { madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST7735_MADCTL_BGR; } else { madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB; } if (tabcolor == INITR_144GREENTAB) { _width = ST7735_TFTHEIGHT_128; _height = ST7735_TFTWIDTH_128; } else if (tabcolor == INITR_MINI160x80) { _width = ST7735_TFTHEIGHT_160; _height = ST7735_TFTWIDTH_80; } else { _width = ST7735_TFTHEIGHT_160; _height = ST7735_TFTWIDTH_128; } _ystart = _colstart; _xstart = _rowstart; break; } sendCommand(ST77XX_MADCTL, &madctl, 1); }Если используем библиотеку TFT в составе IDE (актуально для версий 1.8.1 - 1.8.19) то правим следующий код:
void Adafruit_ST7735::setRotation(uint8_t m) { writecommand(ST7735_MADCTL); rotation = m % 6; // can't be higher than 5 switch (rotation) { case 0: writedata(MADCTL_MX | MADCTL_MY | MADCTL_RGB); _width = ST7735_TFTWIDTH; _height = ST7735_TFTHEIGHT; break; case 1: writedata(MADCTL_MY | MADCTL_MV | MADCTL_RGB); _width = ST7735_TFTHEIGHT; _height = ST7735_TFTWIDTH; break; case 2: writedata(MADCTL_RGB); _width = ST7735_TFTWIDTH; _height = ST7735_TFTHEIGHT; break; case 3: writedata(MADCTL_MX | MADCTL_MV | MADCTL_RGB); _width = ST7735_TFTHEIGHT; _height = ST7735_TFTWIDTH; break; case 4: writedata(MADCTL_MY | MADCTL_MX | MADCTL_MV | MADCTL_RGB); _width = ST7735_TFTHEIGHT; _height = ST7735_TFTWIDTH; break; case 5: writedata(MADCTL_MY | MADCTL_MX | MADCTL_MV); _width = ST7735_TFTHEIGHT; _height = ST7735_TFTWIDTH; break; } }скетч из которого я и выудил нужную мантру: две команды без параметров 0xfe, 0xef потом две команды с параметрами по одному на каждую 0xb6 c параметром 0x11, 0xac с параметром 0x0b и о чудо - весь экран заработал
Подскажите, пожалуйста. C помощью Ардуино как эти команды подать?
Спасибо. Мне нужно записать в контроллер дисплея пару команд, дабы он работал с полным экраном.
Добрый день. Можно и мне задать вопрос по этому дисплею? Повторил пример автора темы. В чем может быть проблема? "Шлейф" за буквами.
Причем не важно что написано. Шлейф за любой надписью.
Шлейф за любой надписью.
и за любым цветом?
примеры из библиотеки нормально работают?
думаю или брак или проверить питание, вдруг он 3.3 вольта, а вы его напрямую от 5 вольт питаете + логика 5и вольтовая.
Нет. 3,3 вольта. Всё верно.
Вот так с разными цветами:
#include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #include <SPI.h> #define TFT_CS 53 #define TFT_RST 8 #define TFT_DC 9 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); void setup(void) { tft.initR(INITR_MINI160x80); tft.setRotation (3); } void loop (void) { }А вот так после выполнения вышеприведенного скетча
(убрал все надписи)
Какое-то затухание цвета слева направо.
склоняюсь что это брак дисплея. не встречался с таким поведением.
Такое впечатление, что неправильно настроен контроллер.
Вероятно, цепочка команд инициализации от другой модели.