Tearing Effect — сигнал TE и разрыв кадра
На анимации или прокрутке по экрану иногда бежит косая линия: верх показывает уже новый кадр, низ — ещё старый. Это разрыв кадра. Контроллеры TFT-дисплеев выдают специальный сигнал, по которому программа может писать в память так, чтобы разрыва не было.
Обновлено Редакция GAW
Tearing Effect (разрыв кадра) — искажение, при котором на экране одновременно видны части двух разных кадров. Оно возникает, когда программа меняет память контроллера дисплея в тот момент, когда контроллер читает её для обновления панели. Сигнал TE (Tearing Effect output) — выход контроллера, по которому микроконтроллер синхронизирует запись с развёрткой.
Сигнал TE у ILI9341
| Параметр | Значение |
|---|---|
| Режим 1 | только вертикальная синхронизация (V-blanking) |
| Режим 2 | вертикальная и горизонтальная: 1 импульс V-sync и 320 H-sync на кадр |
| Включение и выключение | команды 35h (TEON, параметр M — режим) и 34h (TEOFF) |
| Пауза между кадрами при 60 Гц | tvdh не меньше 1000 мкс |
| Фронты сигнала | не длиннее 15 нс |
На время tvdh панель не обновляется из памяти, на время tvdl — обновляется. Даташит ILI9341 прямо говорит, что сигнал TE подают обратно на микроконтроллер, чтобы избежать разрывов.
Как писать без разрыва
Если изменение успевает записаться за паузу между кадрами, достаточно начинать запись по фронту TE. Если запись дольше паузы, но короче кадра, её начинают по TE и ведут в том же направлении, в котором панель читает память: считывание идёт впереди и до конца кадра не встречается с записью.
Проблема в скорости интерфейса. При частоте кадров 70 Гц кадр длится около 14 мс, а полный кадр 240 × 320 по SPI передаётся больше 100 мс: панель за это время несколько раз обгонит запись, и синхронизация по TE разрыв полностью не уберёт. Поэтому на SPI перерисовывают небольшие окна, укладывающиеся в один кадр, или переходят на параллельный интерфейс. Передачу удобно вести через DMA с двойным буфером: пока один буфер уходит в дисплей, второй заполняется.
Перед проектированием проверяют, выведен ли TE на разъём конкретного модуля на ILI9341 или ST7789: без этого вывода синхронизировать запись с развёрткой нельзя.
Частые вопросы
Почему разрывов не видно на статичных экранах?
Разрыв появляется только тогда, когда содержимое памяти меняется во время развёртки. Если картинка стоит на месте, контроллер каждый кадр выводит одно и то же. Заметен он на прокрутке, анимации и видео, особенно если по экрану движется вертикальная граница.
Что делать, если на модуле нет вывода TE?
Без сигнала синхронизации момент записи относительно развёртки случаен, и полностью убрать разрыв нельзя. Его можно сделать менее заметным: перерисовывать небольшие окна, каждое из которых записывается быстрее одного кадра, и не двигать по экрану длинные вертикальные границы.
Сколько времени есть на запись после импульса TE?
В режиме 1 импульс TE совпадает с паузой между кадрами, когда панель не читает память. По таблице ILI9341 при 60 Гц эта пауза не короче 1000 мкс. Если запись длится дольше паузы, но короче кадра, её начинают по TE и ведут в направлении развёртки, чтобы считывание шло впереди записи.
Источники
- Ilitek. ILI9341 a-Si TFT LCD Single Chip Driver 240RGBx320 Resolution and 262K color, Specification V1.10 (ILI9341_DS_V1.10) — разд. 10: выход TE даёт МК сигнал синхронизации панели, чтобы синхронизировать запись в память кадра; режим 1 — только V-blanking, режим 2 — V-blanking и H-blanking, один импульс V-sync и 320 импульсов H-sync на поле; tvdh — панель не обновляется из памяти, tvdl — обновляется; при 60 Гц tvdh не меньше 1000 мкс; фронты не длиннее 15 нс; в режиме сна при включённом TE вывод активен низким уровнем; команды 34h TEOFF и 35h TEON (параметр M выбирает режим)
- Newhaven Display. NHD-2.4-240320CF-CTXI#-F, 2.4" 240x320 TFT, Rev. 13 (05/16/2023) — модуль на контроллере ST7789VI; пример инициализации включает команду управления частотой кадров FRCTRL2; время реакции панели 4/8 мс нарастания и 12/24 мс спада
Нашли ошибку?
Смотрите также
- Частота кадров дисплеяСколько раз в секунду контроллер перерисовывает панель из своей памяти
- Контроллер и драйвер дисплеяМикросхема, которая хранит изображение и управляет строками и столбцами панели
- Двойной буфер DMAРежим DMA с двумя адресами памяти, которые меняются местами в конце каждой передачи
- TFT на ILI9341Питание, SPI с D/CX, RGB565 и RGB666, окно записи, поворот, инициализация
- TFT на ST7735 и ST7789Память и разрешения, SPI, цвет, поворот, смещение окна, инициализация