Управление яркостью подсветки 7-ми дюймового tft lcd

Управление яркостью подсветки 7-ми дюймового tft lcd

ВведениеВ настоящее время я занимаюсь проектом на Arduino с применением TFT дисплея. Сравнительно не так давно мне захотелось добавить в него, казалось бы, несложную функцию — функцию регулировки яркости. Отыскал в документации к библиотеке для работы с TFT дисплеем (UTFT Library) необходимый способ: setBrightness(br);
Смотрите кроме этого: LG подтвердила наличие в LG G3 5,5-дюймового QHD-дисплея

Подразделение LG Display заявило, что 5,5-дюймовый дисплей с разрешением 2560х1440 пикселей прошёл сертификацию в интернациональной организации NEMKO и будет использован в грядущем флагмане компании, анонс которого пройдёт в первом полугодии 2014 года. LG говорит, что новый дисплей владеет лучшей цветопередачей и более высокой яркостью. Помимо этого, экран разрешает наблюдать Blu-ray-видео в хорошем качестве.Необходимо подчеркнуть, что толщина нового 5,5-дюймового дисплея образовывает всего 1,2 мм, а толщина рамок — 1,15 мм.

Написал целый код, сделал все, как нужно. Решил проверить, но, к моему удивлению, ничего не происходило. Начал разбираться.

Спустя два дня, увидел маленькое примечание к способу: This function is currently only supported on CPLD-based displays. Другими словами, эта библиотека, не поддерживает мой дисплей. Но я выяснил, что сам дисплей регулировку яркости поддерживает. Весьма долго искал в сети методы настройки, но так и не отыскал, исходя из этого решил добиться собственной цели сам, вопреки всему, и у меня это оказалось.

И вот решил поделиться с теми, кому это может понадобиться.Что нам пригодится?

  • В качестве базы, я применял Frearduino ADK v.2.2 на базе процессора ATmega2560
  • TFT LCD Mega Shield v.2.2
  • Сам дисплей — 7 TFT LCD SSD1963 (Тут вы отыщете его описание, конечно нужную документацию)
  • UTFT Library — универсальная библиотека для работы с TFT дисплеями (Отыскать саму библиотеку, конечно документацию возможно тут)
  • Паяльник

Разберёмся с железомОткрыв схему дисплея, возможно заметить, что на конвертер mp3032 идет три входа: LED-A, PWM, 5V. Изначально, PWM неактивен. Данный вход не употребляется совсем.

Подсветка управляется LED-A. В случае если посмотреть на обратную сторону дисплея, возможно отыскать область, подписанную как Backlight control. Тут то мы и отыщем эти самые входы. Для управления подсветкой способом ШИМ, нужно сделать так, дабы все было напротив: LED-A — неактивен, PWM — активен. Для этого нужно перепаять перемычку.

Вот фото того, что должно оказаться:Программная частьТак как отечественная библиотека не имеет возможности дать то, что нам нужно, мы сами напишем нужную функцию. Для этого откроем документацию к контроллеру, управляющему дисплеем (SSD1963).

Управление SSD1963 осуществляется посредством особых команд, каковые передаются с Arduino через особые выходы, каковые обрисованы в документации:Управление осуществляется следующим образом: Arduino выводит через RS (D/C в таблице) 0, в случае если мы планируем передавать команду, 1 — в случае если эти. По окончании передачи команды, RS переключается на 1, и потом передаются нужные параметры. Все команды и параметры передаются через выходы D0-D7.

В случае если у вас ATmega2560, то все эти восемь выходов объединены в порт C.Итак, для начала, напишем функцию передачи данных по шине. Для удобства применения, я буду писать прямо в UTFT.h:void Lcd_Writ_Bus(uint8_t bla) { digitalWrite(WR,LOW); //Настраиваем SSD1963 на чтение digitalWrite(CS, LOW); PORTC = bla;//Передаем на шину данные в виде одного байта digitalWrite(CS,HIGH); digitalWrite(WR,HIGH); } Кроме этого стоит обратить внимание на заглавия способов, поскольку в библиотеке уже смогут встретиться функции с этими же именами.Добавим две функции для вывода команд и данных:void Lcd_Write_Com(uint8_t data) { digitalWrite(RS,LOW); //Переключаем RS в режим чтения команды, другими словами 0 Lcd_Writ_Bus(data); }void Lcd_Write_Data(uint8_t data) { digitalWrite(RS,HIGH);//Переключаем RS в режим чтения данных, другими словами 1 Lcd_Writ_Bus(data); } Сейчас сама настройка подсветки.

Дабы выяснить, как осуществить все это, открываем документацию и ищем команду для настройки PWM.Примечание: PWM может управляться, посредством DBC — совокупность динамической регулировки яркости, но я, для простоты, не стал её применять. Вы же, в случае если желаете, имеете возможность отыскать нужную информацию в той же документации.Итак, вот, что нам нужно:Другими словами, сперва мы должны передать команду «0xBE», а позже, в качестве 3-х параметров передать частоту сигнала, продолжительность рабочего цикла, и третий параметр, определяющий, включен DBC либо нет (0x01 — отключён, 0x09 — включен).Для регулировки самой яркости, нужно изменять только частоту рабочего цикла.

Так как мы передаём данные в виде одного байта, то значения цикла смогут быть от 0 до 255. Я решил выяснить 9 уровней яркости (от 0 до 8). Следовательно, все 256 значений необходимо разбить на 9 ступеней.

Вместе с тем стоит обратить внимание на то, что в случае если ступени будут равными, то яркость будет изменяться не так медлено, как хотелось бы. Другими словами уже, например, на 4-ой ступени, яркость будет практически большой, а с 4-ой по 8-ую ступень будет изменять практически незаметно.

Учитывая это, я решил применять геометрическую прогрессию со знаменателем 2. Другими словами яркость будет вычисляться по следующей формуле: (2 ^ lvl) — 1, где lvl — уровень яркости от 0 до 8. Обратите внимание, что так как значения начинаются с нуля, то нужно вычесть единицу. Само собой разумеется, вы имеете возможность выбрать их значения и ступени сами, но я привёл вот таковой, достаточно легко пример. Сейчас сам код:void setBright(byte lvl) { byte brightness(1); for (byte i(1); i Сейчас возможно применять UTFT.setBright(byte lvl);

Случайная статья:

Ремонт дисплея ноутбука. Нет LED подсветки на LCD матрице.


Похожие статьи:

Комментирование и размещение ссылок запрещено.

Обсуждение закрыто.