TFT-дисплей ST7789 показывает правильное изображение только при нажатой кнопке сброса Arduino - Почему?

Пытаюсь заставить TFT-дисплей ST7789 работать с Arduino. Я следовал онлайн-руководствам по подключениям и использую быструю библиотеку на github и включенный рабочий стол ino (https://github.com/cbm80amiga/Arduino_ST7789_Fast). Проблема: Программа запускается и управляет дисплеем, но изображение повреждено и только частично. Я обнаружил, что если я быстро и твердо нажму кнопку сброса - и буду удерживать ее нажатой - изображение в момент нажатия кнопки сброса внезапно станет полным и хорошим (хотя и статичным, потому что нажата кнопка сброса). Конечно, как только я отпущу кнопку сброса, программа перезапустится с тем же поврежденным изображением (изображения ниже иллюстрируют проблему).

This is the final screen of the demo showing the corrupt image This is what happens when I press and hold the reset button - the image suddenly becomes nice!

Я не смог найти описание этой конкретной проблемы с помощью онлайн-поиска. Вот что я пытался исправить (все безрезультатно):

  • Я подтвердил, что все контакты верны, как определено в сценарии ino.
  • Я гарантирую, что используется только линия питания 3,3 В. Я никогда не подключал Vcc к 5 В
  • Я попробовал использовать как настоящий Arduino UNO, так и клон - оба показывают одинаковое поведение.
  • Я использовал резисторные делители напряжения 1k:2k для линий передачи данных, res и постоянного тока - это не помогло. На самом деле дисплей вообще не работал с делителями напряжения, только загорелась подсветка и экран слегка мерцал. Я проверил, что получаю ~3 В в середине каждого делителя.
  • Я использовал две отдельные табло ST7789, купленные у двух разных продавцов в разных случаях - оба показывают одинаковое поведение.

[Изменения в ответ на комментарии ниже]

  • Такое же поведение наблюдается при использовании скетча, в котором используются стандартные библиотеки Adafruit (в отличие от быстрой библиотеки, указанной выше).
  • Такое же повреждение наблюдается при запуске на клоне arduino nano. Однако в случае nano нажатие кнопки сброса показывает только мимолетный проблеск полного изображения перед сбросом (т.е. Удерживание кнопки сброса не сохраняет статическое изображение на экране).

Есть какие-нибудь идеи о том, что происходит и как это исправить? Спасибо.

, 👍5

Обсуждение

Может быть, эта "быстрая" библиотека просто слишком быстрая? Вы пробовали библиотеку Adafruit ST7789? Мы знаем, что один работает правильно., @Majenko

Ваша программа постоянно очищала экран (с помощью " fillScreen()`) в цикле?, @hcheung

Поскольку разные UNOS, а также разные дисплеи демонстрируют одинаковое поведение, скорее всего, это программное обеспечение. Вы пробовали то, что предлагает Майенко?, @the busybee

Что касается заполняющего экрана, то нет. В показанном тесте besnchmark заполняющий экран используется для очистки экрана между контрольными тестами. Функция настройки проходит через каждый тест. В конце выводит результаты на экран и оставляет его таким. Функция цикла пуста. Таким образом, вы остаетесь со статическим экраном результатов (показано на моих фотографиях выше). Повреждение постоянно, независимо от анимации, очистки экрана или статических изображений. Только нажатие, удерживающее остальное, делает изображение полным и четким. Возможно, что-то связано с заземлением / изменением постоянного напряжения где-то, вызванного сбросом?, @WildCat

Мне удалось загрузить пример, в котором используются стандартные библиотеки Adafruit (не быстрые библиотеки) - отсюда [ссылка](https://simple-circuit.com/arduino-st7789-ips-tft-display-example/). Это "работает" , но с той же проблемой, описанной выше - поврежденное изображение до тех пор, пока не будет нажата кнопка сброса, после чего изображение станет полным и четким. Так что с "быстрой" библиотекой проблем нет., @WildCat

Как раз когда я собирался избавиться от своего, я наткнулся на ваш пост. Ты спас меня, парень! Спасибо, @nneyjowh


1 ответ


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

3

Я нашел ответ на эту проблему. Прочитав несколько веб-страниц / видео на YouTube от нескольких авторов на этом устройстве и ~все они предупреждают, что вы никогда не должны подключать Vcc к 5 В, иначе это приведет к повреждению дисплея, я нашел один или два, которые предложили вам использовать 5 В, потому что в этом конкретном модуле есть встроенный регулятор. Итак, столкнувшись с тем, что в любом случае это бесполезно, я решил сделать решительный шаг и подключить Vcc TFT к контакту 5 В Arduino, и - эй, вуаля - он отлично работает (см. Рисунок ниже: обратите внимание на четкое полное изображение без удержания кнопки сброса, а также обратите внимание, что вывод напряжения TFT теперь подключен к Arduino 5 В по сравнению с изображениями в моем вопросе).

На рисунке ниже показана задняя часть моего модуля TFT-дисплея, и, судя по тому, что я прочитал, именно транзистор J3Y является ключом к регулированию напряжения в этом модуле.

Я предполагаю, что нажатие кнопки сброса должно было каким-то образом привести к выравниванию напряжений, но я не знаю, как это объяснить. Я попытался измерить вывод 3,3 В на Arduino с помощью вольтметра, удерживая нажатой кнопку сброса, но не увидел никаких изменений (модуль TFT не был на месте для этого теста, поэтому, возможно, во время сброса между Arduino и схемой TFT есть некоторое взаимодействие).

Пожалуйста, обратите внимание: я подозреваю, что это особенность конкретного модуля TFT-дисплея, который у меня есть. Пожалуйста, НЕ запускайте свои устройства 3,3 В на 5 В, если у вас нет веских оснований полагать, что они могут это выдержать. Я попробовал это сделать только после прочтения пары страниц (включая подробные спецификации в списке продавца TFT - модулей), в которых говорилось, что с моим конкретным TFT-модулем все будет в порядке-ваши могут отличаться. Но если у вас та же проблема, которую вы видите в моем вопросе, то, возможно, это стоит рассмотреть. Спасибо тем, кто откликнулся.

,

У меня была та же проблема, и запуск 5 В решил ее и для меня. Давайте просто надеяться, что это продлится в долгосрочной перспективе., @Jona Haggärde

Этот транзистор(!) с двумя базовыми резисторами и токоограничивающим резистором 100R предназначен только для подсветки. Это не имеет ничего общего с VCC. Конденсатор между ними соединен между VCC и GND., @Mark Jeronimus