Эффективное отображение простого текста / графики на цветном ЖК-дисплее ARM

12

При разработке устройства на базе ARM, которое должно отображать простую графику на цветном ЖК-дисплее, как лучше всего разрабатывать вещи, позволяющие выполнять быстрые обновления, желательно без привязки к конкретному поставщику ARM или LCD? В моем текущем проекте используется черно-белый дисплей, который может работать молниеносно с помощью порта SPI на PIC (перерисовка сложного дисплея за 1/60 секунды). Кажется, что обычные цветные ЖК-дисплеи имеют порт SPI, но даже заполнение 160x120 LCD сплошным цветом заняло бы 30 мс, а 320x240 потребовало бы 120 мс в лучшем случае (тактовая частота сдвига 10 МГц).

Если бы можно было сэкономить контакты контроллера, параллельный режим мог бы быть лучше, но я не знаю каких-либо независимых от семьи средств подключения параллельного интерфейса без необходимости трех отдельных инструкций хранения памяти для каждого пикселя (по одной для установки данных, один, чтобы установить высокий выходной тактовый сигнал, и один, чтобы установить низкий тактовый выход). У некоторых микросхем ARM есть интерфейсы шины памяти, но они часто хотят делать такие вещи, как мультиплексный адрес и данные, или выделять много выводов для вывода нерелевантных битов адреса (для ЖК-дисплея нужен только один бит адреса).

Если посмотреть на ILI9320 от ILITEK или HD66789 от Renesas, один из подходов, который может показаться интересным, - это использовать CPLD для преобразования SPI в параллельные данные и включить режим, который выводил бы пиксель на бит. Глядя на таблицу данных Renesas, можно было бы получить записи по пикселям на бит с минимальным аппаратным обеспечением (не требуется CPLD), заставив все биты данных параллельного порта отслеживать вывод последовательных данных, используя последовательный режим для всего, кроме пикселя записывает и использует функции сравнения / маски, чтобы либо пиксели со всеми нулями были прозрачными, а пиксели со всеми единицами устанавливали выбранные биты в GRAM, либо пиксели со всеми единицами были бы прозрачными, а пиксели со всеми нулями очищали бы выбранные биты. Раздел «Функции» в техническом описании IKITEK предполагает, что он имеет аналогичную функциональность, но регистр отображает

Предполагая, что код будет в основном отображать однотонный текст и графику, идеальным подходом, по-видимому, будет использование CPLD для сопряжения порта SPI ARM с параллельным портом дисплея и обеспечения возможности загрузки CPLD с цветами переднего плана / фона. Это было бы особенно хорошо, если бы у кого-то было средство записи «прозрачных» пикселей. Учитывая шрифт в виде двухцветного растрового изображения, можно просто загрузить данные шрифта непосредственно в порт SPI; это позволило бы показывать данные шрифта со скоростью один пиксель каждые два тактовых импульса ARM. С другой стороны, CPLD, достаточный для выполнения такой задачи управления отображением, будет стоить около 2 долларов.

Как лучше всего связать ARM с цветным ЖК-дисплеем, если цель состоит в том, чтобы в основном показывать однотонный текст или простую (например, 16-цветную или 64-цветную) графику?

редактировать

Я выполнил множество проектов ЖК-дисплеев со многими типами ЖК-дисплеев, включая ЖК-дисплеи с символьным режимом, пользовательские мультиплексированные сегменты 3: 1 на основе моего собственного метода привода, черно-белые графические ЖК-дисплеи со встроенными контроллерами и черно-белые дисплеи. -белые ЖК-дисплеи, для которых я разработал свой собственный контроллер на основе CPLD для взаимодействия с универсальным DMA микроконтроллера общего назначения (обеспечивая четкость даже в четырех уровнях). Я горжусь тем, что делаю показы быстрыми. Один из графических контроллеров был чем-то вроде собаки, которой требовалось около 1/10 секунды для полного обновления экрана даже при записи постоянных данных, но большинство моих дисплеев может воспроизводить даже довольно сложное изображение менее чем за 1/50 секунды.

Многие из проектов, которые я делаю, работают на батарейках, поэтому проблема тока - это проблема. Контроллер дисплея на основе DMA у меня работал хорошо, но это было для линейного проекта. Я считаю, что единственный способ получить разумное потребление тока от графического ЖК-дисплея - это использовать контроллер, который объединяет буфер дисплея и драйверы колонок. Посылка большого количества дисплея между чипами в каждом кадре будет тратить много энергии даже на дисплей с одним битом на пиксель; на цветном дисплее с шестнадцатью битами на пиксель это было бы намного хуже.

Я только начал смотреть на листы данных цветного LCD; похоже, что во многих дисплеях используется контроллер, аналогичный ILITEK ILI9320, хотя все таблицы данных, которые я нашел для контроллеров, основанных на этом общем проекте, были помечены как «предварительные». Некоторым нравится, что ILITEK one утверждает, что имеет функции маскировки и прозрачности, но не перечисляет никаких регистров для них; Я не знаю, есть ли у настоящих чипов такие функции, но «предварительные» таблицы данных не указали их, или они опускали функции, но забыли упомянуть их. Если на практике все такие чипы имеют функции прозрачности, кажется разумным разработать их; если нет, то нет.

Я ожидаю, что для большинства проектов типичный экран будет состоять из произвольно размещенного текста в умеренном количестве одноцветных шрифтов произвольного размера. Шрифты, скорее всего, будут храниться в виде битовых данных. При использовании Cortex-M3, если бы я хотел записать отображение с параллельными данными, «внутренний цикл» кода для записи двух пикселей, вероятно, закончился бы примерно так:

  rol r0, r0, # 2; Получить один бит в C, другой в N
  ММСК
  strhcs r1, [r3, # DATA_OFS]; Написать данные
  strhcc r2, [r3, # DATA_OFS]; Написать данные
  strb r4, [r3, # CLOCK_SET_OFS]; Установите часы высоко
  strb r4, [r3, # CLOCK_CLR_OFS]; Установите низкие часы
  itmi
  strhmi r1, [r3, # DATA_OFS]; Написать данные
  strhpl r2, [r3, # DATA_OFS]; Написать данные
  strb r4, [r3, # CLOCK_SET_OFS]; Установите часы высоко
  strb r4, [r3, # CLOCK_CLR_OFS]; Установите низкие часы

Не самая быстрая вещь в мире. Устранение записи в инструкции установки / сброса часов поможет. Я полагаю, что нет хорошего независимого от архитектуры способа устранения обеих тактовых записей, но может быть довольно распространенный способ, который позволил бы устранить одну (например, многие микросхемы могут иметь счетчик / ШИМ, который может быть сделан для импульсного вывода кратко в ответ на одну операцию сохранения памяти).

Использование порта SPI и добавление оборудования для синхронизации одного пикселя на бит значительно ускорит доступ к дисплею. Если используется отображение без маскировки и прозрачности, CPLD должен будет включать счетчик адресов и для каждого пикселя либо синхронизировать слово данных пикселя, либо команду set-address для позиции следующего пикселя (для которой ему потребуется счетчик). ). В отличие от этого, если бы дисплей имел маскировку и прозрачность, все, что мне нужно было бы сделать, - это чтобы CPLD поддерживал режим, в котором после его синхронизации в 16 битов каждый дополнительный бит выводил бы слово данных на дисплей с LSB отслеживает вывод SDI (может даже не потребоваться использование CPLD - только несколько обычных логических чипов). Я бы установил цвет прозрачности на тот цвет, который я хочу написать, но с включенным LSB.

Я не хочу придумывать красивый дизайн, основанный на маскировке и прозрачности, а потом обнаруживать, что только у дисплеев с такими функциями время выполнения заказа составляет 30 недель. С другой стороны, если такие дисплеи будут и будут широко доступны у многих поставщиков, я не хочу, чтобы паранойя по поводу доступности заставляла меня использовать некачественный дизайн.

Supercat
источник
1
Не ответ, поскольку ваши требования включают не привязку к конкретному поставщику ARM, но семейство микроконтроллеров LPC LH754xx включает в себя встроенный драйвер ЖК-дисплея.
Кевин Вермеер
@reemrevnivek: Есть несколько чипов ARM с маленькими драйверами LCD; Я не могу представить, чтобы какой-либо чип имел драйвер, подходящий для графического дисплея любого полезного размера, присутствующего в пакете, который можно было бы использовать для чего угодно, кроме сценария «чип на стекле». Микросхема может иметь контроллер, но ЖК-дисплей с контроллером «чип на стекле» может показаться более энергоэффективным и с ним легче работать. Я проверю чип, который вы упомянули, хотя - может быть интересно.
суперкат
@supercat - Я думаю о ЖК-дисплеях, которые имеют интерфейс RGB: тактовую частоту пикселей, линии синхронизации кадров и линии управления синхронизацией строк с параллельной шиной данных пикселей. Вы ожидаете использовать дисплей, контролируемый COG?
Кевин Вермеер
1
@reemrevnivek: Я так и думал. Они кажутся довольно распространенными, поскольку они используются во многих портативных устройствах с батарейным питанием, таких как мобильные телефоны. Дисплей COG со встроенным контроллером будет намного более энергоэффективным, чем тот, который требует непрерывно синхронизируемых данных RGB.
суперкат
@reemrevnivek: я только что обновил свой вопрос более подробно.
суперкат

Ответы:

7

Проблема с использованием микроконтроллера для управления ЖК-дисплеем заключается в том, что ЖК-дисплей требует постоянного внимания. Это может быть смягчено с помощью CPLD, управляемого через SPI (конечно, с использованием DMA), но тогда вы столкнетесь с другой проблемой: цветные ЖК-дисплеи требуют многоданных. Черно-белый формат 320x240 имеет минимальное значение 9,6 КБ, но делает его цветным 24-битным, и внезапно вам необходимо доставить 230 КБ данных за 1/60 секунды. (Не забывайте, однако, что вы можете получить 4-битное, 16-цветное управление, просто связав младшие 20 битов с одной настройкой). 24-разрядный кадровый буфер больше не умещается во встроенной памяти на большинстве микроконтроллеров, и у вас, вероятно, нет времени для чтения с внешней микросхемы памяти, синхронизации данных и выполнения другой обработки. Попытка сделать это с помощью CPLD (или FPGA) и чипа ОЗУ дает вам гораздо больше, чем цена в 2 доллара, из-за которой вы не смогли ответить на ваш вопрос.

Традиционным решением для сопряжения микроконтроллера с цветным ЖК-дисплеем является контроллер дисплея, такой как SSD1963. Вот очень простая блок-схема:

MCU в буфер RAM и регистры, а затем на интерфейс LCD

Параллельный ввод в большой фрейм-буфер ОЗУ (перевод: более $ 2), сопряженный с настраиваемым регистром параллельным ЖК-интерфейсом. Параллельный вход обычно совместим с интерфейсом шины памяти.

Рынок цветных ЖК-дисплеев не всегда легко найти в Интернете, обычно это только сфера деятельности OEM-производителей, а остальные покупают дисплеи у компаний, которые интегрируют контроллер с дисплеем. Лучший ресурс, который я нашел, был Crystal Fontz, в частности, эта страница по выбору графических ЖК-дисплеев . Прокрутите вниз для контроллеров, которые включают следующие опции (примечание: не все контроллеры цвета):

  • Epson S1D13521B01 E Ink Broadsheet (1 модуль)
  • Epson S1D13700 (11 модулей)
  • Совместимость с Epson SED1520 (8 модулей)
  • Совместимость с Himax HX8345 (1 модуль)
  • ILITek ILI9325 Совместимость (3 модуля)
  • Совместимость с KS0107 / KS0108 (26 модулей)
  • Novatek NT7534 (14 модулей)
  • Orise Technology OTM2201A (1 модуль)
  • Orise Technology SPFD5420A (1 модуль)
  • RAiO RA8835 (1 модуль)
  • Sanyo LC7981 (13 модулей)
  • Sino Wealth SH1101A (2 модуля)
  • Sitronix ST7920 (29 модулей)
  • Solomon SSD1303 (1 модуль)
  • Solomon SSD1305 (9 модулей)
  • Solomon SSD1325 (2 модуля)
  • Solomon SSD1332 (1 модуль)
  • Solomon SSD2119 (2 модуля)
  • ST STV8105 (1 модуль)
  • Toshiba T6963 (23 модуля)
Кевин Вермеер
источник
@reemrevnivek: я думал о цветных ЖК-дисплеях со встроенными контроллерами. Они кажутся довольно распространенными, но те, которые я видел, как правило, ожидают, что процессор будет тактировать во многих битах на пиксель, несмотря на то, что обычным сценарием отображения является отображение сплошного текста. Я однажды реализовал четырехуровневый ЖК-контроллер на основе DMA с использованием CPLD, и он работал очень хорошо, но это было устройство с питанием от сети.
Суперкат
1
@supercat - Очень немногие контроллеры ЖК-дисплеев ожидают, что ЦП будет синхронизировать много бит на пиксель для каждого кадра. Как правило, они ожидают, что это сделает специальное графическое оборудование . По сути, как только вы получаете довольно большие (то есть> 128 * 128) дисплеи RGB, вычислительная мощность, необходимая для генерации изображения для экрана, достаточно велика, чтобы выделенный графический процессор некоторого вида (даже если он интегрирован в MCU) почти всегда присутствует
Коннор Вольф
1
@supercat - Но то, что вы описываете, специализированный CPLD, который выполняет преобразование ASCII в растр, в основном является (специализированным) специализированным графическим оборудованием . Я в основном говорю, не изобретайте велосипед, и, вероятно, проще и экономичнее просто купить MCU со встроенным видеоинтерфейсом, чем спроектировать его самостоятельно.
Коннор Вольф
1
В любом случае, если вы действительно хотите «свернуть свои собственные», я бы сказал, используйте пару двухпортовых микросхем SRAM и один порт для вывода на ЖК-дисплей, а другой - для MCU. Это позволяет MCU изменять содержимое памяти с любой необходимой ему скоростью, а ЖК-дисплей может работать с частотой обновления.
Коннор Вольф
1
@ Фальшивое имя: это не будет преобразование ASCII в растр. В основном это будет преобразование бит-пиксель в мультибит-пиксель. Я думаю, вы неправильно понимаете, на что я смотрю. Я не ищу дисплеи, которые имеют только драйверы , но те, которые включают в себя драйверы и контроллеры , поэтому их нужно только подавать данные, когда вещи на экране меняются.
суперкат