знакосинтезирующий индикатор USB
Будем использовать дисплей на контроллере Hitachi 44780. Эти дисплеи отличаются ужасной распространённостью, а также относительной дешевизной и доступностью. Дисплей можно купить почти в любом радиомагазине, либо выкусить, например, из какого-нибудь старого МФУ. Выбирая дисплей, стоит обратить внимание на поддержку кириллических символов. Ещё некоторые дисплеи имеют EL или CCFL подсветку, для таких дисплеев иногда нужен внешний инвертор для питания подсветки (110 В / 400 Гц). Использовался дисплей WH1602A-NGG-CT. Раскладка этого дисплея — 2 строчки по 16 символов, поддерживается кириллица. Символы яркие и хорошо видны под любым углом, подсветки нету.
Пишем прошивкуПрошивка будет реализовывать USB CDC-ACM (USB Communication Device Class, Abstract Control Model) устройство. Проще говоря, девайс увидится в системе как последовательный порт, что, естесственно, очень удобно. В этот виртуальный порт можно записывать символы, и они будут появляться на дисплее. Всё очень просто. Кстати, вот нативный набор символов дисплея:
Так что нам понадобится добавить в прошивку перекодировку в это безобразие, например, из КОИ-8.
В прошивке я использовал публичные VID/PID, рекомендуемые к использованию с V-USB для CDC-устройств. Копирасты и прочие тунеядцы в этом могут быть спокойны.
С моей прошивкой можно использовать двухстрочные дисплеи, для четырёхстрочных дисплеев (с одним или двумя HD44780) прошивку придётся доработать.
Для прошивки ATmega48 я воспользовался
USBasp — простым, быстрым и удобным программатором. Для работы с программатором понадобится avrdude (входит в
WinAVR), кроме того удобно использовать GUI оболочку (например,
такую).
Подключаем устройствоЕсли ты используешь Linux, то достаточно воткнуть девайс в USB-порт, после чего появится устройство /dev/ttyACM0.
Windows сами не догадаются загрузить нужный драйвер, так что нужно дать им специальный inf-файлик (есть в архиве с проектом), чтобы ассоциировать устройство с драйвером. После этого в системе появится COM-порт, например, COM3.
Я подключал устройство к роутеру под управлением
OpenWrt. В OpenWrt по умолчанию не включён модуль cdc_acm. Чтобы устройство подхватилось, пришлось собрать и установить пакет kmod-usb-acm.
Проверяем$ printf "Превед Медвед\r\n Гг Y" | iconv -f utf-8 -t koi-8 > /dev/ttyACM0
Подключаем дисплей к lcd4linuxlcd4linux позволяет выводить всевозможную информацию на дисплей. На настройке lcd4linux я останавливаться не буду, просто отредактируй файл /etc/lcd4linux.conf по вкусу. Драйвер дисплея нужно использовать SimpleLCD, в конфигурации не забыть указать порт (/dev/ttyACM0).