Как стать автором
Обновить
4
0
Ермаков Алексей @Solgo

Разработчик

Отправить сообщение
Можно спорить о лучшем решении в каком-то конкретном случае, с четко оговоренными параметрами, которые надо оптимизировать. Но спорить на тему, как лучше хранить шрифт в памяти вообще, по крайней мере — пустая трата времени.

Я и не претендую на единственное "правильное", решение :)Просто может кому-то вариант со шрифтами в EEPROM окажется в тему.

В EEPROM смело уместиться 6 шрифтов, некоторые, редко используемые можно и программно вывести. Другими словами не надо выбирать, можно и то и то использовать.

Их обычно немного надо, разнообразие шрифтов — дурной тон в дизайне.

Но все равно это на много больше чем 3 обращения на 1 символ :)

Тут не о чем спорить, у вас не было возможности подключить внешнее EEPROM со шрифтами, поэтому вы использовали 16 битную шину для обмена данными и усиленно оптимизировали код формирования обмена данными с дисплеем. У меня была такая возможность, и я предпочел внешнее EEPROM. И да, у RA8875 нет 16 битного режима, только 8 и 24 бита. На счет окна вывода, есть блочный перенос между слоями изображения, между внешней EEPROM и изображением, но вот записи блока микроконтроллером я не нашел, может быть плохо искал.
Спасибо за развернутый комментарий, было бы интересно узнать какая ширина шины по которой идет обмен с контроллером дисплея и какой контроллер дисплея используется. На моем видео я вывожу по 192 символа 16х16, 24х24, 32х32 битовых шрифта, хотелось бы увидеть видео с выводом у вас хотя бы половины этого объема чтобы оценить скорость.
По SPI вообще получается почти 700µs для символа 24х24.
Ничего странного, шрифт рисуется по одной точке, по три байта каждая. Координаты и цвет этой точки надо еще вычислить, это не полигон залить. Если грубо прикинуть, цикл записи в память по параллельной шине eZ80, при тактовой частоте 50МГц — 80ns. Вывод буквы 24х24х3 занимает 138µs. И это просто вывод, без вычислений места и цвета точки.
И кто так делает? Мне лично больше нравяться скучные символы, тем более что сейчас шрифты разрабатывают в специализированных программах и выводят в том виде в котором необходимо. А вот так колитить по биту каждый символ это надо иметь очень много свободного времени.
Обновил видео в статье, теперь можно сравнить два способа вывода текста, программный и из EEPROM.
Я не понимаю о чем вы говорите, что значит «кодирование шрифта в исходнике»?
Обычно это массив констант или вы знаете какой-то другой способ?
Даже в специализированной программе и то очень муторно создавать шрифт, а в ASCII это будет вообще жуть.
На данном видео мало текста, и не видно, на сколько медленно и печально рисуется текст. Я сделаю видео для контраста, вывод того же текста, что в моем видео только с программными шрифтами. И тогда вы почувствуете разницу.
Согласен, но тема поста не про разработку шрифта. Я сделал эти шрифты, чтобы показать возможность использования собственных внешних шрифтов с RA8875, и если честно, это отняло очень много времени. До того, как я написал программу на Python для создания hex файла, ручная компиляция прошивки EEPROM тоже было делом очень не быстрым.
Было бы интересно, если бы кто-то написал статью про последовательность разработки битовых шрифтов. Я для себя выработал такую схему, сначала рисуются буквы q,g,y,p,j,W и выбирается средняя линия букв, потом уже все остальные буквы. Наверняка есть еще много тонкостей, чтобы сделать шрифт красивым и потратить на это приемлемое количество времени.
Выхода два, уменьшить заглавные буквы, что даст возможность сдвинуть верхний уровень строчных букв выше или использовать битовые матрицы с пропорцией 1/2 (ширина/высота).
Например:


Но тут заглавная буква W выглядит куцо. Шрифт при ограниченных ресурсах — это компромисс, можно рисовать текст как графику и это будет медленно, но красиво. Если пытаться вписаться в битовые матрицы, то это будет выбор между общим размером букв и сдвигом некоторых букв типа q,p,y относительно горизонтальной оси.
Подсветка на другом, тоже недорогом преобразователе ZXSC400.
Этой разработке уже года три — четыре, может по элементной базе сейчас можно и подешевле что-нибудь найти.
Я использовал немного более дешевый преобразователь для питания дисплея TPS61040. Работает нормально, пришлось немного пошаманить с выходным фильтром, чтобы убрать муар.

Информация

В рейтинге
Не участвует
Откуда
Нижний Новгород, Нижегородская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Разработчик РЭА
Middle
От 200 000 ₽
Circuitry
Development of printed circuit board
Electronics Development
PCB design
Verilog HDL
FPGA
Cortex-M3
Pic Microcontroller
STM32