0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
1

STM32F103 + TFT 240x320 + SD = медленный вывод картинок

31.07.2013, 02:04. Показов 85954. Ответов 137
Метки нет (Все метки)

Есть МК STM32F103VCT6, к нему при помощи FSMC подключен TFT дисплей 240х320 и SD карта по SPI. На этот самый дисплей выводятся картинки. При выводе из внутренней памяти МК на глаз задержка не заметна, а вот при чтении с SD карты, картинка 320х200 выводится около 1,5 сек. При этом задержка заметна даже на маленьких картинках 100х100, а от "веса" изображения вообще не зависит. Картинки в формате JPG. Для декодирования использую библиотеку от Чена. Для работы с SD картой - FstFs. Как я понял, после декодирования получается готовый массив для вывода, почему тогда такой медленный вывод? Или я что-то недопонимаю? В чем может быть проблема?

Да, еще заметил, что если выводить попиксельно:

Код
void point(uint16_t x, uint16_t y, uint16_t color)
{
LCD_SetCursor(y, 319-x);
LCD_WriteROM_Prepare();
LCD_WriteROM(color);
}
картинка выглядит нормально, а если через функцию вывода изображений, с предварительной подготовкой окна для вывода:
Код
void LCD_WriteBMP ( uint16_t x1, uint8_t y1, uint16_t Width, uint8_t Height, uint16_t *bitmap)
{
uint32_t index, size;
uint16_t *bitmap_ptr = (uint16_t *)bitmap;
uint16_t x2, y2;

y2 = y1 + Height;
x2 = 319 - x1 + Width;

LCD_SetDysplayWymdow ( 319 - x1, y1, x2, y2 );

LCD_WriteROM_Prepare ( );

size = Height * Width - 1;

for ( index = 0; index < size; index ++ )
LCD_WriteROM ( bitmap_ptr [ index ] );

LCD_SetDysplayWymdow ( 0, 0, 319, 239 );
}

void LCD_SetDysplayWymdow(uint16_t Ypos, uint16_t Xpos, uint16_t Width, uint8_t Height)
{
Height --;
Width --;

LCD_WriteReg ( 0x44, ( Height << 8 ) | Xpos );
LCD_WriteReg ( 0x45, Ypos );            // Vertical ROM address stort position
LCD_WriteReg ( 0x46, Width );   // Vertical ROM address end position

LCD_WriteReg ( 0x4e, Xpos );            // Set GDDROM X   address counter
LCD_WriteReg ( 0x4f, Ypos );            // Set GDDROM Y   address counter
}
то изображение разделено на маленькие квадратики с расстоянием 1 пиксель.

[11.16 Кб]
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2013, 02:04
Ответы с готовыми решениями:

Вывод текста на tft.lcd 2.4
Привет, ребят :) Такая проблемка, имеется мега с дисплеем tft.lcd 2.4 с библиотекой Adafruit, на...

Медленный ввод в текстовые поля / медленный отклик в google chrome?
Привет! Может кто знает, Сегодня заметил, что ввод текста в браузере chrome стал очень...

Вывод информации на TFT через SPI
Всем доброго дня. Помогите с выводом информации на TFT-экран (в моем случае на ILI9341 1,8 дюйма). ...

Демодулятор SSB сигнала и вывод панорамы на TFT
Здравствуйте! Есть огромное желание сделать панораму для трансивера .Т.е. Использую STM32F429. С...

137
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 241
31.07.2013, 07:54 2
Для работы с картой лучше использовать SDIO. Будет быстрее выводится. Но для JPG не настолько быстро чтобы совсем не заметить отрисовку.
0
2 / 2 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
31.07.2013, 10:12 3
Цитата Сообщение от BORS_
изображение разделено на маленькие квадратики с расстоянием 1 пиксель.
Была такая же беда. Вы, видимо, неправильно задаёте окно дисплею.

Насчёт скорости - по-моему Ваша SD карта на SPI не тянет, либо плохо написано.
У меня F407 (плата F4Dyscovery), я тяну картинки с обычной USB флэшки (407 такое умеет) - картинка 320x240 выводится на глаз где-то за 0.5 сек. По таймеру не засекал.
Если хотите, положу свой пример на кокосе.

А SDIO - гляньте, если Ваш проц это умеет, используйте ...
0
1 / 1 / 0
Регистрация: 14.02.2013
Сообщений: 446
31.07.2013, 11:57 4
Потому что привыкли жрать готовое, пусть и малосъедобное, потому что лень думать и разбираться, ардуинщики, мля.
0
Oxford
31.07.2013, 12:57 5
Да уж если скорости надо придется основательно с кодом работать. Копипаст не поканает.
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
31.07.2013, 14:17 6
Да я абсолютно не против переделывать код, библиотека для дисплея была написана практически с 0, а библиотеку от Чена советовали как одну из лучших. Тем более еще ни одна библиотека, скопированная из инета с первого раза не завелась... Другой вопрос что именно переделать? Подключать по SDIO это понятно, просто плата пока сделана под SPI, поэтому копаюсь в нем, потом буду переделывать. Кстати, использование DMA что-нибудь даст в моем случае? Скорости чтения вроде хватает, картинки размером 10Кб и 25Кб, с одинаковым разрешением, выводятся практически одно и то же время.

Да, выводить JPG не критично, можно и BMP, они ведь являются практически готовым массивом для вывода, только в начале 64 байта служебной информации. Вывод же должен получиться быстрее?
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
31.07.2013, 14:28 7
вывод будет однозначно быстрее, т.к. не будет декодирования jpeg. Минус в том, что картинки весят много) 320х240 24 бит цвета весит 230кбайт. И там 54 первых байта - заголовок, потом чистые данные.
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
31.07.2013, 14:34 8
Хм, интересно, что будет происходить быстрее, чтение BMP или декодирование JPG?
0
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 241
31.07.2013, 14:52 9
Зачем это сравнивать то? У твоего дисплея шина данных сколько разрядов имеет?
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
31.07.2013, 14:56 10
16-битная шина, подключена через FSMC.

P.S.
Это мой первый опыт работы с подобными вещами, так что сильно не пинайте))
0
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 241
31.07.2013, 15:01 11
Цитата Сообщение от BORS_
16-битная шина, подключена через FSMC.
Нормальный вариант. За какое время весь экран заполняется одним цветом?
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
31.07.2013, 15:04 12
Точного времени не скажу, но на глаз вообще на заметно. Заливку делал так:

Код
void LCD_Clear(uint16_t Color)
{
uint32_t index = 0;

LCD_SetCursor(0x00, 0x013F);
LCD_WriteROM_Prepare();
for(index = 0; index < 76800; index++)
{
LCD_ROM = Color;
}
}
Хотя других вариантов тут вроде и нет) Картинка 200х200 из памяти МК тоже появляется мгновенно.
0
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 241
31.07.2013, 15:09 13
Я так понимаю картинка в памяти состоит из 16-битных данных. При выводе картинки из bmp нужно будет делать еще преобразование R8G8B8 -> R5G6B5. На это тоже время надо.
0
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
31.07.2013, 15:16 14
Да фигня это время...
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
31.07.2013, 15:18 15
Да, как-то я об этом не подумал... Так есть какой-то вариант быстрого вывода картинки с SD карточки? Больших изображений будет немного, штуки 3-4...
0
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
31.07.2013, 15:24 16
Цитата Сообщение от Hotd
вывод будет однозначно быстрее, т.к. не будет декодирования jpeg. Минус в том, что картинки весят много) 320х240 24 бит цвета весит 230кбайт. И там 54 первых байта - заголовок, потом чистые данные.
Всё зависит от желания изобразить из себя бога... Для флэшки размер не помеха... Даже с SPI всё легко считается на пальцах... С ченовской фат на BMP, ИМХО, в 100миллисекунд вложиться можно... только поковырять её придётся ...
0
0 / 0 / 0
Регистрация: 22.04.2011
Сообщений: 241
31.07.2013, 15:27 17
Смотря насколько быстро. Если чтоб было на глаз не заметно, то нету.
0
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
31.07.2013, 15:27 18
Цитата Сообщение от BORS_
Да, как-то я об этом не подумал... Так есть какой-то вариант быстрого вывода картинки с SD карточки? Больших изображений будет немного, штуки 3-4...
Тогда может имеет смысл прикрутить что-то типа SST25VF032 или M25P32???
0
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 783
31.07.2013, 15:30 19
Цитата Сообщение от 011119xx
Смотря насколько быстро. Если чтоб было на глаз не заметно, то нету.
На глаз незаметно - из внутреннего флэша или прямое чтение из МС флэша на дисплей...
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
31.07.2013, 15:38 20
Цитата Сообщение от dork_usir
Цитата Сообщение от Hotd
вывод будет однозначно быстрее, т.к. не будет декодирования jpeg. Минус в том, что картинки весят много) 320х240 24 бит цвета весит 230кбайт. И там 54 первых байта - заголовок, потом чистые данные.
Всё зависит от желания изобразить из себя бога... Для флэшки размер не помеха... Даже с SPI всё легко считается на пальцах... С ченовской фат на BMP, ИМХО, в 100миллисекунд вложиться можно... только поковырять её придётся ...

О, а можно подробнее? Насколько я понимаю, надо найти на SD картинку, получить адрес начала файла, прочитать размер, после этого начать читать саму картинку (при этом читать по секторам диска, а не функцией f_open()), преобразовывать цвета и выводить. Все верно, или еще что-то упустил? Да, FatFS использовал стандартную.

Цитата Сообщение от dork_usir
Цитата Сообщение от 011119xx
Смотря насколько быстро. Если чтоб было на глаз не заметно, то нету.
На глаз незаметно - из внутреннего флэша или прямое чтение из МС флэша на дисплей...

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

Цитата Сообщение от dork_usir
Тогда может имеет смысл прикрутить что-то типа SST25VF032 или M25P32???
Да уже заказан из инета STMF103... Вообще хочу сделать что-то вроде бортового компа для машины, а картинки использовать для графического оформления. на картинке 320х240 все необходимые надписи, а в определенных местах вывод текста.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2013, 15:38

Чтение COM-порта: медленный вывод в textBox несколько тысяч строк (метод AppendText)
Доброго времени суток! Читаю данные с последовательного порта. Конвертирую каждые три байта и...

Замена 2,8 TFT на 2,4 TFT
Некоторое время назад был сделан проект на STM32F103RB и LCD2.8&quot;. Поддерживает контроллеры ILI9320,...

Вывод картинок
Здравствуйте, вывод идет: &lt;a href=&quot;/catalog/catalog_img/{PHOTO}&quot; target=_blank onclick=&quot;return...

Вывод картинок из бд
Имеются N кол-во картинок в папке. Под каждой картинкой свод id. Нужно вывести картинки из бд(чтоб...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru