ILI9488 и Arduino Mega 2560 Pro Mini (или Arduino Mega 2560)

Добрый день. Очередной раз сражаюсь с дисплеями. На этот раз “3.5inch SPI Module MSP3520”.
Подключал его и к Arduino Mega 2560 Pro Mini и к Arduino Mega 2560.
(пример с Arduino Mega 2560 Pro Mini)

Результат работы (одинаков и на Arduino Mega 2560)



Сначала инициализацию модуля делал следующим образом:

#include "SPI.h"
#include <ILI9488.h>

#define TFT_CS    15
#define TFT_DC    14
#define TFT_MOSI  51
#define TFT_CLK   52 
#define TFT_RST   13
#define TFT_MISO  50

ILI9488 tft = ILI9488(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

Связался с продавцом. прислали вот что:
Arduino MEGA2560单片机测试程序接线说明
序号 模块引脚 对应MEGA2560开发板接线引脚
1 SDO(MISO) 50
2 LED A0
3 SCK 52
4 SDI(MOSI) 51
5 DC/RS A3
6 RESET A4
7 CS A5
8 GND GND
9 VCC 5V/3.3V
10 T_IRQ 49
11 T_DO 47

Результат тот же.
И только тогда когда я нажимаю на кнопку RST на Меге я получаю “правильную” картинку:
Выполняется скетч:

Нажимаю кнопку RST.

Выполняется скетч:

Нажимаю кнопку RST.

Можно что то сделать или это проблемы с дисплеем?

с какой-то долей вероятности ты запускаешь его на софтовом SPI, смотри есть ли инициализация для hard SPI
ЗЫ если библиотека отсюда, там прямо написано - не для avr
PS может это чем поможет

Надо с spi_mode поиграться …

сомневаюсь, что на AVR он не работает. Продавец прислал PDF в котором описано как подключать его и к Uno, и к Mega, и к STM.
Пробовал ту ссылку где его подключают к UNO. Не получилось.

Тоже пробовал. Перебрал все 4 режима SPI (которые там есть). Так же пробовал менять частоту SPI (она в SPI.h 4000000 а в ili9488.h 8000000 по-моему). Но тоже не помогло.
Но в *.h и в *.cpp есть очень много чего мне пока не понятного. Поэтому - поменяю число, не получается, назад возвращаю. Наверняка можно *.h и в *.cpp что то поменять что бы всё заработало. только не знаю где.

а ссылка на библиотеку? может попроще сделать и воспользоваться библиотекой от adafruit?

Решали и решили на форуме подобный вопрос !!!
Вот тут почитайте/попробуйте скетчи - команды у драйвера такие же.

Вопрос решён. Опишу причину проблемы (для тех кто будет пробовать работать с таким или подобными дисплеями). Я даже раньше не обращал на это внимание. И на моём рисунке никто не сказал что я соединяю +5 и +3.3 Вольта.
Почитайте здесь:

И на ответ от “ua6em”:

“…там прямо написано - не для avr…”

это тоже ерунда. Работает на этой библиотеке ещё как.

Я включил между LCD и Mega конвертер уровней txs0108e.
Если откроете ссылку на форум (привёл выше) то (смотря на фото): слева включаете LCD справа - Mega. Всё великолепно работает.
Только (но это наверное особенность этого дисплея) мне пришлось добавлять в скетч строку

 tft.invertDisplay(true);

потому что некорректно отображаются цвета: 0xFFFF отображается как 0x0000.

И очень медленно дисплей всё выводит. Надо на STM32 переходить.

Вот поэтому и надо, задавая вопрос, приводить полную принципиальную схему.

Еще бы! Более 300 кбайт видеопамяти по последовательному интерфейсу.

Так на самом первом рисунке всё отображено. Всё “напрямую” подключено :slight_smile:

А (может кто тестировал): что быстрее - вывод через последовательный интерфейс на STM32, или параллельный на Arduino? (понимаю - параллельный на STM32 лучше :slight_smile: :slight_smile: )

Лично у меня первый рисунок ассоциируется c этим:

3 лайка

:slight_smile: мне тоже нравится

не, это произведение искусства, а там петроглифы

да ладно, не стреляйте в пианиста. он играет как умеет.
Главное что там LCD напрямую соединён с платой, без всяких LLC конвертеров.

Вы какую частоту SPI в итоге используете?
“Медленно” - понятие относительное. В библиотеке от Адафруит есть бенчмарк тест - запустите его и покажите результат.

зависит от частоты, что поддерживает дисплей. На “блюпилле”, если я не путаю, максимальная частота SPI 18 МГц, на Меге - 4 МГц. Так что теоретически последовательный СТМ должен быть в 4 раза быстрее последовательного АВР.
А с параллельным надо вживую сравнивать, так не скажешь.

Я вообще-то написал “схема” а не “рисунок”.
А что именно там видно, известно лишь автору рисунка.
Лично я наскальную живопись читать не умею. А потому IMHO все претензии, что мол “не сказали” нужно адресовать исключительно себе - не разместил схему.

Вообще-то прежде, чем “тестировать”, следовало бы посчитать. Тогда, может, и “тестировать” не понадобится.
Кстати, есть и довод в пользу “тестирования”: как показывает практика, реальное различие в скорости между последовательным и параллельным интерфейсами несколько больше, чем дают теоретические оценки - из-за больших пауз между посылками в последовательном интерфейсе.
И заодно довод против “тестирования”: как правило, новички не обладают достаточной квалификацией, чтобы грамотно организовать процесс тестирования.

Кстати, тестировать в принципе мог бы я (у меня пунктик - скорость отображения на дисплее), но я не делал этого, т.к. сначала провожу теоретические оценки скорости, затем, исходя из оценок, выбираю интерфейс и тогда все измерения провожу уже исключительно для нужного интерфейса.

  SPISettings() {
    init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0);
  }