ST7735S 0.96" 80x160 SPI - криво работает

almarona
Offline
Зарегистрирован: 28.09.2021

Спасибо и вам не хворать.

almarona
Offline
Зарегистрирован: 28.09.2021

Извените но разница в коде только в иницализации экрана, а это буквально несколько строк.

almarona
Offline
Зарегистрирован: 28.09.2021

Но и на этом спасибо.

b707
Offline
Зарегистрирован: 26.05.2017

almarona пишет:

Извените но разница в коде только в иницализации экрана, а это буквально несколько строк.

сообщение об ошибке говорит, что разница в процедуре что-то там ...userCode(), а не только в инициализации экрана

almarona
Offline
Зарегистрирован: 28.09.2021

Всем спасибо разобрался сам , просто пропустил скобку.

b707
Offline
Зарегистрирован: 26.05.2017

almarona пишет:

Всем спасибо разобрался сам , просто пропустил скобку.

всегда рады помочь

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

almarona пишет:

Всем спасибо разобрался сам , просто пропустил скобку.

если нашёл одну ошибку ищи ещё одну, PS нашёл в исходнике аж 6-ть (Шесть)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

5ta550n пишет:

мне пришел такой же обрезаный, я даташит изучил вдоль и поперек, там написано по 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);
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Если используем библиотеку 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;
  }
}

 

Геннадий Белов
Offline
Зарегистрирован: 19.03.2022

5ta550n пишет:

 скетч из которого я и выудил нужную мантру: две команды без параметров 0xfe, 0xef потом две команды с параметрами по одному на каждую 0xb6 c параметром 0x11, 0xac с параметром 0x0b и о чудо - весь экран заработал

Подскажите, пожалуйста. C помощью Ардуино как эти команды подать?

Геннадий Белов
Offline
Зарегистрирован: 19.03.2022

Спасибо. Мне нужно записать в контроллер дисплея пару команд, дабы он работал с полным экраном.

Rankle
Offline
Зарегистрирован: 31.10.2020

Добрый день. Можно и мне задать вопрос по этому дисплею? Повторил пример автора темы. В чем может быть проблема? "Шлейф" за буквами.

Причем не важно что написано. Шлейф за любой надписью.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Rankle пишет:

 Шлейф за любой надписью.

и за любым цветом?

примеры из библиотеки нормально работают?

думаю или брак или проверить питание, вдруг он 3.3 вольта, а вы его напрямую от 5 вольт питаете + логика 5и вольтовая.

Rankle
Offline
Зарегистрирован: 31.10.2020

Нет. 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)
{
}

А вот так после выполнения вышеприведенного скетча

(убрал все надписи)

Какое-то затухание цвета слева направо.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

склоняюсь что это брак дисплея. не встречался с таким поведением.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Такое впечатление, что неправильно настроен контроллер.

Вероятно, цепочка команд инициализации от другой модели.