ARDUINO Подключение дисплея ST7735S (без SD) 1.8 TFT 128х160 SPI Arduino MEGA

Famous

✩✩✩✩✩✩✩
30 Мар 2021
2
0
Добрый вечер. Пишу интересный проект для автомобиля - эдакий простой борт компьютер.

Функционал - часы, вольтметр, отображение температур с датчиков (внутри, снаружи, двигатель), функция диагностики двигателя (считывание импульсов и дальнейшая их интерпретация). Проект уже почти полностью готов и уже хочется поделиться тем, что получилось, но возникло 2 вопроса которые не дают мне двигаться вперед. Вот висит такой осадок недопонимания и всё(. Можно было бы не заморачиваться но как то не получается.

Суть вопроса №1. Дисплей пытаюсь подключить к плате Arduino MEGA 2560. Из просторов интернета нашел кое-какую таблицу подключения, затем видео в youtube подключил аналогично и вот так получилось:

ST7735S(1).jpg
ST7735S(2).jpg

Проблема заключается в том, что когда использовал небольшой OLED дисплей - там не нужно было затирать предыдущий кадр, а скорость обновления была достаточно быстрой чтобы мерцания не было видно. Здесь же я для обновления данных на экране (например значение температуры) использую заливку черным прямоугольником (цвет фона - черный). Из-за чего при обновлении значения сильно видно мерцание. Подсмотрел другой способ - не зарисовывать прямоугольником, а выводить те же самые (предыдущие) данные с прошлого выполнения цикла, но уже черным цветом - безрезультатно. Пробовал изменить частоту работы SPI, но не особо разобравшись как это делается хоть и попробовал кусочек кода - результата не увидел и удалил от греха подальше, а то в прошлый раз с прерываниями на Rx Tx тоже экспериментировал и плату уложил...

Согласно даташита меги: у меня SCL дисплея подключен к SCK (52 pin); SDA дисплея подключен к MOSI (51 pin).
MEGA_DATASHEET.jpg

Объявляю переменные для работы с дисплеем:
// ДИСПЛЕЙ ST7735S
  #define TFT_CS        8
  #define TFT_RST        -1 // Or set to -1 and connect to Arduino RESET pin
  #define TFT_DC         9
  Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
  #define TFT_BRT 11
  int BRT = 190;
  int MAIN_COLOR = 0x07E0;
  int color_num = 1;
// / ДИСПЛЕЙ ST7735S
Инициализация дисплея:
  // ++++++++++++++++++++++++++++ SETUP Дисплей
  /*
   * tft.setRotation(2); - текст вверх ногами (контакты внизу)
   */
    tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
    tft.setRotation(2);
    tft.fillScreen(ST77XX_BLACK);
    analogWrite(TFT_BRT,BRT);
    
  // ++++++++++++++++++++++++++++ /SETUP Дисплей
Подскажите пожалуйста, в моем случае подключение реализовано правильно, по "хардварному" SPI? И как всё же правильно избавиться от эффекта мерцания при обновлении информации?

На форуме уже была похожая тема, но она не раскрывает моего вопроса по мерцанию данных.

И вопрос №2. На OLED дисплее процесс запуска выглядел более красиво, я в setup мог даже вывести логотип марки авто, а затем отобразить данные и это было как-то плавно. В текущей конфигурации с данным конкретно дисплеем запуск выглядит следующим образом: сначала экран зажигается белым цветом с подсветкой, потом серый шум пробегает во всему дисплею, затем дисплей окрашивается в цвет фона и появляются данные. Можно ли как-нибудь не подсвечивать дисплей до того момента, пока не будет возможность сразу отобразить данные?
 

Stamp

★✩✩✩✩✩✩
12 Янв 2021
61
33
Можно ли как-нибудь не подсвечивать дисплей до того момента, пока не будет возможность сразу отобразить данные?
Вход BLK управляет подсветкой дисплея. Сначала инициализируете его, потом включаете подсветку.
Здесь правильное подключение дисплея.
У него особенность, питание 5в., шина данных 3.3в.
 
Изменено: