Видеоконтроллер RA8875 и внешние шрифты на EEPROM W25Q32 для быстрого вывода текста на экран дисплея

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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

У видеоконтроллера RA8875 есть возможность подключить внешнее EEPROM со шрифтами. Информацию об этих EEPROM можно посмотреть на Github страничке xlatb. Управляющему микроконтроллеру достаточно переключить RA8875 в текстовой режим и отправить текст, вывод этого текста происходит практически мгновенно.

Также из EEPROM можно выводить изображения и спрайты.

Так как мне хотелось иметь возможность загружать свои шрифты, я решил подключить к видеоконтроллеру RA8875 EEPROM W25Q32 записав в неё созданные мной шрифты. В datasheet ER3304-1 есть информация, какие шрифты и какую область занимают.

Я выбрал шесть областей для ASCII кодировки по 96 символов каждая, высотой 16, 24 и 32 пикселя. В ER3304-1 загружены Arial и Times шрифты, так как символов всего 96, я разместил в области Arial английские буквы, а в области для Times русские. Итого получилось 3 полноценных шрифта, высотой 16, 24 и 32 пикселя. Эти шрифты «proportional adjusted», что означает, что каждый символ в EEPROM занимает 34, 74 и 130 байт соответственно, (это позволяет контроллеру просто вычислять , где в EEPROM находится каждый символ). Но при выводе на экран первые два байта каждого символа указывают сколько бит в ширину будет выводится, то есть, если первые два байта 0x00, 0x0C то в ширину будет выведено 12 пикселей, не смотря на то, что ширина символа например 16 бит. Шрифт должен быть представлен в EEPROM таким образом:

Первые два байта - ширина символа в пикселях, затем сам шрифт. Итого получается, например, для 16 пиксельного шрифта 32+2=34 байта.

Шрифт нарисован в программе BitFontCreator и экспортирован файл ассемблера. Для преобразования этих данных в HEX файл с размещением шрифтов по определенным адресам была написана консольная программа на Python. Сильно не пинайте за стиль. Я понимаю, что он не соответствует стандартам. Также в этом файле можно указать символы, которые надо скопировать из одного места кодовой таблицы в другое. Это может понадобиться, для того чтобы выводя текст русским шрифтом, не переключаться на английский для вывода цифр.

Конвертация в файл ассемблера происходит несколько кривовато, зачем то добавлены лишние запятые, но этот баг я учел в программе создания hex файла.

При создании шрифта необходимо сдвигать изображение символа влево, для того чтобы можно было обрезать пустое пространство, задав необходимую ширину символа в пикселях.

На Github помимо шрифтов, готовой прошивки и утилиты для создания hex файла из asm размещена также схема и печатная плата модуля дисплея. Данный модуль создавался для eZ80f91.

Источник: https://habr.com/ru/post/551820/


Интересные статьи

Интересные статьи

Привет, Хабр! Не успела остыть печь после выхода десктопной версии Vivaldi на прошлой неделе, а мы уже испекли новую мобильную версию — Vivaldi 3.6 для Android. В данном релизе мы ...
Статья о том, как упорядочить найм1. Информируем о вакансии2. Ведём до найма3. Автоматизируем скучное4. Оформляем и выводим на работу5. Отчитываемся по итогам6. Помогаем с адаптацией...
Недавно я увидел пост с приглашением разработчиков в проект Flipper Zero и подал заявку. Меня добавили в репозиторий с прошивкой и я стал много думать над юзабилити устройства. Прис...
Яркость дисплеев обычно регулируют с помощью ШИМ-сигнала. Технология простая и дешевая, но вызывает мерцание экрана, что сказывается на здоровье глаз. Расскажем, какие есть альтернативы, как они ...
В интернет-магазинах, в том числе сделанных на готовых решениях 1C-Битрикс, часто неправильно реализован функционал быстрого заказа «Купить в 1 клик».