Подключение TFT дисплея по RGB интерфейсу

Этот проект практически повторяет идею из статьи взятой с сайта "Промэлектроники" (статья и проект приложена к посту).

Кратко о проекте:
— написан в среде IAR Embedded Workbench;
— дисплей фирмы MULTI-INNO MIO350CT (320x240x24bit здесь исп. только 16bit);
— контроллер STM32F103RET6 — контроллер впрниципе можно использовать и послабее, все зависит от задачи и возможно от дисплея (см. дальше);
— контроллер легко разгонялся до частоты 120МГц и нормально работал;
— только на 120МГц достигалась частота развертки кадра 60Гц, на этой частоте мерцания были уже не заметны, возможно на каких то других дисплеях удалось бы избавиться от мерцания на меньшей частоте кадра (если не использовать промежуточных значений основных цветов R,G,B то можно работать и на 10Гц, но картинка получается восьмицветной);
— дисплей настраивается через SPI интерфейс;
— UART использовался для вывода на дисплей символов.
В архиве с проектом еще есть схема в P-CAD.
Если использовать контроллер из семейства STM32F4 с ОЗУ 192Кб, то в памяти можно хранить целый кадр дисплея и работа станет проще. Да и частота в 168 МГц легко обеспечит необходимую частоту развертки.

Видео с сайта Промэлектроники

  • +2
  • 02 февраля 2012, 18:57
  • LineAir
  • 3

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

RSS свернуть / развернуть
А можно поподробней описать процедуру разгона и возможные грабли?
0
Да просто множитель ставишь больше положенного и ждешь результата). На форумах писали о разгоне, где то на ~150 контроллер работает уже не корректно. Но не умирает.
0
Круто, а где подробности?
Какая частота шины дисплея получилась?
Как генерируется изображение, в условиях нехватки памяти под видеобуфер? Знакогенератор?
Что в дисплее настраивается через SPI?
Цикл вывода данных как-то оптимизировался? или просто на Си, как есть?
Понимаю что есть исходники и всё можно посмотреть там, но если уж опубликовали результаты, то и подробностей не пожалейте. Да и на фотки всегда интересно посмотреть.
0
  • avatar
  • ACE
  • 02 февраля 2012, 20:47
В догонку. Что за дисплей? Почему выбран он? Где, почём? Может меня в гугле забанили, но по MIO350CT ничего не нашлось.
P.S. Нашёл, он MI0350CT.
0
Как генерируется изображение, в условиях нехватки памяти под видеобуфер? Знакогенератор?
судя по ушам вопросам, приложенную статью не читал…
0
судя по ушам вопросам, приложенную статью не читал…
Кстати, да. Статья достаточно хорошо все описывает. А код лишь приложение к ней.
0
Статью читал, но это ведь другая реализация, тут может быть по другому. В статье 10fps@24MHz, тут 60fps@120MHz. Там графики рисуются, у ТС может что-то другое. Как минимум, есть вывод текста, чего нет в статье.
0
в общем, да. фотки экранчика очень интересно увидеть.
с другой стороны, есть идея, а дальше уже развитие…
0
Фото приложил к статье. Увы только одно. Особо не фотографировал. А теперь сфотографировать не смогу. Еще видео есть, но там тоже какая-то несуразица выводится.
0
Спасибо за наводящие вопросы:
Какая частота шины дисплея получилась?
Что-то в районе 6MHz (т.е. частота тактирования точки, по каждому такому такту вывводится пиксель).

Как генерируется изображение, в условиях нехватки памяти под видеобуфер? Знакогенератор?
Изображение можно по-разному: для картинок просто по пиксеоьное сохранение и вывод на дисплей тоже попиксельно, а со знаками можно пойти разными путями: каждому пикселю знака соответсвует бит (меньше места занимает алфавит, уходит больше времени на перевод в 16бит форму) или 2 байта (со цветом, проще быстрее, нужно больше flash памяти). И каждая строка в очередной раз формировалась заново. Для сохранения кадра нужна внешняя память (320*240*16бит=150кБайт/кадр) или как уже писал STM32F4 (192кБ ОЗУ).

Что в дисплее настраивается через SPI?
Точно не помню, даташит на дисплей смотреть надо, ориентация картинки, порядок цветов (RGB, BRG), инвертирование и т.д. и т.п. Можно еще запустить тестовые режимы дисплея.

Цикл вывода данных как-то оптимизировался? или просто на Си, как есть?
Цикл вывода данных оптимизировался так, пока формируется одна строка, DMA выводит другую. Получившийся код полностью на Си.
0
Что-то в районе 6MHz
Печально. Для 800х480 нужно около 30MHz. Тут уже никакого разгона не хватит.
Кстати, немного не понял в статье фразу:
Проблема оказалась в скорости реакции DMA на запрос копирования. Данные по цвету рисуемой точки не успевали за тактами DCLK.
Что получается, если увеличить частоту DCLK? Как я понял, она идёт от таймера, её можно и больше выставить.
0
Да, можно больше делать, но DMA не будет успевать отрабатывать точку и будет происходить наложение и все такое, DMA нужно определенное время на чтение пикселя из памяти и вывод в порт.
0
Насколько я понял, проблема не в скорости DMA, а задержке. Может можно несколько сдвинуть фазы сигналов, выдавая DMA сигнал не передачу чуть раньше?
0
А конструктивная критика кода приветствуется, или как?
0
Да)
0
1. Имена переменных: im, ii, jj, kk, gg, nn и т.д. Ага?
2. То, что они все глобальные и находятся в заголовке, я думаю, даже говорить не надо.
3. Огромное количество непонятных магических чисел — константы не просто так придумали!
4. Какое-то невнятное разбиение на модули. Например, файл delay.c — в нем есть LCD_Number_Create.
5. Много дублирования кода. Все эти функции типа LCD_Text_Create и LCD_Number_Create можно обобщить, не потеряв в производительности.
6. Глобальные переменные используются как счетчики во внутренних циклах функций. Зачем?
7. Локальные переменные с такими-же именами как и глобальные. Поди потом разберись, где какой 'kk' используется и какой 'jj' что где означает.
8. Разворачивать циклы вручную ИМХО — практически бесполезное занятие, IAR вроде их сам имеет разворачивать если надо. Преждевременная оптимизация есть зло.

Как-то так. На сим заканчиваю свой приступ вечерней вредности.
0
Не потрудился я проект в хороший вид привести, каюсь. Ну как пример как делать не надо думаю самое то. Это сырой проект, на котором тестировались возможности связки STM32F100 or STM32F103 & TFT дисплей по RGB.
0
Ну хотя бы поподробнее описали бы для общественного блога. а то так даже не понятно о чём и за чем пост.
0
У STM есть аппнот и пример проекта, как через DMA и фреймбуффер (или из флеша) рефрешится экран, с загрузкой проца около 1%. Но фреймбуффер нужен.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.