Подключаем LCD дисплей через USB
Введение
По замыслу автора, LCD2USB должен быть дешевым и собранным из легко доступных компонентов. Поэтому схема основана на микроконтроллере Atmel ATmega8, и в ней нет деталей, которые трудно найти. Общая стоимость устройства составляет от 5 до 10 Евро. Для устройства разработано демонстрационное приложение, которое работает под Linux, MacOS X и Windows.
Аппаратная часть LCD2USB сделана на ATmega8, дешевом и легко доступном микроконтроллере с 8 Кб флеш-памяти (из которой приблизительно 3 Кб заняты программой) и 2 Кб – ОЗУ. Остальные компоненты – преимущественно разъемы для подключения ЖК индикаторов и разъем интерфейса с ПК.Светодиод питания (LED1) показывает, что система питается от USB. Тактовая частота задается кварцевым резонатором 12 МГц. Использование кварцевого резонатора необходимо, поскольку для интерфейса USB требуется высокая точность временных параметров.
USB интерфейс устройства LCD2USB реализован чисто программно и использует три вывода AVR контроллера (PC0, PC1 и PD2). Эта программная реализация поддерживает только низкоскоростной USB, о чем ПК узнает благодаря резистору R1.
В интерфейсе используется разъем типа USBB. Это квадратный разъем, который обычно применяется для USB устройств (в отличие от плоских разъемов типа USBA, используемых для USB хостов). Разъем USB, в отличие от всех остальных компонентов, монтируется на обратной стороне печатной платы. Кроме того, кабель можно подключить и без разъема, со стороны компонентов, как показано на рисунках ниже.
Дисплеи: 2×16, 4×16, 4×20 Дисплеи: 2×20, 2×40
нтерфейс программирования (SPI)
Программа загружается в контроллер через стандартный 10 контактный разъем AVR ISP (SV1). Для загрузки потребуется кабель программирования. Потребуются также совместимые с этим кабелем программы для ПК, такие как Ponyprog или UISP.Разъем JP3 подключен к последовательному интерфейсу микроконтроллера. Этот разъем предназначается только для целей отладки и не может быть напрямую подключен к интерфейсу RS-232 ПК. Для подключения понадобится согласователь уровней.
Загрузка прошивки в контроллер
Если вы знакомы с программированием для Atmel, вы, вероятно, знаете что делать. Makefile в папкеlcd2usb/firmware/Makefile подразумевает, что вы используете простой адаптер для параллельного порта, совместимый с STK200.Подключите собранное устройство (без дисплея) к ПК через USB. Устройство не будет определено до тех пор, пока в нем не будет прошивки. Подключите устройство через кабель программирования к ПК с ОС Linux и установленным uisp tool, после чего напечатайте "make fuse; make flash-nodep", чтобы загрузить прошивку в контроллер.
Если Makefile не сработает, вы можете также прошить устройство вручную, используя avrdude и вышеупомянутый совместимый с STK200 адаптер принтерного порта со следующими параметрами:
avrdude -c stk200 -p atmega8 -U lfuse:w:0x9f:m -U hfuse:w:0xc9:m -U flash:w:firmware-avrusb.hex
Чтобы вручную загрузить прошивку, используя usbasp, просто используйте следующую команду:
avrdude -c usbasp -p atmega8 -U lfuse:w:0x9f:m -U hfuse:w:0xc9:m -U flash:w:firmware-avrusb.hex
Конечно, вы можете использовать другую систему программирования AVR, но вам вероятно придется сделать небольшие изменения в файле Makefile.
Описание протокола
Для простоты, LCD2USB использует только управляющие USB сообщения. Более эффективная и быстрая групповая пересылка доступна только для высокоскоростных устройств. Управляющее сообщение для низкоскоростных устройств состоит из 8 байт. Первый байт указывает тип управления, его значения фиксированы для команд заданных продавцом устройства (производителем). LCD2USB использует его для своих целей (не заданные производителем команды используются для запроса номера и ID устройства и т.д.). Оставшиеся семь байт представляют собой: тип запроса (1 байт), значение (2 байта), индекс (2 байта) и поле длинны (2 байта) для данных, передаваемых с контрольной передачей. Протокол LCD2USB не посылает дополнительных данных, поэтому, из соображений совместимости, последние два байта должны быть нулевыми. Оставшиеся четыре байта (2 байта значения и 2 байта индекса) оставлены для передачи данных. Таким образом, за одну транзакцию передаются четыре байта. Это могут быть четыре байта команд или четыре байта данных для HD44780.
Подробное описание байта запроса
Бит 7 6 5 4 3 2 1 0
Название C C C T T R L L
CCC = тип команды
0 (000) = эхо
1 (001) = команда
2 (010) = данные
3 (011) = установить
4 (100) = получить
5 (101) = зарезервирован для использования в будущем
6 (110) = зарезервирован для использования в будущем
7 (111) = зарезервирован для использования в будущем
TT = id назначения
R = зарезервирован для использования в будущем, установлен в 0
LL = число байт в передаче – 1
set 0 - установить яркость
set 1 - установить контраст
get 0 - получить версию прошивки (msb = основная версия, lsb = промежуточная версия)
get 1 - получить button bitmap
get 2 - получить обнаруженные контроллеры
Дополнительные подробности вы найдете в исходном коде тестовой программы, находящейся в архиве с прошивкой для LCD2USB.
Программа
Первоначально интерфейс LCD2USB был разработан для использования с lcd4linux. В то же время LCD Smartie и LCDProc также были усовершенствованы, и теперь поддерживают интерфейс LCD2USB. В архив с прошивкой для LCD2USB включено маленькое демо приложение, которое можно использовать для дальнейшего портирования LCD2USB на другие платформы. В настоящий момент эта программа поддерживается Linux, MacOS X и Windows.
Использование LCD2USB под Windows
Для того чтобы использовать драйвер, в системе должна быть установлена libusb-win32 и LCD2USB.DLLдолжна быть помещена в папку «displays» программы LCD Smartie. В результате, устройство должно быть обнаружено автоматически. Драйвер тестировался только для дисплея 20x4.
Версия 1.08 (avrusb)/2.08 (usbtiny)
Архив с исходным кодом для драйвера LCD2USB-smartie.zip
Оригинал статьи: http://www.harbaum.org/till/lcd2usb/index.shtml
Автор: Till Harbaum <Till@Harbaum.org>

