Перейти к содержанию

Гамма-коррекция дисплея

Код 128 из 255 не даёт половину яркости — и это задумано. Контроллер TFT-панели переводит код цвета в напряжение на жидком кристалле по кривой гаммы, и от её настройки зависит, будут ли тени чёрными пятнами, а светлые места — белёсыми.

Обновлено Редакция GAW

Гамма-коррекция (gamma correction) — нелинейное преобразование кода цвета в яркость точки экрана. В TFT-панели контроллер дисплея переводит код каждой составляющей R, G, B в напряжение на жидком кристалле, а зависимость пропускания кристалла от напряжения нелинейна и у каждого стекла своя. Гамма-коррекция подбирает эти напряжения так, чтобы яркость следовала заданной кривой, обычно степенной: в ILI9341 кривая 1 описывается функцией y = x^2,2.

Как устроено в контроллере

Генератор напряжений серой шкалы выдаёт набор опорных уровней, и уровень для каждого кода берётся из них. В ILI9341 это уровни VP0–VP63 для положительной полярности и VN0–VN63 для отрицательной: жидкий кристалл питают переменным напряжением относительно VCOM, и каждой полярности нужна своя таблица. ST7789V настраивает гамму тремя группами регистров — наклоном, контрастом и тонкой подстройкой — и позволяет менять каналы R, G и B отдельно.

КомандаILI9341ST7789V
26h GAMSET — выбор кривой01h — G2.2 (одна предустановленная)01h — G2.2, 02h — G1.8, 04h — G2.5, 08h — G1.0
E0h — гамма положительной полярностиPGAMCTRL, 15 параметровPVGAMCTRL
E1h — гамма отрицательной полярностиNGAMCTRL, 15 параметровNVGAMCTRL
E2h, E3h — цифровая гаммаDigital Gamma Control 1 и 2таблицы для красного и синего

Команды E0h и E1h у ILI9341 работают только при высоком уровне вывода EXTC; если он на земле, контроллер их не выполняет.

Что это значит на практике

  • Половина кода — не половина яркости. При кривой 2,2 код 128 из 255 даёт около 22 % яркости (0,5^2,2, наш пересчёт). Поэтому плавное изменение яркости подсветкой и плавная заливка цветом ведут себя по-разному.
  • Строки E0h и E1h из примера модуля не трогают. Их подбирает производитель под своё стекло, и значения от другого модуля искажают серую шкалу. Инициализация ILI9341 и порядок команд разобраны на странице ILI9341, для ST7789 — на странице ST7789 и ST7735.
  • У светодиодов гамму делают в программе. У адресных светодиодов и простых ШИМ-каналов такого блока нет, и кривую применяют таблицей значений ШИМ; её строит генератор таблиц, а временные параметры сигнала лент проверяет калькулятор WS2812.
  • Гамма не влияет на скорость. Она не меняет ни частоту кадров, ни объём данных: формат точки задаётся отдельно — см. формат пикселя.

После аппаратного и программного сброса GAMSET равен 01h, то есть включена кривая G2.2, а таблицы E0h и E1h содержат значения по умолчанию. Если изображение выглядит блёклым, сначала сверьте инициализацию с примером производителя модуля и только потом подбирайте параметры сами — по одному, сравнивая градиент от чёрного к белому.

Частые вопросы

Что делают команды E0h и E1h в инициализации ILI9341?

Это тонкая настройка гамма-кривой для конкретной панели: PGAMCTRL (E0h) и NGAMCTRL (E1h) по 15 параметров задают опорные напряжения серой шкалы для положительной и отрицательной полярности. Ilitek описывает их как установку напряжений серой шкалы для подстройки гаммы TFT-панели. Значения подбирает производитель модуля под своё стекло, поэтому их берут из примера инициализации модуля, а не придумывают.

Почему код 128 не даёт половину яркости?

Кривая 1 в ILI9341 по даташиту следует функции y = x^2,2: яркость растёт как степень кода. Для середины шкалы это 0,5^2,2 ≈ 0,22 — около пятой части максимальной яркости (наш пересчёт). Почти линейную зависимость дала бы кривая G1.0, которую среди четырёх предустановленных предлагает ST7789V; G2.2 — значение по умолчанию у обоих контроллеров.

Как сменить гамму у ST7789V?

Командой GAMSET (26h) с одним параметром: 01h — кривая G2.2, 02h — G1.8, 04h — G2.5, 08h — G1.0. Остальные значения Sitronix называет недопустимыми — они не меняют текущую кривую. Тонкая подстройка — командами E0h и E1h, а цифровые таблицы E2h и E3h корректируют красный и синий каналы отдельно.

Источники

  1. ILI Technology. ILI9341 a-Si TFT LCD Single Chip Driver 240RGBx320 Resolution and 262K color, Specification V1.11 (ILI9341_DS_V1.11) — разд. 2: одна предустановленная кривая гаммы с раздельной коррекцией R, G, B; разд. 7: генератор напряжений серой шкалы формирует напряжение на жидком кристалле по уровню, заданному в регистрах гамма-коррекции, до 262 144 цветов; разд. 8.2.17: GAMSET (26h) — выбор кривой, 01h — кривая 1 (G2.2), до 4 кривых, по умолчанию 01h, прочие значения не меняют текущую кривую; разд. 8.3.24–8.3.25: PGAMCTRL (E0h) и NGAMCTRL (E1h) — по 15 параметров, задают напряжения серой шкалы VP0–VP63 и VN0–VN63 для подстройки гаммы панели, команды работают при высоком уровне EXTC; разд. 8.3.26–8.3.27: цифровая гамма E2h и E3h; разд. 14.2.1: кривая 1 (GC0) описывается функцией y = x^2,2
  2. Sitronix. ST7789V 240RGB x 320 dot 262K Color with Frame Memory Single-Chip TFT Controller/Driver, Version 1.3 (2014-03) — разд. 2: 4 предустановленные кривые гаммы с раздельной настройкой RGB; разд. 8.19: гамма-коррекция тремя группами регистров — наклон, контраст и тонкая подстройка — для положительной и отрицательной полярности, R, G и B настраиваются отдельно; рис. 36 — связь выходного напряжения истока и VCOM; разд. 9.1.17: GAMSET (26h): 01h — G2.2, 02h — G1.8, 04h — G2.5, 08h — G1.0, по умолчанию после включения и сбросов 01h; разд. 9.2.24–9.2.27: PVGAMCTRL (E0h), NVGAMCTRL (E1h), цифровые таблицы гаммы DGMLUTR (E2h) и DGMLUTB (E3h)

Нашли ошибку?