Donker 0 12 февраля, 2019 Опубликовано 12 февраля, 2019 · Жалоба Присмотрел такой экранчик: http://ali.onl/1dtP TFT 3.5" 320x480, вроде как на ili9486 Вопросы: Что означает ili9486/ili9488 в описании у продавца (это какое то мошенничество, пришлют более дешевую модель)? С за сколько времени можно попиксельно заполнить весь экран, при использовании 16 битной шины данных, на максимуме скорости интерфейса, без разгона, по датащиту. Например, для передачи произвольного пикселя TFT 320x240 на ili9341 в варианте 8 битной шины данных и двухбайтового цвета, надо отправить 13 байт на экранчик(!), (на STM32F105RBT6 удалось выжать около 0,4 сек на заполнение экрана, пичалька), тут как этим? Если вы реально работали с таким экранчиком, можете выложить код инициализации и самой работы, а то по датащиту я не разберусь? Какие ещё есть интересные варианты покупки этого экранчика? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 12 февраля, 2019 Опубликовано 12 февраля, 2019 · Жалоба 10 минут назад, Donker сказал: Например, для передачи произвольного пикселя TFT 320x240 на ili9341 в варианте 8 битной шины данных и двухбайтового цвета, надо отправить 13 байт на экранчик(!), (на STM32F105RBT6 удалось выжать около 0,4 сек на заполнение экрана, пичалька), тут как этим? Что-то у вас в консерватории нужно править. Даже по SPI такой экран заполняется на порядок быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 12 февраля, 2019 Опубликовано 12 февраля, 2019 · Жалоба не надо такой дисп сажать на F105, у него нет FSMC, ногами дрыгать программно долго будет. Возьмите либо дисп с SPI, либо проц с FSMC типа F103ZET6/F407/... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 12 февраля, 2019 Опубликовано 12 февраля, 2019 · Жалоба 30кадров в сек, на 107 чипе в режиме ногодрыга. Вы завязывайте там со своим халом и адруиной, тут нужны сишные функции на несколько с строчек - с прямым обращениям к регистрам. К тому-же глупо каждый раз отдавать полный адрес пиксела, ili9486/ili9488 и ещё куча подобных - умеют принимать данные в потоке, с автоматическим увеличением адреса пиксела. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Donker 0 12 февраля, 2019 Опубликовано 12 февраля, 2019 (изменено) · Жалоба AVI-crak это теоретическое предположение или он у вас и правда с такой скоростью заполнялся? Можете выложить код по передаче пикселя? У меня пиксель сейчас выводится так: Спойлер #define CS_HI GPIOA->BSRR = GPIO_BSRR_BS8 //высокий уровень CS_HI; //Chip Select (не активный) #define CS_LOW GPIOA->BSRR = GPIO_BSRR_BR8 //низкий уровень CS_LOW; //Chip Select (активный) #define RS_HI GPIOA->BSRR = GPIO_BSRR_BS9 //высокий уровень RS_HI; //Data #define RS_LOW GPIOA->BSRR = GPIO_BSRR_BR9 //низкий уровень RS_LOW; //Command #define WR_HI GPIOA->BSRR = GPIO_BSRR_BS10 //высокий уровень //LCD Write #define WR_LOW GPIOA->BSRR = GPIO_BSRR_BR10 //низкий уровень //LCD Write (активный) #define RD_HI GPIOA->BSRR = GPIO_BSRR_BS11 //высокий уровень //LCD Read #define RD_LOW GPIOA->BSRR = GPIO_BSRR_BR11 //низкий уровень #define RES_HI GPIOA->BSRR = GPIO_BSRR_BS12 //высокий уровень //LCD Reset #define RES_LOW GPIOA->BSRR = GPIO_BSRR_BR12 //низкий уровень #define WR_STROBE {WR_LOW; WR_HI;} //************************************************************************************* void TFT_DrawPixel(int x, int y, uint16_t color) { ///////////////////////////////////////////////////////////// unsigned long t; t = x; t<<=16; t |= X_SIZE-1; //-------------------------------------------------------------- RS_LOW; //линия в состоянии посылки команды GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| 0x2A; WR_STROBE; RS_HI; ////линия в состоянии посылки данных GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| uint8_t(t>>24); WR_STROBE; GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| uint8_t(t>>16); WR_STROBE; GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| uint8_t(t>>8); WR_STROBE; GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| uint8_t(t); WR_STROBE; //-------------------------------------------------------------- t = y; t<<=16; t |= Y_SIZE-1; //-------------------------------------------------------------- RS_LOW; //линия в состоянии посылки команды GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| 0x2B; WR_STROBE; RS_HI; ////линия в состоянии посылки данных GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| uint8_t(t>>24); WR_STROBE; GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| uint8_t(t>>16); WR_STROBE; GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| uint8_t(t>>8); WR_STROBE; GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| uint8_t(t); WR_STROBE; //-------------------------------------------------------------- RS_LOW;//линия в состоянии посылки команды GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| 0x2C; WR_STROBE; //-------------------------------------------------------------- RS_HI; //линия в состоянии посылки данных GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| uint8_t(color>>8); WR_STROBE //-------------------------------------------------------------- GPIOA -> ODR =(GPIOA -> ODR & 0xFF00)| uint8_t(color); WR_STROBE //////////////////////////////////////////////////////////// } Изменено 12 февраля, 2019 пользователем Donker Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zeal0t 0 12 февраля, 2019 Опубликовано 12 февраля, 2019 (изменено) · Жалоба 7 hours ago, Donker said: Присмотрел такой экранчик: http://ali.onl/1dtP TFT 3.5" 320x480, вроде как на ili9486 Вопросы: Что означает ili9486/ili9488 в описании у продавца (это какое то мошенничество, пришлют более дешевую модель)? С за сколько времени можно попиксельно заполнить весь экран, при использовании 16 битной шины данных, на максимуме скорости интерфейса, без разгона, по датащиту. Например, для передачи произвольного пикселя TFT 320x240 на ili9341 в варианте 8 битной шины данных и двухбайтового цвета, надо отправить 13 байт на экранчик(!), (на STM32F105RBT6 удалось выжать около 0,4 сек на заполнение экрана, пичалька), тут как этим? Если вы реально работали с таким экранчиком, можете выложить код инициализации и самой работы, а то по датащиту я не разберусь? Какие ещё есть интересные варианты покупки этого экранчика? выдернуто из реального проекта p.s. функции установки состояния ног и вывод внутренние но по названию более-менее понятно инициализация const uint8_t InitCommandsList[] = { // Initialization commands for ILI9486 screens 19, // 19 commands in list: // 0x11, 0, // 1: Out of sleep mode, no args 0xF2, 8, // 2: ???, 8 args 0x1C,0xA3,0x32,0x02, // 0xB2,0x12,0xFF,0x12, // 0xF1, 2, // 3: ???, 2 args 0x36,0xA4, // 0xF8, 2, // 4: ???, 2 args 0x21,0x04, // 0xF9, 2, // 5: ???, 2 args 0x00,0x08, // 0xC0, 2, // 6: Power control 1, 2 arg 0x0D,0x0D, // 0xC1, 2, // 7: Power control 1, 2 arg 0x43,0x00, // 0xC2, 1, // 8: Power control 3, 1 arg 0x00, // 0xC5, 2, // 9: VCOM control, 2 arg 0x00,0x48, // 0xB6, 3, // 10: Display Function Control, 3 arg 0x00,0x22,0x3B, // 0xE0,15, // 11: Positive Gamma Control, 15 arg 0x0f,0x24,0x1c,0x0a,0x0f, // 0x08,0x43,0x88,0x32,0x0f, // 0x10,0x06,0x0f,0x07,0x00, // 0xE1,15, // 12: Negative Gamma Contro, 15 arg 0x0F,0x38,0x30,0x09,0x0f, // 0x0f,0x4e,0x77,0x3c,0x07, // 0x10,0x05,0x23,0x1b,0x00, // 0x20, 1, // 13: Display Inversion OFF, 1 arg 0x00, // 0x3A, 1, // 14: Interface Pixel Format, 1 arg 0x55, // 0x2A, 4, // 15: Column Addess Set, 4 arg 0x00,0x00,0x01,0xDF, // 0x2B, 4, // 16: Page Addess Set, 4 arg 0x00,0x00,0x01,0x3F, // 0x36, 1, // 17: 0xF8, // 0 x 1111 1000 0xE8 // |||| |||| // |||| |||*-- D0 x // |||| ||*--- D1 x // |||| |*---- D2 MH Display Data Latch Data Order // 0 = LCD Refresh Left to Right // 1 = LCD Refresh Right to Left // |||| *----- D3 BGR RGB/BGR Order // 0 = RGB // 1 = BGR // |||*------- D4 ML Line Address Order // 0 = LCD Refresh Top to Bottom // 1 = LCD Refresh Bottom to Top // ||*-------- D5 MV Page/Column Order // 0 = Normal Mode // 1 = Reverse Mode // |*--------- D6 MX Column Address Order // 0 = Left to Right // 1 = Right to Left // *---------- D7 MY Page Address Order // 0 = Top to Bottom // 1 = Bottom to Top 0x29, 0, // 18: Display ON, no args 0x2C, 0, // 19: Memory Write, no args }; void TDeviceConsole::Init(void) { uint8_t *cmds; uint8_t numCommands, numArgs; { APP_CFG_LCD_POWER_ON; APP_CFG_LCD_CS_OFF; APP_CFG_LCD_RS_OFF; APP_CFG_LCD_WR_OFF; APP_CFG_LCD_RST_OFF; } { APP_CFG_LCD_RST_ON; msDelay(50); APP_CFG_LCD_RST_OFF; msDelay(50); } APP_CFG_LCD_CS_ON; { cmds = (uint8_t*)InitCommandsList; numCommands = *cmds++; // Number of commands to follow while (numCommands--) { // For each command... APP_CFG_LCD_RS_ON; APP_CFG_LCD_WR_BUS(*cmds++); // Read and issue command numArgs = *cmds++; // Number of args to follow while(numArgs--) { // For each argument... APP_CFG_LCD_RS_OFF; APP_CFG_LCD_WR_BUS(*cmds++); // Read and issue argument } } } APP_CFG_LCD_CS_OFF; } выводить на него точками действительно медленно получается, но если принять во внимание что много элементов это буквы, графические примитивы и прочее то очень спасает его функция SetWindow. например можно указать окно вывода с началом 100,100 и размером 8,16 и вывести в него очередной символ 8x16. получается удобно и не нужно каждый раз вычислять координаты вывода. Изменено 12 февраля, 2019 пользователем Zeal0t Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Donker 0 12 февраля, 2019 Опубликовано 12 февраля, 2019 · Жалоба Zeal0t спасибо. Я хотел уточнить вопрос, насколько быстро ili9486 может заполнить экран пикселями в наиболее тяжёлом варианте алгоритма, в случайном порядке их вывода по координатам, случайного цвета, т.е. когда приходится указывать координаты каждого пикселя? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 12 февраля, 2019 Опубликовано 12 февраля, 2019 · Жалоба Spoiler /// Контакты управления дисплеем ( обязательно на одном порту) #define SETPIXSEL__CE GPIO_Pin_2 #define SETPIXSEL__WR GPIO_Pin_7 #define SETPIXSEL__RS GPIO_Pin_9 #define SETPIXSEL__RD GPIO_Pin_6 #define SETPIXSEL__read GPIOE->CRL=0x44444444;GPIOE->CRH=0x44444444 #define SETPIXSEL__record GPIOE->CRL=0x33333333;GPIOE->CRH=0x33333333 /// Имя порта для жк индикатора #define GPIO_SETPIXSEL GPIOE->ODR #define GPIO_READPIXSEL GPIOE->IDR #define GPIO_SETcontrol GPIOB->BSRR #define SETPIXSEL_all (uint32_t)( SETPIXSEL__RD | SETPIXSEL__RS | SETPIXSEL__WR | SETPIXSEL__CE ) #define SETPIXSEL_ce_rs (uint32_t) (( SETPIXSEL__CE | SETPIXSEL__RS ) << 16) | (SETPIXSEL_all ^ ( SETPIXSEL__CE | SETPIXSEL__RS )) #define SETPIXSEL_ce_rs_wr (uint32_t) (( SETPIXSEL__CE | SETPIXSEL__RS | SETPIXSEL__WR ) << 16) | (SETPIXSEL_all ^ ( SETPIXSEL__CE | SETPIXSEL__RS | SETPIXSEL__WR )) #define SETPIXSEL_ce (uint32_t) (( SETPIXSEL__CE ) << 16) | (SETPIXSEL_all ^ ( SETPIXSEL__CE )) #define SETPIXSEL_ce_wr (uint32_t) (( SETPIXSEL__CE | SETPIXSEL__WR ) << 16) | (SETPIXSEL_all ^ ( SETPIXSEL__CE | SETPIXSEL__WR )) #define SETPIXSEL_ce_rd (uint32_t) (( SETPIXSEL__CE | SETPIXSEL__RD ) << 16) | (SETPIXSEL_all ^ ( SETPIXSEL__CE | SETPIXSEL__RD )) void setReg (re,se) { GPIO_SETcontrol = SETPIXSEL_ce_rs_wr; GPIO_SETPIXSEL = re ; GPIO_SETcontrol = SETPIXSEL_ce_rs; GPIO_SETcontrol = SETPIXSEL_ce_wr; GPIO_SETPIXSEL = se ; GPIO_SETcontrol = SETPIXSEL_ce; GPIO_SETcontrol = SETPIXSEL_all; } /// Рисуем цветную точку void setPixel (uint16_t x,uint16_t y,uint16_t RGB) { GPIO_SETcontrol = SETPIXSEL_ce_rs_wr; GPIO_SETPIXSEL = 0x0200; GPIO_SETcontrol = SETPIXSEL_ce_rs; GPIO_SETcontrol = SETPIXSEL_ce_wr; GPIO_SETPIXSEL = x; GPIO_SETcontrol = SETPIXSEL_ce; GPIO_SETcontrol = SETPIXSEL_ce_rs_wr; GPIO_SETPIXSEL = 0x0201; GPIO_SETcontrol = SETPIXSEL_ce_rs; GPIO_SETcontrol = SETPIXSEL_ce_wr; GPIO_SETPIXSEL = y; GPIO_SETcontrol = SETPIXSEL_ce; GPIO_SETcontrol = SETPIXSEL_ce_rs_wr; GPIO_SETPIXSEL = 0x0202; GPIO_SETcontrol = SETPIXSEL_ce_rs; GPIO_SETcontrol = SETPIXSEL_ce_wr; GPIO_SETPIXSEL = RGB; GPIO_SETcontrol = SETPIXSEL_all; }; Есть ещё вариант с таймером и дма, но в любом случае случайные пикселы заливаются очень туго - смысла нет. Всегда выделяется область видимости экрана, после чего цвет сливается в режиме нон стоп. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Donker 0 13 февраля, 2019 Опубликовано 13 февраля, 2019 · Жалоба AVI-crak спасибо, но инициализация тоже интересна, с ней обычно больше всего проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zeal0t 0 13 февраля, 2019 Опубликовано 13 февраля, 2019 (изменено) · Жалоба 17 hours ago, AVI-crak said: Reveal hidden contents /// Контакты управления дисплеем ( обязательно на одном порту) #define SETPIXSEL__CE GPIO_Pin_2 #define SETPIXSEL__WR GPIO_Pin_7 #define SETPIXSEL__RS GPIO_Pin_9 #define SETPIXSEL__RD GPIO_Pin_6 #define SETPIXSEL__read GPIOE->CRL=0x44444444;GPIOE->CRH=0x44444444 #define SETPIXSEL__record GPIOE->CRL=0x33333333;GPIOE->CRH=0x33333333 /// Имя порта для жк индикатора #define GPIO_SETPIXSEL GPIOE->ODR #define GPIO_READPIXSEL GPIOE->IDR #define GPIO_SETcontrol GPIOB->BSRR #define SETPIXSEL_all (uint32_t)( SETPIXSEL__RD | SETPIXSEL__RS | SETPIXSEL__WR | SETPIXSEL__CE ) #define SETPIXSEL_ce_rs (uint32_t) (( SETPIXSEL__CE | SETPIXSEL__RS ) << 16) | (SETPIXSEL_all ^ ( SETPIXSEL__CE | SETPIXSEL__RS )) #define SETPIXSEL_ce_rs_wr (uint32_t) (( SETPIXSEL__CE | SETPIXSEL__RS | SETPIXSEL__WR ) << 16) | (SETPIXSEL_all ^ ( SETPIXSEL__CE | SETPIXSEL__RS | SETPIXSEL__WR )) #define SETPIXSEL_ce (uint32_t) (( SETPIXSEL__CE ) << 16) | (SETPIXSEL_all ^ ( SETPIXSEL__CE )) #define SETPIXSEL_ce_wr (uint32_t) (( SETPIXSEL__CE | SETPIXSEL__WR ) << 16) | (SETPIXSEL_all ^ ( SETPIXSEL__CE | SETPIXSEL__WR )) #define SETPIXSEL_ce_rd (uint32_t) (( SETPIXSEL__CE | SETPIXSEL__RD ) << 16) | (SETPIXSEL_all ^ ( SETPIXSEL__CE | SETPIXSEL__RD )) void setReg (re,se) { GPIO_SETcontrol = SETPIXSEL_ce_rs_wr; GPIO_SETPIXSEL = re ; GPIO_SETcontrol = SETPIXSEL_ce_rs; GPIO_SETcontrol = SETPIXSEL_ce_wr; GPIO_SETPIXSEL = se ; GPIO_SETcontrol = SETPIXSEL_ce; GPIO_SETcontrol = SETPIXSEL_all; } /// Рисуем цветную точку void setPixel (uint16_t x,uint16_t y,uint16_t RGB) { GPIO_SETcontrol = SETPIXSEL_ce_rs_wr; GPIO_SETPIXSEL = 0x0200; GPIO_SETcontrol = SETPIXSEL_ce_rs; GPIO_SETcontrol = SETPIXSEL_ce_wr; GPIO_SETPIXSEL = x; GPIO_SETcontrol = SETPIXSEL_ce; GPIO_SETcontrol = SETPIXSEL_ce_rs_wr; GPIO_SETPIXSEL = 0x0201; GPIO_SETcontrol = SETPIXSEL_ce_rs; GPIO_SETcontrol = SETPIXSEL_ce_wr; GPIO_SETPIXSEL = y; GPIO_SETcontrol = SETPIXSEL_ce; GPIO_SETcontrol = SETPIXSEL_ce_rs_wr; GPIO_SETPIXSEL = 0x0202; GPIO_SETcontrol = SETPIXSEL_ce_rs; GPIO_SETcontrol = SETPIXSEL_ce_wr; GPIO_SETPIXSEL = RGB; GPIO_SETcontrol = SETPIXSEL_all; }; Есть ещё вариант с таймером и дма, но в любом случае случайные пикселы заливаются очень туго - смысла нет. Всегда выделяется область видимости экрана, после чего цвет сливается в режиме нон стоп. специально не засекал но очень медленно. видео на нем сделать скорее всего не получится, но вот для таких вещей вполне подходит обновление значений идет не в реальном режиме времени а после расчетов постоянное обновление этого экрана давало результат ~28-30 обновлений в секунду https://my-files.ru/ak1nnj p.s. файл будет лежать по ссылке 20 дней после последнего скачивания p.p.s. sorry. не туда ответил ) Изменено 13 февраля, 2019 пользователем Zeal0t Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Donker 0 13 февраля, 2019 Опубликовано 13 февраля, 2019 · Жалоба ZealOt спасибо, видел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 13 февраля, 2019 Опубликовано 13 февраля, 2019 · Жалоба 12 hours ago, Donker said: спасибо, но инициализация тоже интересна, с ней обычно больше всего проблем. С запуском меньше всего проблем, тем более для таких массовых экранов. В сети можно найти готовые сценарии запуска, функции естественно будут чужими - но вам нужны последовательность команд регистр-данные. Тут желательно на другое обратить внимание - то как он должен обновляться в рабочем режиме, точнее что вы собираетесь на него выводить. От этого зависит предпочтительная ориентация пикселов. Для того чтобы потом не выполнять дополнительный код по размещению точек графики, точнее сократить его до минимума. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 14 февраля, 2019 Опубликовано 14 февраля, 2019 · Жалоба В 12.02.2019 в 14:21, AVI-crak сказал: 30кадров в сек, на 107 чипе в режиме ногодрыга. 30 fps даже по SPI достигается (320x240). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 14 февраля, 2019 Опубликовано 14 февраля, 2019 · Жалоба 49 минут назад, jcxz сказал: 30 fps даже по SPI достигается (320x240). Вот мне тоже интересно... Есть задача (хобби) выводить анимированные меню, красивые переходы и прочие графические виджеты на экран. Вот смотрел на TouchGFX - у них круто выглядит все. Только рисовать хочу не руками (SetPixel, SetLine и т.д.), а на uSD-карте хранить заранее подготовленные отфотошопленные битмапы кнопочек, теней, виджетов - в общем, всю красоту, и выводить ее на экран. Поднимется ли такая же красота на SPI-дисплеях? Пока что вижу лишь связку uSD->SDRAM->STM32F429(LTDC)->TFT(RGB666) для реально крутой графики по умеренной цене. Хочу как-раз дешево сделать. Нашел на Aliexpress еле-еле экран с RGB интерфейсом (VSYNC, HSYNC), с ним выходит круто (уже есть другой девайс с графикой и такой цепочкой, что привел выше, заценил). А вот SPI-модулей полно и они гораздо дешевле. Но жутко напрягают видео на ютубе (подавляющее большинство), в которых отрисовка одного кадра (!) видна как тормозящая жутко. И никаких 30fps там нет Ну вот пример: https://www.youtube.com/watch?v=5HKlbpoErpg А хочется вот такого качества: https://www.youtube.com/watch?v=QcKX_Pc6ldU Просто цена моего решения (с RGB-дисплеем) существенно выше (многоногий корпус МК, наличие SDRAM, более редкий TFT, более сложная плата (4-слойка) и т.д.), чем SPI-решения, где даже видеобуфер хранить нужно только по факту один - один уже в экране хранится, а другой готовим в ОЗУ МК. С учетом этого хотелось бы услышать оценочное мнение о целесообразности связки с SDRAM+LTDC+TFT-RGB против SPI-TFT. P.S. Экран у меня 480x320. Глубина цвета - ну на сегодняшний момент 24 бита (RGB666) (именно хранение пикселей). Вот и думаю, 480*320*30fps*3Bpp = ~14МГц обмена по SPI, что, как бы, не много для STM32. Если еще и взять STM32F429 с DMA2D, то битмапы, вычитанные с SD-карты, можно произвольно расположить в видеобуфере, со всякими преобразованиями форматов пикселей и альфаканалом, при желании, что позволит сделать некие анимированные виджеты. Потом это дело отправить на дисплей по DMA, что не займет много процессорных сил для других дел. Но это только на первый взгляд... Как считаете, взлетит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 14 февраля, 2019 Опубликовано 14 февраля, 2019 · Жалоба 15 минут назад, Arlleex сказал: P.S. Экран у меня 480x320. Глубина цвета - ну на сегодняшний момент 24 бита (RGB666) (именно хранение пикселей). Вот и думаю, 480*320*30fps*3Bpp = ~14МГц обмена по SPI, А почему всего 14 МГц? За 320*480 не скажу, но 320*240 у меня при SCLK=40 МГц даёт как раз 30 FPS. На STM32F429. И это не предел - у меня тактовая стоит 160МГц, а могу поставить 180МГц и получить ещё немного выше скорость (пробовал SCLK=45МГц - ILI нормально тянет такую). Вывод предыдущей картинки и рисование следующей может идти параллельно в разные видеобуферы. Цитата что, как бы, не много для STM32. Если еще и взять STM32F429 с DMA2D, то битмапы, вычитанные с SD-карты, можно произвольно расположить в видеобуфере, со всякими преобразованиями форматов пикселей и альфаканалом, при желании, что позволит сделать некие анимированные виджеты. Потом это дело отправить на дисплей по DMA, что не займет много процессорных сил для других дел. Но это только на первый взгляд... Как считаете, взлетит? Насчёт построения картинки - не знаю, так трудно сказать. У меня графика простая, с небольшими фрагментами анимации. Вам надо отдельно посмотреть сколько времени займёт построение картинки с теми плюшками, что хотите. Но очевидно, что внутренней памяти Вам не хватит и SDRAM всё равно придётся ставить (если STM32F429, если не искать МК с большим объёмом внутренней ОЗУ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться