Что можно сделать с большим дисплеем?

004641daa11bf43290091423fead054d.png

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

Какая же у всего этого цель?

Итак, приступим. Цель всей затеи — понять, как работает экран, оживить его и в дальнейшем использовать в каком-нибудь интересном проекте. Попутно приобрести ценный опыт работы с большими дисплеями. И, конечно, поделиться результатом с теми, кому это будет интересно.

Начинаем расковыривать

По традиции, пробуем найти схему навигатора Pioneer PA-503. И, как обычно, ничего не находим. Собираем хоть какую-то информацию. Удалось выяснить разрешение экрана — 480×272 пикселей. Для начала пойдёт. Вскрываем, смотрим кишочки:

f25748872a8b5eeda8670bc5a703ad7f.jpg

Заботливый производитель не только предусмотрел для нас запасной разъём для экрана (позже сделаем переходник), но и подписал контакты UART на плате:

cd33d0d473883c5af5b1da8515ea8953.png

От такого подарка не стоит отказываться. Подключаемся, слушаем, пишем в файлик. Вдруг там будет что-то интересное по дисплею.

Файлик, просто для справки, в нём ничего интересного кроме отладочной информации я не нашёл.

Terminal log file Date: 23.08.2022 — 12:19:41

B_16M
N_CIS ECC_TYPE_32BIT1KB
OK
(J)~
_CB2
NC_PART_MODENC_PART_MODE
Microsoft Windows CE Bootloader Common Library Version 1.4 Built Sep 8 2012 12:04:46
Microsoft Windows CE Bootloader for MStar Columbus Version 0.1104 Built Sep 8 2012

[EBootBATConfigureAthena] TODO:
***** MSB2521 U03 Device *****
[INFO] EbootInitSarAdc.
[XZH]: INREG16(&g_pRTCRegs→RTC_SPARE_0 0
[INFO]: Keep Charging-LED ON (3383mV) op_count (0)
[XZH]: UPDChecker 1
[XZH]: g_bNoUPD 1
[INFO] POWER_ON_SIGN!
[INFO]EBootCheckBatteryVoltage++
PMU: 0×1bff8200****
[Kernel] DispInitOP2 set uart_rts2 high
PowerONCharging: Start
OALBATGetMAXChargingCurrent: Current max charging current: 750 mA.
PowerONCharging: End (> 3.4V)
Initiating NAND…
FMD_EBootInit
FMD_EBootInit PREVENT MEM POWER LOST
FMD_EBootInit PREVENT MEM POWER LOST MEMCMP
[SimpleTimer]started:17
==============ConfigContext=============>
u8_BlkPageCntBits: 6
u8_PageByteCntBits: 9
u8_SectorByteCntBits: 9
u16_BlkPageCntMask: 3F
u16_PageByteCntMask: 1FF
u8_PageSectorCnt: 1
u8_PageSectorCntBits: 0
u16_SectorSpareByteCnt: 10
=======================================<
{
drvNAND_ProbeReadSeq OK
u8_OpCode_RW_AdrCycle: 68
u8_OpCode_Erase_AdrCycle: 54
}
ReadNandID_HAL
ID: AD, D7, 94, DA, 74, C3
ReadNandID_HALTotal 6 bytes ID
==============ConfigContext=============>
u8_BlkPageCntBits: 6
u8_PageByteCntBits: B
u8_SectorByteCntBits: A
u16_BlkPageCntMask: 3F
u16_PageByteCntMask: 7FF
u8_PageSectorCnt: 2
u8_PageSectorCntBits: 1
u16_SectorSpareByteCnt: 80
=======================================<
BlkIdx = 0
from cis: need randomizer
this NAND is H27UBG8T2B
from cis: need SLC mode
FMD_GetParameter_SLCMode
Get: 25
Get: 39
Get: 20
Get: 34
Get: 47
Reg Val: 25,39,20,34,47,
FMD_SetParameter_SLCMode
SetParameter_HAL: 4B
SetParameter_HAL: 5F
SetParameter_HAL: 46
SetParameter_HAL: 5A
SetParameter_HAL: 48
not support multi-plane
==============ConfigContext=============>
u8_BlkPageCntBits: 7
u8_PageByteCntBits: D
u8_SectorByteCntBits: A
u16_BlkPageCntMask: 7F
u16_PageByteCntMask: 1FFF
u8_PageSectorCnt: 8
u8_PageSectorCntBits: 3
u16_SectorSpareByteCnt: 40
=======================================<
Search CIS OK
FMD_GetParameter_ReadRetry
Get: 22
Get: 22
Get: 73
Get: C0
Reg Val: 22,22,73, C0,
FMD> u32DiskStartBlkNo: 3Ah
a.DisplayClockSettings
FCIE clk settings: NFIE_80MHz, But Duty Cycle 3:1
Read UUID
NAND UUID> Hynix NAND flash
0×00000000: AD 0B 05 03 1B 1F 20 43 52 F4 FA FC E4 E0 DF BC

FMD> ReadUUIDData fail blockID (0×26).
FMD> ReadUUIDData fail blockID (0×27).
ERROR: ReadUUIDData11 failed to read the data.
0×00000000: 69 EA E5 E7 17 19 14 95
[FUNC] ReadBootConfig starts.
===========FMD> FMD_GetInfo==========
FMD> u32BytesPerBlock:100000
FMD> u32NumBlocks:800
FMD> flashType:0
FMD> u16DataBytesPerSector:400
FMD> u16DataBytesPerPage:2000
FMD> u16SectorsPerBlock:400
FMD> u16PagesPerBlock:80
[INFO] ReadBootConfig, reading block 28…
[READ] reading page 3584.
[READ] copied 40 bytes to dest buffer.
[READ] updated index of dest buffer to 40.
[FUNC] ReadBootConfig ends.
==========[INFO]: Get Boot Config=========
[INFO]: g_EBootCfg.u8BootDelay (0×1)
[INFO]: g_EBootCfg.u8LoadDeviceOrder (0×1)
[INFO]: g_EBootCfg.u8DebugPort (0×0)
[INFO]: g_EBootCfg.u32LaunchAddress (0×80400000)
[INFO]: g_EBootCfg.u32ImageLength (0×555e08)
[INFO]: g_EBootCfg.u32ConfigFlags (0×0)
[INFO]: g_EBootCfg.u32Signature (0×20110307)
[INFO]: g_EBootCfg.u32XipSize (0×2000000)
OALBATGetVBAT u32VBAT 3383
OALBATGetVBAT u32VBAT 3383
OALBATGetVBAT u32VBAT 3383
OALBATGetVBAT u32VBAT 3392
OALBATGetVBAT u32VBAT 3392
Eboot_NAND_init STARTUP_VOLTAGE 3610
FMD> ReadCustData success blockID (0×24).
[Kernel/DrvGetCustDuty] CustDuty is 5
[Kernel] TurnOnBacklight with boost and adj by pwm4 u8CustDuty = 5
ONCharging: Start
OALBATGetMAXChargingCurrent: Current max charging current: 750 mA.
ONCharging: Voltage1:0 mV
ONCharging: Voltage3:0 mV seccount 1
ONCharging: Voltage4:3392 mV
ONCharging: Voltage:3392 mV
ONCharging: Current:125 mA (DEBUG)
ONCharging: Voltage1:3392 mV
ONCharging: Voltage3:3392 mV seccount 2
ONCharging: Voltage4:3401 mV
ONCharging: Voltage:3401 mV
ONCharging: Voltage1:3401 mV
ONCharging: Voltage3:3401 mV seccount 3
ONCharging: Voltage4:3406 mV
ONCharging: Voltage:3406 mV
ONCharging: Voltage1:3406 mV
ONCharging: Voltage3:3406 mV seccount 4
ONCharging: Voltage4:3411 mV
ONCharging: Voltage:3411 mV
ONCharging: Voltage3:3411 mV seccount 5
ONCharging: Voltage4:3411 mV
ONCharging: Voltage:3411 mV
ONCharging: Voltage3:3411 mV seccount 6
ONCharging: Voltage4:3411 mV
ONCharging: Voltage:3411 mV
ONCharging: Voltage1:3411 mV
ONCharging: Voltage3:3411 mV seccount 7
ONCharging: Voltage4:3415 mV
ONCharging: Voltage:3415 mV
ONCharging: Voltage1:3415 mV

Что у нас ещё есть? А есть у нас карта сокровищ:

Карта сокровищ?Карта сокровищ? Карта сокровищ!Карта сокровищ!

Вот она и поможет нам найти сокровища. Замечаем, что маршрутов у нас всего 40. Как обычно, начинаем с земли (не зря же моряки так ей радовались). Пробуя пройти по 35-й дороге, замечаем, что она ложная: клада там нет (not connected). Также есть буковки К и А. Думаю, вы знаете что с этим делать. А если нет, то подскажу, что это про свет.

Плавно перехожу на технический язык и сообщаю, что дорожка 4 идёт к перемычкам R1-R3 и к чипу, что очень похоже на + питания, а перемычками, видимо, выбирается режим работы. Проследив каждую дорожку, получаем предварительную распиновку: 1 катод, 2 анод, 3 gnd, 4 Vdd, 5–28?, 29 gnd, 30–34?, 35 NC, 36 gnd, 37 XR, 38 YD, 39 XL, 40 YU. Контакты 37–40 — это сенсор (они подписаны на шлейфе).

Многовато неясных выводов, что за интерфейс такой? Поищем похожие панели. Идём в интернет, к примеру, сюда и начинаем смотреть документы на похожие экраны (4,3 дюйма, 480×272, 40 выводов). Для примера рассмотрим этот документ. Ищем pin description и замечаем, что расположение выводов этого экрана полностью согласуется с нашим. А интерфейс тут, как и у нашей панели, параллельный RGB. Просмотрев ещё с десяток даташитов на разные экраны с 40-выводным разъёмом, замечаем, что часто распиновки один в один. Иногда встречаются отличия. Например, нет контактов hsync и vsync (вместо них Not Connected), есть только de. Но порядок следования сохраняется.

Позже на сайте adafruit мне встретилась информация, что 40-выводной разъём полустандартный и у большинства панелей диагональю 3.5», 4.3», 5.0» и 7.0» с параллельным интерфейсом именно такой разъём. Это очень радует и облегчает жизнь. А также даёт возможность покупать неизвестные панели таких диагоналей с 40-выводным разъёмом и пробовать их подключать и оживлять. Самое интересное, что скорее всего, они оживут.

Возможно, есть какие-то закономерности и у 50-выводных разъёмов (может ещё у каких). Нужно проверять. Если что-то знаете, можете поделиться в комментариях.

Навигатор включался и показывал заставку, поэтому у меня была возможность проверить распиновку по сигналам с помощью осциллографа, что я и сделал. Всё подтвердилось. Напряжение питания оказалось 3,3 В, напряжение на светодиодах подсветки около 17–18 В.

Кроме расположения выводов, нам ещё нужны задержки или тайминги, но об этом далее. Их также можно найти в документе на дисплей.

С помощью чего управлять таким дисплеем?

Интерфейс RGB — это специальный параллельный интерфейс, который передаёт до 8 бит данных на каждый из трёх цветов (red, green, blue) для каждого пикселя. Количество бит, передаваемых в каждом такте, зависит от способа управления и количества используемых выводов. Может меняться от 16 до 18 или 24 бит. Обычно у экранов, подобных нашему, нет встроенной памяти, поэтому нужно выделять память под кадр. А ещё нужно постоянно формировать синхроимпульсы. Причём, чем больше разрешение, тем выше частота и больше необходимый объём памяти. Всё это создаёт дополнительные требования к управляющему устройству, однако позволяет передавать данные быстрее, чем с помощью микропроцессорного интерфейса. Обычно RGB интерфейс выбирают для отображения видео.

С помощью чего можно управлять такими дисплеями? Тут достаточно много вариантов:

  1. STM32 (или другие микроконтроллеры) c модулем LTDC (LCD TFT Display Controller) на борту. Как это делается хорошо описано, например, здесь. Также есть интересное видео по использованию этого модуля для управления матрицей ноутбука.

  2. STM32 (или другие микроконтроллеры) без модуля LTDC. Интересный способ описан здесь, где RGB дисплей подключается по SPI.

  3. ESP32. Описано тут.

  4. ПЛИС. Хорошо описано тут (Часть 1). Также рекомендую почитать Часть 2 и Часть 3. Ещё один пример.

  5. Малина. Об этом далее. Думаю можно подключать и к другим одноплатникам, не проверял.

  6. Графические контроллеры RA8875, SSD1963, FT800 и др. У Adafruit есть специальная плата на RA8875.

  7. Универсальный скалер. На ютубе множество видео по теме (раз, два…).

  8. Теоретически возможно использовать и контроллер, установленный в устройстве, откуда изымается экран. Например, в моём навигаторе (pioneer pa-503) установлен процессор MSB2521 и мне удалось найти документ на него. Но тратить время на изучение родного, скорее всего, малоизвестного и специализированного контроллера вряд ли кому-то будет интересно. Возможно, это бывает оправдано.

В пунктах 2 и 3 используется нестандартное включение: ограничивается глубина цвета. У такого включения масса применений — от вывода текста до отображения простых картинок, что для нетребовательных к графике конструкций очень хорошо. Для вывода графической информации можно использовать не только все возможности, которые есть в библиотеке ESP32Lib, но и все классы и графические примитивы AdafruitGFX при помощи GFXWrapper. Думаю, такой вариант может пригодиться поклонникам Ардуино и любителям Arduino IDE.

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

Решить на чём именно остановиться мне было достаточно просто: из всего перечисленного под рукой у меня была только Малина 3 В.

Подключаем наш экран к Малине 3 В.

В документации на Малину написано, что параллельный RGB интерфейс есть на всех платах с 40-выводным разъёмом и на вычислительных модулях. Он позволяет подключать к Raspberry Pi дисплеи в разных режимах: по 8 бит на цвет, по 6 бит и в режиме RGB565.

С расковыриванием экрана каких-то трудностей у меня не возникло, и справился я с этим достаточно быстро. А вот с Малиной пришлось повозиться. Наверное, из-за того, что раньше я с ней не работал и не знал некоторых тонкостей.

Важное при первом запуске Малины без монитора, клавиатуры и мыши.

Для начала нужно было записать образ системы на sd-карточку. Скачал с официального сайта Raspberry Pi Imager, выбрал и скачал систему, записал на флешку. Запускать я пробовал в «безголовом» режиме (без монитора, клавиатуры и мыши) с помощью удалённого доступа по SSH (через PuTTY). В обучающих материалах на эту тему человек просто открывал PuTTY, начинал сеанс связи, и Малина предлагала ввести логин и пароль. Я делал всё то же самое, начинал сеанс связи, но в ответ было молчание. Потом оказалось, что SSH нужно включить. Решалось это простым добавлением текстового файла с именем ssh в раздел boot. У файла нужно было удалить расширение txt. Наверное, это можно решить и простым включением ssh в настройках Raspberry Pi Imager:

44d6cc1c8f988a264ab9cf6aca0d7447.png

После добавления файлика ssh я смог, наконец, подключиться к Малине, и в терминале появилась заветная надпись «login»:

8eff639aee56684cee5d93b654505634.png

«Отлично!» — подумал я, и стал вводить логин и пароль по умолчанию (для Raspberry Pi OS это «pi» и «raspberry» соответственно). Но не тут-то было. Надпись login incorrect я видел ещё много раз. На картинке видно, что я стал пробовать логины и пароли от других операционных систем.  Пробовал записывать образы разных систем. Мне казалось, что неправильное выключение Малины как-то могло повредить данные на флешке (такое возможно).

Я никак не мог понять в чём дело. Опять же, смотрел видео, читал статьи, делал всё тоже самое. Но почему-то у авторов принимался логин и пароль, а у меня нет. Всё было намного проще. Оказывается, в новых версиях Raspberry Pi OS не создан пользователь по умолчанию. Поэтому для начала его нужно создать. Сделать это можно либо при записи образа системы (как на картинке выше), либо после (добавить username: encrypted-password в специальный файлик). Пробовал только первый вариант, который мне помог. На этом остановился, так как Малина, наконец, приняла логин и пароль. 

После того, как настроено подключение Малины к сети (удобнее через wi-fi) и включен VNC сервер (хорошо показано тут), можно начать подключение нашего экрана к выводам GPIO.

Для удобства подключения я позаимствовал с платы навигатора «запасной» разъём и сделал переходник. Переходник можно купить готовый.

76b89527d7b40d27d36ccb9db866dbe3.png

Переходную плату закрепил к панели скотчем, чтобы случайно не повредить шлейф. Подсветка питается от драйвера светодиодов, установленного на плату, которую я использую для работы с экранами от телефонов nokia и других.

4799480ecd94c1c9828da8a317823f45.png

Очень удобно питать подсветку от этой платы: схема сама повышает напряжение до нужного уровня, пока ток светодиодов не достигнет заданной величины. Ток задаётся резистором. В данном случае это 20 мА. За основу взял этот проект, поставил другой драйвер. Схема типовая из документа на микросхему.

2a0a2c80e19eaa25579bddc301f01117.png

У панелей большего размера может быть и больше 6 светодиодов или чуть другая схема их соединения (например, последовательно-параллельная). Поэтому тут нужно быть внимательным и, при необходимости, использовать другой драйвер или другой способ питания.

Подключаем наш экран согласно распиновке:

5ba704ea7589b184f6572a1c12b22637.png

Питание экрана и вывод Display_ON садим на 3,3 В, схему подсветки я запитал от +5В (не забываем и про вывод Gnd).

Настраиваем Малину для работы с экраном.

Теперь нужно поработать с файлом config.txt: отключить периферию (интерфейсы), которая использует выводы GPIO, включить параллельный RGB интерфейс и настроить его работу. Подробнее описано в документации.

Файл config.txt (Комментарии начинаются с символа »#».)

# For more options and information see

# http://rpf.io/configtxt

# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default «safe» mode

#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible

# and your display can output without overscan

disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console

# goes off screen, and negative if there is too much border

#overscan_left=16

#overscan_right=16

#overscan_top=16

#overscan_bottom=16

# uncomment to force a console size. By default it will be display’s size minus

# overscan.

#framebuffer_width=1280

#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output

#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)

#hdmi_group=1

#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in

# DMT (computer monitor) modes

#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or

# no display

#config_hdmi_boost=4

# uncomment for composite PAL

#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.

#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces

#dtparam=i2c_arm=on

#dtparam=i2s=on

#dtparam=spi=on

#Выключаем периферию

dtparam=i2c_arm=off

dtparam=spi=off

dtparam=i2s=off

#Включаем параллельный RGB интерфейс

dtoverlay=dpi24

# Настраиваем размер экрана и overscan

overscan_left=0

overscan_right=0

overscan_top=0

overscan_bottom=0

framebuffer_width=480

framebuffer_height=272

#Включаем DPI дисплей

enable_dpi_lcd=1

display_default_lcd=1

#Включаем режим, настраиваемый пользователем

dpi_group=2

dpi_mode=87

# Настраиваем hsync/vsync/clock polarity и output_format

dpi_output_format=0×117

#0000 0000 0000 0001 0001 0111=0×117

dpi_timings=480 0 15 3 3 272 0 12 2 1 0 0 0 60 0 32000000 3

# Uncomment this to enable infrared communication.

#dtoverlay=gpio-ir, gpio_pin=17

#dtoverlay=gpio-ir-tx, gpio_pin=18

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)

dtparam=audio=on

[pi4]

# Enable DRM VC4 V3D driver on top of the dispmanx display stack

#dtoverlay=vc4-fkms-v3d

max_framebuffers=2

[all]

#dtoverlay=vc4-fkms-v3d

max_framebuffers=2

Остановимся более подробно на строчке

dpi_timings=480 0 15 3 3 272 0 12 2 1 0 0 0 60 0 32000000 3

Параметры здесь такие:

#dpi_timings=

(подробнее в документации).

Сначала я пробовал запускать экран с типовыми задержками на рекомендуемой частоте 9 МГц:

dpi_timings=480 0 8 4 43 272 0 8 4 12 0 0 0 60 0 9000000 3

Задержки и значение частоты я взял из даташита на похожий экран. Ещё я сравнил задержки у нескольких похожих панелей, и они оказались очень близки друг к другу по величине, а где-то совпали.

При запуске с тактовой частотой 9 МГц картинка не появлялась. Пощупал осциллографом — импульсов clk, hsync, vsync на разъёме GPIO не было. После N неудачных попыток я вспомнил про хорошую статью, где человек также использовал параллельный интерфейс, и подумал: «Ведь у него же работало.» Не важно, что разрешение другое, я решил просто попробовать его файл config и дисплей, наконец, ожил. Картинка, естественно, была кривая, но дисплей ожил! (Уря!)

Как я потом понял, модуль управления дисплеем почему-то не запускался на частотах ниже 32 МГц. Я пробовал и 30 МГц, но всё равно импульсы не появлялись и картинки не было. Для нашего дисплея многовато, конечно, но работает. Позже у Adafruit я нашёл страничку, где описывалось как подключать их дисплеи разного разрешения к Малине. Дисплей 480×272 они так же запускали на частоте 32 МГц, хотя типовая частота для дисплеев с таким разрешением обычно около 9 МГц.

Далее были ещё попытки настройки (фото)

Как картинка должна выглядеть (видим через VNC Viewer):

098b5c11732a24bc5df04de12cb4283a.png

Другая картинка (тоже через VNC Viewer):

edf39749a6db9bef8dae1bda54d6bb52.png

Рабочий стол (также через VNC Viewer):

194bb1eb14d629bbba4f0b8e5020d780.png

Далее то, что выводилось на экран при разных настройках.

Первая картинка у меня была сдвинута в центр экрана:

9b32b5cff6d3aad5666b049aa5dd5626.png

А здесь кажется, что дисплей битый:

e4994de8b0411367527a46fe9754f017.png

Попробовал порядок BGR вместо RGB (цвета неправильные).

976e0f5abe0f7741fced80497fc3fc74.png

Изображение какое-то непонятное.

d3b62e08b7f79dfd0be8032d6271338c.png

Нарисовал в пэинте традиционную картинку, скинул на флешку, вставил в USB разъём Малины.

a601171a615e8cad0152e9f070737cb8.png

Рабочий стол на экране.

98d7d0d4b6a1e31ce77190830e7517d3.png

Наверное, для Малины лучше использовать панель с большим разрешением (например, 800×480 пикселей) — удобнее будет работать, картинка будет ещё лучше, а частота 32 МГц уже будет в диапазоне рабочих частот экрана.

Если картинка сдвинута, то нужно поиграться с шириной импульсов и параметром back porch:

b5e174f609ad8e52a693a74cbd355be0.png

Теперь по строке dpi_output_format=0×117 (#0000 0000 0000 0001 0001 0111=0×117)

Параметр dpi_output_format содержит в себе биты, которые отвечают за то или иное свойство. В документации есть описание этого параметра, но мне оно показалось неудобным для работы и не очень наглядным. Поэтому я сделал такую табличку:

759fb5c6a991fa50042aa1b6066acb5c.png

(Надеюсь, будет хорошо видно. Зато никуда не потеряется. Посоветуйте, пожалуйста, как лучше прикрепить файл к статье, чтобы не потерялся.)

Где можно найти похожие экраны?

Кроме общеизвестной торговой площадки такие дисплеи можно найти ещё и в интернет-магазинах запчастей для разной техники, причём часто по весьма интересным ценам. Например, раз, два, три…

Там же отдельно продаются и сенсорные панели.

В таких же магазинчиках можно найти и дисплеи от смартфонов с микропроцессорным интерфейсом, которые намного проще подключить даже к Ардуино (пример 1, пример 2, пример 3, …). Дисплеи с интерфейсом MIPI_DSI подключить сложнее, поэтому для первого раза лучше попробовать экран с интерфейсом 8080 или SPI. Также легче работать со шлейфом под пайку, а не с мелким разъёмом. Для начала советую посмотреть эту тему (хотя бы первых 10–20 страниц) и это замечательное видео.

В штучном количестве большие экраны с параллельным интерфейсом можно найти на барахолках (или у друзей — куда же без них) в отдельном виде или в составе каких-нибудь устройств. Например, навигаторов, планшетов, цифровых фоторамок. Но тут нужно быть внимательным, так как у TFT панелей бывает не только параллельный интерфейс, но и LVDS, и др. Хотя и такие панели тоже можно использовать.

Если у кого-то есть чем поделиться — пишите в комментариях.

Итоги

b3bd12cc13d2622e6fd19e928936ce85.png

В этот раз я показал, что не имея совершенно никакого опыта работы с дисплеями с параллельным RGB интерфейсом, возможно не только справиться с известным экраном (на который есть документ), но и провести обратную разработку неизвестного экземпляра. И успешно его оживить. Сенсорную панель я пока не подключал, но это возможно (хорошее видео по теме).

Мне показалось, что реверс-инжиниринг дисплея с параллельным RGB интерфейсом проще, чем экранов с микропроцессорным интерфейсом, который часто встречается у мобильных телефонов. В первом случае не нужно знать, где какие регистры и куда что записывать. Нужно только подобрать задержки и ширину синхроимпульса, а экран с немного неправильно подобранными задержками всё равно запустится, только картинка будет сдвинута. Это легко можно поправить. В случае с микропроцессорным интерфейсом из-за мелкой ошибки экран может вообще не запуститься, либо картинка будет неправильной. Здесь исправить что-то без документации на контроллер дисплея значительно сложнее.

Пробуйте, дерзайте, не опускайте рук при первой же неудаче — и у вас обязательно всё получится. Вот увидите. Главное — с добрыми намерениями.

Надеюсь, было интересно, и проектов с большими экранами станет больше.

Всем добра и хороших проектов.

© Habrahabr.ru