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

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

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

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

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

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

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

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

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: 0x1bff8200****
[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
0x00000000 : AD 0B 05 03 1B 1F 20 43 52 F4 FA FC E4 E0 DF BC

FMD> ReadUUIDData fail blockID(0x26).
FMD> ReadUUIDData fail blockID(0x27).
ERROR: ReadUUIDData11 failed to read the data.
0x00000000 : 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 (0x1)
[INFO]: g_EBootCfg.u8LoadDeviceOrder (0x1)
[INFO]: g_EBootCfg.u8DebugPort (0x0)
[INFO]: g_EBootCfg.u32LaunchAddress (0x80400000)
[INFO]: g_EBootCfg.u32ImageLength (0x555e08)
[INFO]: g_EBootCfg.u32ConfigFlags (0x0)
[INFO]: g_EBootCfg.u32Signature (0x20110307)
[INFO]: g_EBootCfg.u32XipSize (0x2000000)
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(0x24).
[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:

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

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

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

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

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

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

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

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

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

Питание экрана и вывод 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=0x117

#0000 0000 0000 0001 0001 0111=0x117

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=<h_active_pixels> <h_sync_polarity> <h_front_porch> <h_sync_pulse> <h_back_porch> <v_active_lines> <v_sync_polarity> <v_front_porch> <v_sync_pulse> <v_back_porch> <v_sync_offset_a> <v_sync_offset_b> <pixel_rep> <frame_rate> <interlaced> <pixel_freq> <aspect_ratio>

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

Сначала я пробовал запускать экран с типовыми задержками на рекомендуемой частоте 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):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Итоги

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

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

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

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

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

Комментарии (25)


  1. Javian
    12.09.2022 15:50
    +1

    офф В общем случае, при нынешних ценах на малину, выгоднее выглядит использовать скалер.

    Но если бы еще и сенсор прикрутить от дисплея, то всё меняется...


    1. Kopcheniy Автор
      12.09.2022 16:22

      Но если бы еще и сенсор прикрутить...

      Неужели сенсор кардинально всё меняет?


      1. Javian
        12.09.2022 20:57
        +1

        За 7" touchscreen  для RPi хотят 80 евро, за 10" - 405 евро

        Google


        1. Kopcheniy Автор
          12.09.2022 21:49

          Не уверен, что мы правильно друг друга поняли.

          Неужели сенсор кардинально всё меняет?

          Здесь я имел в виду не матрицу+сенсорную панель, а сенсорную панель отдельно.

          сенсор прикрутить от дисплея

          По этой фразе, я видимо, правильно вас понял. Но вот второе ваше сообщение немного путает. Судя по стоимости и по картинкам, там матрица+сенсорное стекло. Сенсоры тоже разные бывают - ёмкостный и резистивный.

          За 7" touchscreen  для RPi хотят 80 евро, за 10" - 405 евро

          Если искать какие-то модули под Малину или Ардуино от каких-нибудь Waveshare, Adafruit или подобных, то обычно это дороговато будет. Лучше отдельно купить дисплей, сделать плату, драйвер подсветки если нужно. То есть сделать самодельный модуль. Например (первый попавшийся), экран от Alcatel OT3041D стоит 140 рублей (если верить ссылке), а модуль с таким же разрешением (3.5", сенсорный, 480x320, емкостный, TFT) 2530 рублей. Наверное, можно найти и чуть дешевле. Но вряд ли дешевле 140 рублей. И сенсор тут резистивный. А если взять сенсор от телефона Alcatel OT3041D, то он будет ёмкостный, что лучше.

          Мне кажется, намного дешевле по деньгам найти какое-то устройство на барахолке или ещё где-то (смотря для чего нужно) и попробовать подключить матрицу и сенсор от него. Только интерфейс может быть не параллельный, а другой. Планшеты не пробовал разбирать. Может там интерфейс LVDS, может MIPI_DSI, может ещё что-то появилось. Такие матрицы тоже возможно использовать, но, на мой взгляд, несколько сложнее.

          Если я в чём-то неправильно вас понял, пишите.


          1. Kopcheniy Автор
            12.09.2022 21:55

            За 7" touchscreen  для RPi хотят 80 евро, за 10" - 405 евро

            Даже матрицу от ноутбука, наверное, намного дешевле получится приделать к Малине. Диагональ побольше, только без сенсорной панели.


          1. Javian
            12.09.2022 21:55

            "сенсор от дисплея" я имел ввиду именно тот, что уже есть в дисплее используемого в статье планшета. Мне где-то попадалась статья, в которой описывался дисплей планшета, у которого сенсор наружу выводился как HID-USB устройство четырьмя проводниками в шлейфе.


            1. Kopcheniy Автор
              13.09.2022 08:38

              Сенсор можно подключить. Если подключать экран по 24 бит, то он занимает все выводы GPIO, а сенсор можно подключить через USB или как-то ещё. В данном случае меня интересовала больше сама матрица и процесс обратной разработки.


              1. Javian
                13.09.2022 11:42

                Добавление сенсора превращает устройство в интерактивное, а не просто в телевизор, для чего хватило бы скалера. А так комплектов экранов с тачскринами от убитых и устаревших планшетов и телефонов всё больше, то эта статья очень своевременна и полезна. Хотелось бы больше проектов, которые бы сделали бы такое переиспользование экранов таким же обычным как использования в проектах модулей Nokia 5110 LCD или 1602.


                1. Kopcheniy Автор
                  13.09.2022 17:07

                  Да, пожалуй, с сенсором лучше. Но не делал его, ещё и потому, что у подключался к Малине с ноутбука через SSH по wi-fi.

                  Хотелось бы больше проектов

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


    1. Hait
      12.09.2022 17:49
      +3

      Что такое скалер?


      1. Kopcheniy Автор
        12.09.2022 17:58

        На ютубе множество видео по теме (раздва...).

        Предлагаю для начала посмотреть. Если останутся вопросы - пишите.


        1. Kopcheniy Автор
          12.09.2022 18:26
          +1

          Вот ещё неплохая статья про универсальный скалер.


        1. Hait
          12.09.2022 20:13

          Спасибо. Глаз не зацепился в статье, пытался в гугле найти - там мед прибор был.


      1. Javian
        12.09.2022 20:45
        +2

        На 4pda есть тема по подключению матриц к скалерам - Вторая жизнь ЖК дисплеев и мониторов


        1. Kopcheniy Автор
          13.09.2022 09:30

          Интересная ссылка, благодарю.


      1. Sau
        13.09.2022 09:43

        Скалер - часть контроллера дисплея, которая отвечает за масштабирование изображения. Иногда скалером назвают весь контроллер дисплея.

        Цитата с 4pda с примером работы:

        <...> мы подаем на вход горизонталь 1920 пикс, а контроллер выводит на матрицу (из примера) 1280 пикс. Что останется на вертикаль - все пропорционально, т.е. будут сверху и снизу черные полосы. За этот процесс отвечает скалер (в правильном смысле этого слова) контроллера.


        1. Kopcheniy Автор
          13.09.2022 10:17

          По ссылке, которую дал @Javianвыше, хорошее описание в самом начале.


  1. Terimoun
    12.09.2022 16:41

    Можно укоротить


  1. Crazy_Driver
    12.09.2022 18:27
    +3

    Есть надежда увидеть статью про действительно большие дисплеи?

    В кладовке лежат малинка и 32" LCD телевизор Samsung с погибшей материнкой, очень хотелось бы их подружить.


    1. Kopcheniy Автор
      12.09.2022 19:23
      +1

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

      В данной публикации упоминал статью, где человек подключал к Малине второй монитор через GPIO (DPI24) Малины. Сигналы DPI интерфейса захватывались и преобразовывались в сигналы HDMI. Думаю, что подобным образом возможно преобразовать сигналы с Малины в нужный интерфейс и состыковать с панелью от телевизора. Интерфейс будет определяться тем, куда именно пристыковывать.

      Пока не проверял, но видится технически возможным подсоединить к Малине через порт GPIO LVDS матрицу, например, от ноутбука (это уже 15.6" или 17.3"). Преобразовать параллельный интерфейс в LVDS c помощью ПЛИС или специальной микросхемы.

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

      У меня телевизора в кладовке нет) А если бы был, может и попробовал бы. В любом случае не выбрасывал бы.


    1. ciuafm
      13.09.2022 16:02

      На алиэкспрессе продаются универсальные майнборды. Позволяют подключать lvds панели к VGA - $4 или HDMI - $12. Если матрица eDP, можно на коленке спаять механический переходник на DP. Если нужны подробности - обращайтесь.

      Насчёт софт эмуляции lvds или eDP с помощью GPIO Малинки - забудьте. Это примерно 85-й уровень схемотехники и без ПЛИСов вы не обойдетесь.


      1. Kopcheniy Автор
        13.09.2022 16:55

        универсальные майнборды

        Вы про контроллеры (скалеры) ?

        софт эмуляции lvds или eDP с помощью GPIO Малинки

        Имелось в виду, что микросхема сама преобразует параллельный RGB интерфейс в LVDS. Эту работу делает железо, без софта.

        Блок-схема микросхемы


  1. iamkisly
    13.09.2022 09:56

    Благодарю! Как раз такой же навигатор валяется. Один раз зарядил, так он всю ночь пугал домочадцев леденящим душу женским голосом "батарея разряжена".


    1. Kopcheniy Автор
      13.09.2022 10:01

      Будет радостно, если вам поможет.) Отключили бы динамик. Новый, так ни разу и не попользовались?

      Точно такой же модели?


  1. Crimento
    13.09.2022 14:19

    Где-то валялась такая штука, купленная отцом, когда я был еще школьником :) интересно, что Pioneer ничего такого и не выпускал и это просто китайский бутлег вроде Nokia N99 с телевизором.

    Одним из главных детекторов для таких подделок был шрифт Batang, кириллица на котором выглядит просто отвратительно