Ефективне відображення простого тексту / графіки на кольоровому РК-екрані ARM


12

Розробляючи пристрій на основі ARM, який повинен відображати просту графіку на кольоровому РК-дисплеї, як слід найкраще займатися розробкою речей для швидкого оновлення, бажано, не прив'язуючись до конкретного постачальника ARM чи LCD? У моєму теперішньому проекті використовується чорно-білий дисплей, який можна блискавично рухати через порт SPI на PIC (перемальовуючи складний дисплей за 1/60 секунди). Здається, звичайні кольорові РК-дисплеї мають порт SPI, але навіть заповнення РК-дисплея 160x120 суцільним кольором займе 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 я добре працював, але це було для лінійного проекту. Я вважаю, що єдиний спосіб отримати розумний малюнок струму від графічного РК-дисплея - це використовувати контролер, який поєднує буфер дисплея та драйвери стовпців. Надсилання великої кількості дисплея між мікросхемами кожного кадру витратить багато енергії навіть на один біт на піксель; на кольоровому дисплеї з шістнадцятьма бітами на піксель було б набагато гірше.

Я лише почав переглядати дані кольорових РК-таблиць; на багатьох дисплеях, здається, використовується контролер, подібний до ILITEK ILI9320, хоча всі аркуші даних, які я знайшов для контролерів на основі цієї загальної конструкції, були позначені "попередніми". Деякі, як ІЛІТЕК, стверджують, що мають функції маскування та прозорості, але не перераховують жодних регістрів для них; Я не знаю, чи мають справжні мікросхеми такі особливості, але "попередні" аркуші даних нехтували їх включенням, чи вони пропустили функції, але забули згадати про них. Якщо на практиці всі такі мікросхеми мають функції прозорості, було б доцільно розробити їх; якщо ні, ні.

Я б очікував, що для більшості проектів типовий екран складається з довільно розміщеного тексту з помірною кількістю довільних шрифтів довільного розміру. Шрифти, швидше за все, зберігатимуться як дані про біт на піксель. Використовуючи Cortex-M3, якби я хотів записати дисплей з паралельними даними, "внутрішній цикл" коду для запису двох пікселів, ймовірно, закінчився б чимось на зразок:

  rol r0, r0, # 2; Отримайте один біт у С, інший у N
  itcs
  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 повинен був би включити лічильник адрес, і для кожного пікселя або годинник, слово піксельних даних, або інша команда набору адрес для позиції наступного пікселя (для чого знадобиться лічильник ). На противагу цьому, якби дисплей маскував та прозорів, все, що мені потрібно було б зробити це, щоб CPLD підтримував режим, коли після того, як він набрався в 16 біт, кожен додатковий біт передавав би слово з даних на дисплей із LSB відстеження контакту SDI (можливо, навіть не знадобиться використовувати CPLD - лише кілька звичайних логічних мікросхем). Я б встановив колір прозорості таким, щоб він був кольором, який я хочу написати, але з перевернутим LSB.

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


1
Це не відповідь, оскільки ваші вимоги включають не прив’язання до конкретного постачальника ARM, але сімейство мікроконтролерів LPC LH754xx включає в себе вбудований драйвер LCD.
Кевін Вермер

@reemrevnivek: Є ряд мікросхем ARM з невеликими драйверами РК; Я не можу собі уявити, щоб будь-який чіп мав драйвер, який підходить для будь-якого графічного дисплея корисного розміру, що з’являється в пакеті, який би міг бути використаний у будь-якому іншому, крім сценарію «чіп на склі». У мікросхемі може бути контролер, але РК-дисплей з контролером мікросхеми на склі здається більш енергоефективним та простішим у роботі. Я перевірю чіп, про який ви згадали, але може бути цікавим.
supercat

@supercat - я думаю про РК-дисплеї, які мають інтерфейс RGB: піксельний годинник, синхронізація кадру та лінії керування синхронізацією ліній з паралельною шиною даних пікселів. Ви очікуєте використання дисплея, керованого COG?
Кевін Вермер

1
@reemrevnivek: Про це я і думав. Вони здаються досить поширеними, оскільки їх використовують у багатьох переносних акумуляторних пристроях, таких як мобільні телефони. Дисплей COG із вбудованим контролером буде набагато ефективнішим за енерговитрат, ніж той, для якого потрібні постійні дані RGB.
supercat

@reemrevnivek: Щойно я оновив своє запитання детальніше.
supercat

Відповіді:


7

Проблема використання мікроконтролера для управління ЖК полягає в тому, що РКД потребує постійної уваги. Це можна усунути за допомогою CPLD, керованого через SPI (звичайно, використовуючи DMA), але тоді ви стикаєтеся з іншою проблемою: кольорові РК вимагають багатоданих. 320х240 чорно-білих кольорів є граничними в 9,6 КБ, але зробіть це 24-бітним кольором і раптом вам потрібно доставити 230 КБ даних за 1/60 секунди. (Не забудьте, однак, що ви можете отримати 4-розрядний 16-кольоровий контроль, просто прив’язавши низькі 20 біт до однієї настройки). 24-розрядний буфер кадру більше не вписується у вбудовану оперативну пам’ять на більшості мікроконтролерів, і ви, мабуть, не встигаєте читати із зовнішнього чіпа оперативної пам’яті, обробляти дані та виконувати іншу обробку. Намагаючись зробити це за допомогою CPLD (або FPGA) та мікросхеми RAM, ви отримаєте набагато більше ціни на 2 долари, що спричинило заперечення у вашому запитанні.

Традиційним рішенням для поєднання мікроконтролера з кольоровим РК є контролер дисплея, як SSD1963. Ось дуже проста блок-схема:

Буфер MCU до оперативної пам’яті та регістри, а звідти до інтерфейсу LCD

Паралельний вхід у великий буфер фрейму оперативної пам’яті (Переклад: Більше 2 доларів) поєднаний з паралельним РК-інтерфейсом, який можна налаштувати на регістр. Паралельний вхід зазвичай сумісний з інтерфейсом шини пам'яті.

Ринок кольорових РК-дисків не завжди легко знайти в Інтернеті, зазвичай це домен оригіналів оригіналів, а решта купують дисплеї від компаній, які інтегрують контролер з дисплеєм. Кращим ресурсом, який я знайшов, був Crystal Fontz, зокрема ця сторінка щодо вибору графічних РК-дисплеїв . Прокрутіть донизу контролери, які містять наступні параметри (примітка: Не всі є кольоровими контролерами):

  • Електронний лист чорнила Epson S1D13521B01 E (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: Я думав про кольорові РК-дисплеї із вбудованими контролерами. Вони здаються досить поширеними, але ті, кого я бачив, як правило, очікують, що процесор буде працювати в багатьох бітах на піксель, хоча загальним сценарієм відображення є відображення тексту однотонного кольору. Я реалізував 4-рівневий РК-контролер в сірій шкалі один раз за допомогою CPLD, і він працював дуже добре, але це був лінійний пристрій.
supercat

1
@supercat - Дуже мало ЖК-контролерів очікує, що процесор зможе зарядити багато біт на піксель для кожного кадру. Вони, як правило, очікують, що це займеться спеціалізованим графічним обладнанням . В основному, як тільки ви потрапляєте на досить великі (тобто> 128 * 128) дисплеї RGB, потужність обробки, необхідна для генерування зображення для екрана, є достатньо великою, щоб виділений графічний процесор (навіть якщо він інтегрований у MCU) майже завжди присутній.
Вонор Коннор

1
@supercat - Але те, що ви описуєте, спеціалізований CPLD, який робить ASCII для растрових перетворень, в основному є (спеціальним) спеціалізованим графічним обладнанням . Я в основному кажу, що не вигадуйте колесо, і, мабуть, простіше і вигідніше просто придбати MCU з вбудованим відеоінтерфейсом, а потім спроектувати його самостійно.
Вонор Коннор

1
У будь-якому разі, якщо ви дійсно хочете зробити власний прокат, я б сказав, скористайтеся парою двопортових мікросхем SRAM та використовуйте один порт для виведення на РК, а другий для MCU. Це дозволяє MCU змінювати вміст пам'яті з будь-якою швидкістю, яку вона бажає, а РК-дисплей може працювати на швидкості оновлення.
Вонор Коннор

1
@Fake Name: Це не буде ASCII для растрового перетворення. В основному це буде біт на піксель для перетворення на кілька біт на піксель. Я думаю, ви нерозумієте те, на що я дивлюсь. Я не шукаю дисплеї, у яких є лише драйвери , але такі, які включають драйвери та контролери , тому їм потрібно вводити дані лише тоді, коли зміни на екрані змінюються.
supercat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.