Добрый вечер. Пишу интересный проект для автомобиля - эдакий простой борт компьютер.
Функционал - часы, вольтметр, отображение температур с датчиков (внутри, снаружи, двигатель), функция диагностики двигателя (считывание импульсов и дальнейшая их интерпретация). Проект уже почти полностью готов и уже хочется поделиться тем, что получилось, но возникло 2 вопроса которые не дают мне двигаться вперед. Вот висит такой осадок недопонимания и всё(. Можно было бы не заморачиваться но как то не получается.
Суть вопроса №1. Дисплей пытаюсь подключить к плате Arduino MEGA 2560. Из просторов интернета нашел кое-какую таблицу подключения, затем видео в youtube подключил аналогично и вот так получилось:
Проблема заключается в том, что когда использовал небольшой OLED дисплей - там не нужно было затирать предыдущий кадр, а скорость обновления была достаточно быстрой чтобы мерцания не было видно. Здесь же я для обновления данных на экране (например значение температуры) использую заливку черным прямоугольником (цвет фона - черный). Из-за чего при обновлении значения сильно видно мерцание. Подсмотрел другой способ - не зарисовывать прямоугольником, а выводить те же самые (предыдущие) данные с прошлого выполнения цикла, но уже черным цветом - безрезультатно. Пробовал изменить частоту работы SPI, но не особо разобравшись как это делается хоть и попробовал кусочек кода - результата не увидел и удалил от греха подальше, а то в прошлый раз с прерываниями на Rx Tx тоже экспериментировал и плату уложил...
Согласно даташита меги: у меня SCL дисплея подключен к SCK (52 pin); SDA дисплея подключен к MOSI (51 pin).
Подскажите пожалуйста, в моем случае подключение реализовано правильно, по "хардварному" SPI? И как всё же правильно избавиться от эффекта мерцания при обновлении информации?
На форуме уже была похожая тема, но она не раскрывает моего вопроса по мерцанию данных.
И вопрос №2. На OLED дисплее процесс запуска выглядел более красиво, я в setup мог даже вывести логотип марки авто, а затем отобразить данные и это было как-то плавно. В текущей конфигурации с данным конкретно дисплеем запуск выглядит следующим образом: сначала экран зажигается белым цветом с подсветкой, потом серый шум пробегает во всему дисплею, затем дисплей окрашивается в цвет фона и появляются данные. Можно ли как-нибудь не подсвечивать дисплей до того момента, пока не будет возможность сразу отобразить данные?
Функционал - часы, вольтметр, отображение температур с датчиков (внутри, снаружи, двигатель), функция диагностики двигателя (считывание импульсов и дальнейшая их интерпретация). Проект уже почти полностью готов и уже хочется поделиться тем, что получилось, но возникло 2 вопроса которые не дают мне двигаться вперед. Вот висит такой осадок недопонимания и всё(. Можно было бы не заморачиваться но как то не получается.
Суть вопроса №1. Дисплей пытаюсь подключить к плате Arduino MEGA 2560. Из просторов интернета нашел кое-какую таблицу подключения, затем видео в youtube подключил аналогично и вот так получилось:
Проблема заключается в том, что когда использовал небольшой OLED дисплей - там не нужно было затирать предыдущий кадр, а скорость обновления была достаточно быстрой чтобы мерцания не было видно. Здесь же я для обновления данных на экране (например значение температуры) использую заливку черным прямоугольником (цвет фона - черный). Из-за чего при обновлении значения сильно видно мерцание. Подсмотрел другой способ - не зарисовывать прямоугольником, а выводить те же самые (предыдущие) данные с прошлого выполнения цикла, но уже черным цветом - безрезультатно. Пробовал изменить частоту работы SPI, но не особо разобравшись как это делается хоть и попробовал кусочек кода - результата не увидел и удалил от греха подальше, а то в прошлый раз с прерываниями на Rx Tx тоже экспериментировал и плату уложил...
Согласно даташита меги: у меня SCL дисплея подключен к SCK (52 pin); SDA дисплея подключен к MOSI (51 pin).
Объявляю переменные для работы с дисплеем:
// ДИСПЛЕЙ 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 Дисплей
На форуме уже была похожая тема, но она не раскрывает моего вопроса по мерцанию данных.
И вопрос №2. На OLED дисплее процесс запуска выглядел более красиво, я в setup мог даже вывести логотип марки авто, а затем отобразить данные и это было как-то плавно. В текущей конфигурации с данным конкретно дисплеем запуск выглядит следующим образом: сначала экран зажигается белым цветом с подсветкой, потом серый шум пробегает во всему дисплею, затем дисплей окрашивается в цвет фона и появляются данные. Можно ли как-нибудь не подсвечивать дисплей до того момента, пока не будет возможность сразу отобразить данные?