реклама на сайте
подробности

 
 
8 страниц V  « < 4 5 6 7 8 >  
Reply to this topicStart new topic
> 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?, Не получается подключить разрешение 720p
aaarrr
сообщение Oct 25 2017, 23:59
Сообщение #76


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Огурцов @ Oct 26 2017, 02:54) *
не, а такое прокатит ?

А что, кто-то запрещает?

Цитата(Огурцов @ Oct 26 2017, 02:54) *
и кто придумал этот must have ? если даже spi не гнушаются предлагать

Так требования рынка. 256 цветов могут долго существовать только в условиях плановой экономики.
SPI для всякой ерунды типа 128x64.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 26 2017, 00:26
Сообщение #77


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(aaarrr @ Oct 26 2017, 00:59) *
А что, кто-то запрещает?

привычка, для тв-сигнала не приемлемо

Цитата(aaarrr @ Oct 26 2017, 00:59) *
256 цветов

я не говорил про 256 цветов, а про 24 бита говорил
прозрачность как бы не сильно нужна, но она требуется для выравнивания размера пикселя на 4 байта


Сообщение отредактировал Огурцов - Oct 26 2017, 00:29
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 26 2017, 00:46
Сообщение #78


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Огурцов @ Oct 26 2017, 03:26) *
я не говорил про 256 цветов, а про 24 бита говорил

1280x1024 24bpp во времена первых пентиумов? Не было такого в массовом сегменте.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 26 2017, 01:14
Сообщение #79


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(aaarrr @ Oct 26 2017, 01:46) *
1280x1024 24bpp во времена первых пентиумов? Не было такого в массовом сегменте.

правильно, но вы смешиваете разные посты - 480x272 в 10 раз меньше, чем 1280x1024
и даже если взять 640x480, всё равно остаётся запас
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 26 2017, 01:32
Сообщение #80


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вот 480x272, пожалуй, еще как-то можно окучивать STM. А выше забираться я бы не стал.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 26 2017, 05:51
Сообщение #81


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(aaarrr @ Oct 26 2017, 02:59) *
SPI для всякой ерунды типа 128x64.

Хм... у меня сейчас вполне себе нормально работает LCD по SPI на 320x240x16bpp. 3D-шутеры на нём показывать не надо.
Вся динамическая информация отображается вполне бодро: всякие счётчики (текстовые отображения меняющихся чисел) на экране бегут очень даже шустро.
Конечно, если бы в этом LCD (и МК) был quad-SPI (или LCD по интерфейсу поддерживал бы режимы с меньшей разрядностью цвета) - было бы вообще за глаза. На quad-SPI и в 2 раза больший экран нормально пойдёт.

Цитата(aaarrr @ Oct 26 2017, 04:32) *
Вот 480x272, пожалуй, еще как-то можно окучивать STM. А выше забираться я бы не стал.

По какому интерфейсу? Параллельному? По параллельному STM32 должен много больше нормально обслуживать. Ну если руки конечно прямые rolleyes.gif
У меня сейчас работает проектик:
По SPI идёт 320x240x16bpp на SCLK=40МГц, параллельно этот же CPU декодирует MP3 на 320кб/c, парсит поток с ESP8266 (WiFi) и ещё много чего успевает. На экране в это время бегут несколько быстро меняющихся счётчиков, процедура отрисовки пока построена неоптимально - при каждом изменении видеобуфер стирается полностью, потом строится новый кадр заново (затем отправляется на LCD) - поэтому при любой модификации на экране контроллеру LCD отправляются все пикселы 320x240. При всём при этом загрузка процессора составляет ~55%. И частота МК не максимальная == 160МГц. И измерено это на исходнике скомпилённом с Low оптимизацией (IAR) выполняющемся из RAM/SDRAM.

Если-б этот МК (и контроллер ILI9341) имели dual- или quad-SPI была-бы вообще красота. cool.gif
Go to the top of the page
 
+Quote Post
Шаманъ
сообщение Oct 26 2017, 06:51
Сообщение #82


Знающий
****

Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839



Цитата(aaarrr @ Oct 26 2017, 02:40) *
В те блаженные времена никто особо не жаловался на отсутствие альфа-канала, скоростной анимации на весь экран и прочих современных must have плюшек.

Цитата(aaarrr @ Oct 26 2017, 04:32) *
Вот 480x272, пожалуй, еще как-то можно окучивать STM. А выше забираться я бы не стал.

У меня на экране 800х480х16бит крутится можно сказать анимация почти на весь экран с несколькими слоями прозрачности. Перерисовка всего кадра занимает от 10 до 30мс при одновременном выводе с частотой кадров около 29к/с. Загрузка процессора при этом от 5 до 14% (процессор параллельно занят разными своими делами - вычислениями БПФ, фильтрацией сигнала, обслуживанием подключенных к нему устройств, USB, запись/чтение с SD карты и т.д). Наверное я что-то делаю не так, но меня полностью устраивает в этом плане stm32 laughing.gif

Как по мне, то 800х480х16бит без проблем вообще, 1024х600х16бит наверное рубеж, для большего нужно как минимум перейти на 32битную SDRAM либо на другую платформу.

Цитата(Огурцов @ Oct 26 2017, 02:15) *
можете привести пример ?

Все просто - в регистр смещения до следующей линии (OOR/BGOR) записываете смещение до следующей точки/штриха от окончания нарисованного элемента, размер по горизонтали устанавливаете равным длине штриха (или в 1 если точки рисуете), кол-во линий (размер по вертикали) равным кол-ву точек/штрихов в линии, вот собственно и все.
Например, линия 3 точки рисуем, потом 5 точек пропускаем, общая длина 80 точек:
Код
   int m = 3; //Кол-во точек которые рисуем
   int s = 5; //Кол-во точек которые пропускаем
   int l = 80; //Длина линии
  
   DMA2D->OOR = s;
   DMA2D->NLR = DMA2D_NLR_PL_0 * m + DMA2D_NLR_NL_0 * (l/(m+s));

Остальное инициализируете, как обычно при рисовании, например, прямоугольника. Если нужна прозрачность, то регистр BGOR инициализируете так же, как OOR.
Код
   DMA2D->BGOR = s;


Цитата
или какое поле нужно заполнить в структуре DMA2D_InitTypeDef чтобы нарисовать горизонтальную линию точками ?

HALом не пользуюсь, поэтому что там в структурах надо инициализировать не подскажу.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 26 2017, 09:16
Сообщение #83


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Шаманъ @ Oct 26 2017, 06:51) *
DMA2D->OOR = s;
DMA2D->NLR = DMA2D_NLR_PL_0 * m + DMA2D_NLR_NL_0 * (l/(m+s));

ок, надо перевести на нормальный язык
а почему так нельзя рисовать прямоугольники ? вроде самое оно, если ширина регистра позволяет

Цитата(Шаманъ @ Oct 26 2017, 06:51) *
HALом не пользуюсь

я тоже

олл, почему дисплей подёргивается, когда dma2d работает ? т.е. картинка как бы сдвигается в сторону
это синхра слетает или что, или это нормально, куда копать ?


Цитата(aaarrr @ Oct 26 2017, 01:32) *
Вот 480x272, пожалуй, еще как-то можно окучивать STM. А выше забираться я бы не стал.

800x600 считается нормально, т.е. 2x640x480 обязано работать
а больше вроде бы как и не надо
т.е. надо, но уже как-то иначе и это будет уже совсем другая история

Сообщение отредактировал Огурцов - Oct 26 2017, 09:21
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 26 2017, 09:19
Сообщение #84


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(jcxz @ Oct 26 2017, 08:51) *
По SPI идёт 320x240x16bpp на SCLK=40МГц...

320 * 240 * 16 / 40M = 30.72 мс = 32.55 к/с

Цитата(Шаманъ @ Oct 26 2017, 09:51) *
Перерисовка всего кадра занимает от 10 до 30мс при одновременном выводе с частотой кадров около 29 к/с.


Ну вот, а у нормального UI перерисовка не должна занимать больше 16 мс (т.е. обеспечивать 60 к/с), иначе плавной анимации не будет по определению.
Да, TFT-экран, конечно, надо обслуживать с частотой 60, а не 30. Даташит позволяет, но пользователей тоже надо уважать.
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Oct 26 2017, 10:21
Сообщение #85


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369



Цитата(Шаманъ @ Oct 25 2017, 16:28) *
Например, можно нарисовать горизонтальную линию, но не прямоугольник.

Прямоугольник рисовать можно, Пример:

Цитата(Sanya_kv @ Oct 9 2017, 18:52) *
CODE

void LCD_DRV_DrawFillRectAlpha(uint32_t LayerAddr, uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t ColorRGB888, uint8_t Alpha)
{
if (y0 > y1)
{
uint16_t bak;
bak = y1;
y1 = y0;
y0 = bak;
}
if (x0 > x1)
{
uint16_t bak;
bak = x1;
x1 = x0;
x0 = bak;
}
uint16_t Width = x1 - x0;
uint16_t Height = y1 - y0;
#if (LCD_PIXEL_BYTES == 2)
uint32_t Xaddress = LayerAddr + 2*(LCD_DRV_GetXSize()*y0 + x0);
#else
uint32_t Xaddress = LayerAddr + 4*(LCD_DRV_GetXSize()*y0 + x0);
#endif

LCD_DRV_LL_DMA2D_FillBufferAlphaColor(Xaddress, Width, Height, (LCD_DRV_GetXSize() - Width), DMA2D_OUTPUT_RGB565, ColorRGB888, Alpha, true);
}
//=============== Заполнить область цветом с коэффициентом прозрачности ========
void LCD_DRV_LL_DMA2D_FillBufferAlphaColor(uint32_t BufferAddr, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t OutputColorMode, uint32_t ColorRGB888, uint8_t Alpha, uint8_t wait)
{
LCD_DRV_DMA2D_WaitEND();//Дождаться конца выполнения предыдущего вывода
// Замешивание
MODIFY_REG(DMA2D->CR, DMA2D_CR_MODE, DMA2D_M2M_BLEND);

//Конфигурация переднего плана
DMA2D->FGPFCCR = (DMA2D_FGPFCCR_CM & DMA2D_INPUT_A8)// Формат цвета
|(DMA2D_FGPFCCR_AM & (1 << DMA2D_FGPFCCR_AM_Pos))//Замена альфа канала
|(DMA2D_FGPFCCR_ALPHA & (Alpha << DMA2D_FGPFCCR_ALPHA_Pos));//Алфа канал

DMA2D->FGCOLR = ColorRGB888;
DMA2D->FGMAR = BufferAddr;
DMA2D->FGOR = OffLine;

//Конфигурация заднего плана
DMA2D->BGPFCCR = DMA2D_BGPFCCR_CM & OutputColorMode;// Формат цвета

DMA2D->BGMAR = BufferAddr;
DMA2D->BGOR = OffLine;


//Выходной буфер
// Формат цвета
DMA2D->OPFCCR = DMA2D_OPFCCR_CM & OutputColorMode;

DMA2D->OMAR = BufferAddr;//адрес буфера для заполнения
DMA2D->OOR = OffLine; // установка смещения (xSize + OffLine = LayerXSize)

// установка количества пикселей на линию и количество линий
DMA2D->NLR = (DMA2D_NLR_NL|DMA2D_NLR_PL) & (ySize| (xSize << DMA2D_NLR_PL_Pos));

//Запуск
DMA2D->CR |= DMA2D_CR_START;

if(wait)LCD_DRV_DMA2D_WaitEND();
}



Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 26 2017, 10:27
Сообщение #86


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(aaarrr @ Oct 26 2017, 12:19) *
Ну вот, а у нормального UI перерисовка не должна занимать больше 16 мс (т.е. обеспечивать 60 к/с), иначе плавной анимации не будет по определению.
Да, TFT-экран, конечно, надо обслуживать с частотой 60, а не 30. Даташит позволяет, но пользователей тоже надо уважать.

У меня в UI есть бегущие строки - на глаз бегут вполне плавно. Так что FPS==30Гц - вполне ок. Тащить 8+ проводов только на LCD - сильно накладно.
В планах есть модификация всего алгоритма отрисовки UI (чтобы при изменении одного элемента только он перерисовывался, а не весь экран).
Это позволит пересылать на LCD не весь экран, а только минимальный прямоугольник, охватывающий изменения (ILI9341 позволяет и моя граф.либа позволяет) и поднять средний FPS.
Но потребуется сильно усложнить весь алгоритм отрисовки UI. Не уверен, что это усложнение реально нужно.
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Oct 26 2017, 10:31
Сообщение #87


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369



Цитата(Огурцов @ Oct 26 2017, 13:16) *
олл, почему дисплей подёргивается, когда dma2d работает ? т.е. картинка как бы сдвигается в сторону
это синхра слетает или что, или это нормально, куда копать ?

Причин может быть 2:
Либо у Вас высокая частота вывода, медленная память, 16 бит память. Или Вы выводите картинку и рисуете её в одном буфере.

На 32 битной памяти (в 32F769IDISCOVERY) без проблем выводится разрешение 1280х800 RGB565 1 слой 42 гц. С помощью DMA2d вывожу анимацию частотой 42 гц.
После того как разобрался с DMA2d, во втором слое не вижу необходимости.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 26 2017, 10:54
Сообщение #88


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(jcxz @ Oct 26 2017, 13:27) *
У меня в UI есть бегущие строки - на глаз бегут вполне плавно. Так что FPS==30Гц - вполне ок.

Так-таки и ок?

ИМХО, когда дело касается UI, нельзя идти на компромиссы. Производительности должно не просто хватать, она должна в разы перекрывать потребности. Тогда можно работать.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 26 2017, 11:19
Сообщение #89


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Sanya_kv @ Oct 26 2017, 11:31) *
Или Вы выводите картинку и рисуете её в одном буфере.

да, в одном, а какая разница, где я её рисую ? если бы она просто мерцала на месте перерисовки, я бы даже не спрашивал, но она куда-то улетает - каков механизм этого ?


Цитата(aaarrr @ Oct 26 2017, 11:54) *
ИМХО, когда дело касается UI, нельзя идти на компромиссы

вся электроника - это сплошные компромиссы

Сообщение отредактировал Огурцов - Oct 26 2017, 11:20
Go to the top of the page
 
+Quote Post
Sanya_kv
сообщение Oct 26 2017, 11:21
Сообщение #90


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369



Цитата(Огурцов @ Oct 26 2017, 15:19) *
да, в одном, а какая разница, где я её рисую ? если бы она просто мерцала, я бы даже не спрашивал, но она куда-то улетает - каков механизм этого ?

Попробуйте понизить частоту вывода.
Go to the top of the page
 
+Quote Post

8 страниц V  « < 4 5 6 7 8 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01507 секунд с 7
ELECTRONIX ©2004-2016