Низкая частота обновления 1,8-дюймового TFT-дисплея

У меня есть 1,8-дюймовый TFT-дисплей для Arduino Nano, и он очень медленно меняет цвет. Когда я пытаюсь изменить цвет всего экрана, я вижу, как он меняет цвет построчно. Я использую библиотеки Adafruit GFX Graphics Core и Adafruit ST7735 для изменения цветов.

Вопрос: Низкая частота обновления 1,8-дюймового TFT-дисплея связана с ограниченными вычислительными возможностями Arduino или самого 1,8-дюймового TFT-дисплея или используемой библиотеки?

, 👍0

Обсуждение

Ну, это 160*128*18 бит (может быть и *24, если не запаковано). С тактовой частотой SPI 1 МГц это означает частоту обновления около 2,7 Гц (но без каких-либо других настроек, таких как установка адреса пикселя и т. д.)., @KIIV

@KIIV большинство маленьких TFT работают в 16-битном режиме. Это (16*(160*128)) + (11*8) бит (+11 для настройки окна рисования), или 327768 бит. На тактовой частоте 1 МГц это около 3 кадров в секунду., @Majenko


2 ответа


Лучший ответ:

3

TFT ST7735 использует SPI для связи. Это никогда не может быть особенно быстрым.

Разрешение 160 x 128 пикселей с глубиной цвета 16 бит дает вам 327 680 бит, которые необходимо передать только для данных о цвете. Кроме того, у вас есть 88 бит для настройки окна рисования (11 байтов «установить координату и ширину X» [5 байтов], «установить координату и высоту Y» [5 байтов] и «начать рисование» [1 байт] ).

Всего вам нужно передать 327 768 бит.

Теперь передача этих данных зависит от тактовой частоты SPI. Насколько быстро это может произойти, зависит от того, с чем может работать ST7735, и от качества вашей проводки (если это экран, вы можете почти не учитывать проводку). Предполагая, что вы можете работать на максимальной частоте 8 МГц, на которой Arduino может работать с SPI (что вероятно), вы получите:

8,000,000
---------   =  24.4 frames per second
 327768

Это абсолютная максимальная теоретическая скорость, не учитывающая какую-либо работу, проделанную Arduino для фактической отправки данных. Библиотека SPI полностью блокируется в своей работе, и каждый пиксель должен быть отправлен отдельно как одна блокирующая транзакция. Таким образом, вы можете ожидать примерно половину этой скорости в действительности, если не меньше, пока он зацикливается и отправляет каждый пиксель, а затем блокируется, ожидая отправки пикселя.

И, конечно, при условии, что вы работаете на максимальной скорости. На самом деле этого, вероятно, не происходит. Библиотеки, использующие SPI, часто выбирают «наименьший общий знаменатель» для своей скорости SPI (если они вообще активно выбирают скорость), так что в большинстве случаев библиотека «просто работает». Таким образом, скорость, с которой работает библиотека, скорее всего, будет значительно ниже фактической максимальной скорости, с которой вы могли работать.

Например, если он работает на частоте 1 МГц вместо 8 МГц, вы получите около 3 кадров в секунду (что больше похоже на то, что вы описываете).

Поэтому изучите выбранную вами библиотеку и посмотрите, как она настраивает скорость SPI. Если это ничего не делает, рассмотрите возможность добавления кода для увеличения скорости. Если это так, рассмотрите возможность увеличения скорости, с которой он работает (дополнительные сведения см. в справочнике по библиотеке SPI).

Тем не менее, маленький Arduino редко бывает хорошим выбором для управления TFT-экраном. Как минимум, вам действительно нужен чип с гораздо большим объемом памяти, чтобы вы могли рисовать графику «вне экрана» в буфере кадра, а затем использовать DMA для передачи этого внеэкранного буфера на экран TFT по 16-битному параллельному соединению со скоростью высокая скорость, оставляя центральный процессор свободным для выполнения других задач. Или, что еще лучше, микроконтроллер со встроенным TFT-контроллером, чтобы напрямую генерировать правильные управляющие сигналы для TFT-панели и сохранять изображение всего экрана во внутренней оперативной памяти.

,

1

Учитывая, что вы используете последние версии библиотек и у вас правильно подключены кабели, без вашего кода сложно догадаться.

Итак, чтобы проверить, загружает ли ваш код один или два библиотечных примера, и смотрите, работает ли он там.
Еще один вариант — установить скорость SPI, набор с begin(freq) не работает, потому что это неправильно < a href="https://github.com/adafruit/Adafruit-ST7735-Library/issues/107">подробнее см. в этом выпуске.
Если проблема не устранена, вернитесь с проводкой и использованным кодом. . Nano — не лучший выбор для TFT, но работает прилично.

,