ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: Дисплей 800x480 в pxa270  (Прочитано 10492 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

KDM

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 46
Дисплей 800x480 в pxa270
« : 12 Марта, 2013, 18:31:02 »

Для поддержки дисплея MTF-TW70SP941 с разрешением 800x480 в одновременной работой VGA добавил в файл linux-2.6.22.19/arch/arm/mach-pxa/tion270.c следующий код:
static struct pxafb_mode_info display_mode_vga_800x480=
{
   .pixclock   = 34331,
   .xres      = 800,
   .yres      = 480,
   .bpp      = 18,
   .nonstd      = 24,
   .hsync_len   = 40,
   .left_margin   = 80,
   .right_margin   = 10,
   .vsync_len   = 2,
   .upper_margin   = 40,
   .lower_margin   = 0,
};

...
else if (NULL != strstr(pos, "vga-800x480"))
{
   tion270_pxafb_info.modes = &display_mode_vga_800x480;
   pxa_gpio_set_value(GPIO_VGA_POWER_ENA, 1);
   use_vga_power_ena = 1;
   tion270_pxafb_info.lccr3 |= LCCR3_PixRsEdg;
}


На загрузку указал video=pxafb:tag=vga-800x480:bpp=16.
Вроде бы работает, но немного коряво. Особенно заметно по краям (границы цветов, края шрифтов и т.д.). Как на обычном дисплее (пиксели неправильного цвета), так и на vga (помаргивание пикселей). Есть такое впечатление что не совсем верно выбраны какие-то параметры.

С параметрами (.xres = 800, .yres = 480, .bpp = 18, .nonstd = 24, ) все вроде бы понятно.
С параметры ( .hsync_len = 40, .left_margin = 80, .right_margin = 10, .vsync_len = 2, .upper_margin = 40, .lower_margin = 0,) уже сложнее. Дисплей LCD 7" на них не реагирует. Так что подбирал так, чтобы VGA мог с помощью автоподстройки захватить всю область экрана.
Параметр (.pixclock = 34331), рассчитывал по формуле из http://arm.mini-box.com/index.php?title=Linux_LCD_timing_handling_and_interfacing , с учетом #define KHZ2PICOS(a) (1000000000UL/(a))
.


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

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Дисплей 800x480 в pxa270
« Ответ #1 : 12 Марта, 2013, 18:44:54 »

> Особенно заметно по краям (границы цветов, края шрифтов и т.д.)

Попробуйте поменять полярность pixclock.
Записан

KDM

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 46
Re: Дисплей 800x480 в pxa270
« Ответ #2 : 13 Марта, 2013, 11:42:33 »

Спасибо за наводку.
Изменил tion270_pxafb_info.lccr3 |= LCCR3_PixFlEdg;

Монитор MTF-TW70SP941 работает без искажений (сейчас буду еще проверять как он засыпает при простое - раньше "выцветал" бурыми и белыми пятнами). С VGA ситуация улучшилась примерно на 60%.
Записан

KDM

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 46
Re: Дисплей 800x480 в pxa270
« Ответ #3 : 13 Марта, 2013, 12:04:48 »

Да, проблема с засыпанием дисплея осталась.

При простое сначала экран начинает неравномерно заполняться белым цветом (до полной белой картинки на дисплее). Затем белый цвет исчезает (опять же неравномерно по области экрана), в бурых оттенках проявляется картинка и затем сводится к черному экрану. Весь процесс занимает секунд 10.

Таким образом, сейчас еще остались 2 недочета:
- помаргивание пикселей на экране VGA (тоже на границах, LCCR3_PixFlEdg ситуацию улучшило, но не до конца);
- некорректное засыпание MTF-TW70SP941.


Если сталкивались с такими проблемами или знаете, куда копать, подскажите, пожалуйста.
« Последнее редактирование: 13 Марта, 2013, 12:16:29 от KDM »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Дисплей 800x480 в pxa270
« Ответ #4 : 13 Марта, 2013, 12:19:20 »

>- некорректное засыпание MTF-TW70SP941.
> раньше "выцветал" бурыми и белыми пятнами

Эти картинки у каждого дисплея по-разному, если нет сигнала.

Надо отключать подсветку и (если требуется для экономии энергии) всё питание дисплея, при включении нужна задержка после подачи питания дисплея до включения подсветки. С подсветкой всё должно быть "нормально", если для неё используется сигнал PWM0 (сейчас 50% ШИМ при работе и 0% при отключении дисплея). Для управления питанием дисплея в Тион-Про270 rev.2 будем использовать GPIO44 (ранее не выведанное на Тион-Про270 rev.1).

> - помаргивание пикселей на экране VGA;

Одновременно (на одних и тех же настройках контроллера) и дисплей, и экран VGA нормально могут и не работать. Если проблема мигающих пикселей на VGA решается инвертированием pixclock, то на адаптер к дисплею можно поставить быстродействующий инвертор на pixclock. Или одновременная работа дисплея и экрана VGA не требуется?
Записан

KDM

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 46
Re: Дисплей 800x480 в pxa270
« Ответ #5 : 13 Марта, 2013, 14:06:21 »

>> Эти картинки у каждого дисплея по-разному, если нет сигнала.
>> Надо отключать подсветку и (если требуется для экономии энергии) всё питание дисплея,
>> при включении нужна задержка после подачи питания дисплея до включения подсветки.
>> С подсветкой всё должно быть "нормально", если для неё используется сигнал PWM0
PWM0 не используется, но на Тион270 есть BL_ON (GPIO_81).
Сейчас вход дисплея "управление подсветкой" соединен с +3.3В. То есть подсветка включена всегда. Причина некорректного засыпания кроется в этом? Если да, то можно
а) либо просто отключить засыпание (перемычка J37 на Сириус270 переставить в положение 2-3 [правильно понимаю?]);
б) либо завести сигнал BL_ON с разъема Сириус270 J42 [этого достаточно ?].
В целом, прибор пока что относится к разряду "стационарных", поэтому потребление питания не так критично (вполне устроит вариант "а"). А возможность отключения подсветки желательно предусмотреть на будущее (если вариант "б" работает - проверить и пока что забыть, если нет - то...).

>> Или одновременная работа дисплея и экрана VGA не требуется?
Сейчас VGA-800x480 нужен для отладки (гораздо удобнее работать с большим дисплеем). Но я уже предчувствую, что на какую-нибудь выставку попросят сделать конфиг для одновременной работы и VGA, и 7".
Для работы 7" конфиг сделан - конечный вариант для прибора.
Для работы VGA конфиг сделан на 80% - работает, видно, но глаза режет. А глаза портить неохота. Очень. Да и некрасиво. Если удастся настроить его малой кровью - здорово.
Рабочий конфиг для VGA И 7" сделан на те же 80%. Но пока что это скорее "приятное дополнение".

>> Одновременно (на одних и тех же настройках контроллера) и дисплей, и экран VGA нормально могут и не работать.
Угу, особенно с учетом того что строго говоря, дисплей VGA 1920x1080. А MTF-TW70SP941 800x480.
Если настроить это очень сложно, что эту задачу можно закрыть.

>> Если проблема мигающих пикселей на VGA решается инвертированием pixclock
Это помогло для дисплея MTF-TW70SP941 и полностью устранило там "битые" пиксели. На VGA лишь подправило картину ( исчезли тени, но помаргивание осталось).
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Дисплей 800x480 в pxa270
« Ответ #6 : 13 Марта, 2013, 14:42:19 »

> Причина некорректного засыпания

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

> а) либо просто отключить засыпание (перемычка J37 на Сириус270 переставить в положение 2-3 [правильно понимаю?]);

Эта перемычка дисплею не поможет. Если вы хотите отключить "засыпание" дисплея, то см.
www.zao-zeo.ru/dokuwiki/doku.php/linux#дисплей

Эту команду можно разместить в /etc/init.d
В http://zao-zeo.ru/media/files/linux/buildroot-2009.08.git скрипт есть в local/stuff/S60disable-console-sleep

> б) либо завести сигнал BL_ON с разъема Сириус270 J42 [этого достаточно ?]

Да, с указанным вами ранее кодом в arch/arm/mach-pxa/tion270.c
  use_vga_power_ena = 1;
  pxa_gpio_set_value(GPIO_VGA_POWER_ENA, 1);

> дисплей VGA 1920x1080. А MTF-TW70SP941 800x480

Если дисплей VGA будет показывать 800x480 и с таймингами для MTF-TW70SP941. PXA270 может максимум 1024x1024.
Записан

KDM

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 46
Re: Дисплей 800x480 в pxa270
« Ответ #7 : 13 Марта, 2013, 17:58:33 »

>> Эту команду можно разместить в /etc/init.d
>> скрипт есть в local/stuff/S60disable-console-sleep
Время специально не засекал, но спустя минут 10 дисплеи все равно заснули.
Update: засек  = 15 минут после запуска программы (запускалась из отладочного терминала).

При случае попробую потестировать и реакцию на BL_ON . Исходя из предыдущего сообщения,
 use_vga_power_ena = 1;
  pxa_gpio_set_value(GPIO_VGA_POWER_ENA, 1);

при этом обязательно?


Кстати говоря, http://www.zao-zeo.ru/forum/index.php?topic=634.msg3330#msg3330
>> >> Но постоянно выдает tslib: Unknown event type 0
>> Это ничего.
Проблема так и не решилась? Тестировал и на 5.7", 7", да и на 8" помнится наблюдалось. Чем неприятно: если взять ts_test и в режиме Draw попробовать нарисовать линию, то ничего путного из этого не выйдет: курсор при tslib: Unknown event type 0 постоянно улетает на границы экрана (причем все время в разных направлениях: 0' , 90' , 180' , 270').
« Последнее редактирование: 13 Марта, 2013, 18:15:35 от KDM »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Дисплей 800x480 в pxa270
« Ответ #8 : 13 Марта, 2013, 19:08:51 »

> Время специально не засекал, но спустя минут 10 дисплеи все равно заснули.
> Update: засек  = 15 минут после запуска программы (запускалась из
> отладочного терминала).

Может быть у вас графическая программа не на tty0, попробуйте tty (для всех)
(что-то происходит с консолью на ttyS0) или tty1.


> При случае попробую потестировать и реакцию на BL_ON . Исходя из
> предыдущего сообщения, use_vga_power_ena = 1;
> pxa_gpio_set_value(GPIO_VGA_POWER_ENA, 1);
> при этом обязательно?

Да.


> Проблема так и не решилась? Тестировал и на 5.7", 7", да и на 8" помнится
> наблюдалось. Чем неприятно: если взять ts_test и в режиме Draw попробовать
> нарисовать линию, то ничего путного из этого не выйдет: курсор при tslib:
> Unknown event type 0 постоянно улетает на границы экрана (причем все время
> в разных направлениях: 0' , 90' , 180' , 270').

Вы калибровку делаете?

Должна быть решена в http://zao-zeo.ru/media/files/linux/buildroot-2009.08.git
(с event type 0 не связано, проблема была в
package/tslib/tslib-1.0-absbit.patch)
« Последнее редактирование: 13 Марта, 2013, 19:19:38 от asv »
Записан

KDM

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 46
Re: Дисплей 800x480 в pxa270
« Ответ #9 : 14 Марта, 2013, 11:13:41 »

>> Должна быть решена в (с event type 0 не связано, проблема была в package/tslib/tslib-1.0-absbit.patch)
Спасибо, в новой версии проблема отсутствует.

>> Может быть у вас графическая программа не на tty0, попробуйте tty (для всех)
>> (что-то происходит с консолью на ttyS0) или tty1.
Боюсь моего уровня знаний недостаточно чтобы ответить на этот вопрос.
Детальная информация:
- программа запускалась из отладочного терминала ( console=ttyS0,115200 ), была завершена, спустя 15 минут дисплей заснул.
- содержимое inittab:
# Set up a couple of getty's #Закомментирован оригинал, отменен логин на основной консоли
#tty1::respawn:/sbin/getty 38400 tty1
#tty2::respawn:/sbin/getty 38400 tty2
tty1::respawn:/sbin/getty -n -l/bin/sh -L tty1 38400 vt100 # GENERIC_SERIAL
tty2::respawn:/sbin/getty -n -l/bin/sh -L tty2 38400 vt100 # GENERIC_SERIAL
# Put a getty on the serial port
ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Дисплей 800x480 в pxa270
« Ответ #10 : 14 Марта, 2013, 11:33:35 »

- программа запускалась из отладочного терминала ( console=ttyS0,115200 ), была завершена, спустя 15 минут дисплей заснул.
- содержимое inittab:
tty1::respawn:/sbin/getty -n -l/bin/sh -L tty1 38400 vt100 # GENERIC_SERIAL
tty2::respawn:/sbin/getty -n -l/bin/sh -L tty2 38400 vt100 # GENERIC_SERIAL

Сделайте
echo -en "\033[9;0]" > /dev/tty1
echo -en "\033[9;0]" > /dev/tty2

В S60disable-console-sleep делается только для tty0

Я вчера проверил (без графической программы, может быть Qt что-то само делает с tty), засыпание экрана отключается (консоль с пингвином отображалась более часа).
Записан

KDM

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 46
Re: Дисплей 800x480 в pxa270
« Ответ #11 : 14 Марта, 2013, 12:51:38 »

Добавил в S60disable-console-sleep
echo -en "\033[9;0]" > /dev/tty1
echo -en "\033[9;0]" > /dev/tty2

Перезагрузился.
Не засыпает уже 28 минут во время работы программы. Не засыпает уже 20 минут после завершения программы.
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Дисплей 800x480 в pxa270
« Ответ #12 : 14 Марта, 2013, 13:04:26 »

> Не засыпает уже 28 минут во время работы

Теперь надо думать про скринсейвер.
Записан

KDM

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 46
Re: Дисплей 800x480 в pxa270
« Ответ #13 : 14 Марта, 2013, 13:15:35 »

>> Теперь надо думать про скринсейвер.
Если бы он существовал, пришлось бы думать как его убрать :)
Записан