Модернизация прошивки светодиодного знакосинтезирующего табло

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

Знакомство с предметом модернизации

Световое табло производства французской фирмы SAYAG Electronics International (S.E.I.) представляет собой продолговатый короб из алюминиевого профиля, закрытый панелью с размещённой на ней матрицей из 104х7=728 светодиодов (рис. 1):

Рис. 1. Внешний вид светодиодного табло Sayag

С внутренней стороны на плате матрицы закреплены все остальные электронные блоки изделия.

В штатном режиме табло позволяет выводить на экран до 40 информационных текстов, программируемых пользователем. Каждый текст выводится одним из пяти предусмотренных изготовителем латинских моноширинных шрифтов, отличающихся стилем начертания и шириной символов. Существует два принципиальных вида текстов: полностью вписываемые в экран (т.е. размером не более 13 стандартных или 21 узкого символа) или произвольной длины (до 128 символов). Тексты второго вида отображаются только в виде «бегущей строки» с настраиваемой скоростью перемещения.

Помимо знаков алфавита, в программируемый текст могут быть также включены спецсимволы, автоматически заменяемые при выводе информацией от встроенных часов и календаря. Таким образом, на экран могут быть автоматически выведены: текущее время в 24-часовом формате, название дня недели и текущая дата (прописью). В доставшемся автору этих строк экземпляре табло все эти тексты выводились на французском языке.

Первоначальной задачей модернизации табло была поставлена его русификация (введение кириллического шрифта). Для этого в первую очередь оказалось необходимо получить доступ к его внутренним блокам и выяснить местонахождение соответствующего ПЗУ. После удаления винтов, крепящих торцевые виниловые заглушки к корпусу, электронную часть табло удалось просто выдвинуть из алюминиевого корпуса. С обратной стороны платы открылся вид, показанный на рис. 2:

Рис. 2. Внешний вид светового табло со снятым кожухом

Оказалось, что табло построено сразу на двух автономных микроконтроллерах 80С31, связанных между собой последовательной шиной данных. Выяснилось также, что левый (на рисунке) контроллер выполнял функции управляющего модуля, а правый – сдвигового регистра, то есть развёртки графической информации непосредственно на матрицу светодиодов. Так как программная архитектура изделия была неизвестна, прошивку знакогенератора на начальном этапе можно было искать в ПЗУ обоих контроллеров. В итоге знакогенератор был обнаружен в прошивке управляющего модуля методом её визуального просмотра в программе-текстовом редакторе. Наличие графической информации «выдало» обилие символов с кодом 127, имеющих характерное очертание «домика» (символ 127 соответствует непрерывной линии размером в 7 точек).

Программа

После того, как было установлено, что прошивка табло не защищена контрольной суммой, было принято решение заменить встроенный шрифт №4 на русифицированный. Выбор именно на этот шрифт пал сразу по нескольким причинам. Во-первых, при первом включении без установленных литиевых батарей световое табло отрабатывает демонстрационную программу, в которой используются шрифты №1 и №5. Соответственно, русификация этих шрифтов привела бы к искажению демо-программы. Во-вторых, шрифт №4 – один из трёх наборов символов стандартной ширины (№№1, 4, 5), в то время как уширенных и узких шрифтов имелось всего лишь по одному (№3 и №2 соответственно). Наконец, в-третьих, начертание символов этого заводского «дизайнерского» шрифта субъективно показалось автору наименее читаемым издалека и малопривлекательным по внешнему виду.

Рис. 3. Окно программы редактирования знакогенератораС учётом большого объёма корректировок вариант ручной правки отпал сразу. Вместо этого была написана несложная программа для Windows с наглядным интерфейсом (рис. 3). Коротко рассмотрим её работу. При запуске программы необходимо указать исходный рабочий файл (фирменная прошивка табло, скопированная на программаторе) и файл модифицированной копии кнопками Source file и Target file соответственно. Так как знакогенератор обычно располагают «в глубине» прошивок, в программе предусмотрен параметр «начальное смещение» (Starting offset), с которого она начнёт подгрузку и отображение графической информации. Например, у рассматриваемого табло S.E.I. L1.18M7 начало знакогенератора оказалось расположено с адреса 54231 (дес.). После указания этого параметра необходимо нажать кнопку Start processing. Программа «перемотает» ненужную часть прошивки и перейдёт к указанному начальному адресу, при этом справа в поле редактора отобразится первый найденный символ.

Далее необходимо выбрать стандартный размер символов, с которыми предстоит работать (от 4х7 до 7х7). Данный параметр определяет количество графической информации, подгружаемой в редактор при смене текущего символа, которое должно быть кратно ширине последнего. Кнопки [+1] и [-1] позволяют скорректировать положение начала символа в поле редактора для более удобной работы. В зависимости от схемотехнического и программного решения конкретного светового табло символы знакогенератора могут храниться в ПЗУ по строкам или по столбцам. Разработанная программа-редактор позволяет работать с обоими типами знакогенератора, однако в первом случае символы будут отображаться «лежащими на боку».

По окончании интересующего пользователя набора символов можно завершить редактирование прошивки нажатием кнопки Skip the rest. После появления подтверждающего сообщения полученный модифицированный файл можно записывать в ПЗУ устройства. Как уже отмечалось ранее, в рассматриваемом примере встроенный латинский шрифт №4 был заменён на кириллический, сходный по начертанию с полужирными шрифтами матричных принтеров. В силу 7-битного кодирования адреса символа (так как разработчиками табло не была предусмотрена возможность каких-либо локализаций) пришлось разместить символы в соответствии с уже основательно забытой кодировкой КОИ-7 (табл. 1). Незначительной частью малоиспользуемых букв пришлось вовсе пожертвовать, так как их коды оказались заняты под вывод информации часов и календаря.

Табл. 1. Кодировка КОИ-7 применительно к светодиодному табло

LAT @ A B C D E F G H I J K L M N O
РУС Ю А Б Ц Д Е Ф Г Х И Й К Л М Н О
LAT P Q R S T U V W X Y Z { | } ^ \
РУС П Я Р С Т У Ж В Ь Ы З Ш Э Щ Ч Ъ

Дополнительные возможности

Появление на экране табло русского языка только более отчётливо подчеркнуло неудобство использования встроенных часов. Названия дней недели и месяцев по-прежнему выводились на французском языке, однако на этот раз уже русскими буквами, от чего смотрелись ещё более нелепо. Вторым этапом модернизации стал поиск и аккуратная ручная коррекция соответствующих текстов в прошивке табло.

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

Рис. 4. Русифицированное световое табло в действии

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

Результат проделанной работы в действии показан на рис. 4 (для экономии места три последовательных изображения совмещены на одном рисунке). Помимо изменяемого набора отображаемых текстов (один из которых может непрерывно корректироваться внешним устройством или компьютером) табло также обладает функциями автоматического изменения яркости и включения/гашения экрана в определённое время суток («спящий режим»). На сегодняшний день для автора и его гостей оно представляет собой не только часы и календарь в оригинальном варианте, но и без преувеличения целый домашний информационный центр, по мере необходимости используемый для разнообразных целей (от показа текстов телесуфлёра до отображения данных АОН). Заключение Целью данной статьи явилась демонстрация общих подходов к работе с нелокализованными устройствами отображения текстовой информации, а также способов решения типичных задач в этой области. Автор надеется, что полученный им опыт и разработанное им программное обеспечение будут полезны и другим радиолюбителям.

Данный материал опубликован в журнале «Радиолюбитель» (г. Минск) №4, 2007 г., с. 61.