Проект Eldigi.ru пережил своё новое становление. В связи с этим на сайте могут быть ошибки. Нашли ошибку? Помогите проекту, выделите её и нажмите Ctrl+Enter. Подробнее...

LCD2USB - подключение LCD индикатора к компьютеру через USB (ATmega8, C)

LCD2USB - проект с открытым исходным кодом и описанием железа (open source/open hardware). Цель LCD2USB - подсоединить текстовые дисплеи на основе контроллера HD44780 к персональным компьютерам (PC) через USB. LCD2USB разрабатывался как дешёвый проект, который можно просто изготовить из доступных запчастей. Поэтому он основан на недорогом микроконтролллере Atmel AVR Mega8 (из памяти программ flash 8 кбайт используется ~3 кбайт), который легко достать. Общая стоимость (не считая цены индикатора и печатной платы) - от 5 до 10 Euro. LCD2USB поставляется с программой-демо, работающей на Linux, MacOS X и Windows.

В настоящий момент LCD2USB поддерживается lcd4linux (поддержка LCD2USB встроена), LCD Smartie (требуется отдельный драйвер) и LCDProc (поддержка LCD2USB встроена).

LCD2USB базируется на следующих проектах:

  • , отличный фреймворк для использования маленьких LCD вместе с Линукс
  • (старое название AVR-USB), полная программная реализация протокола USB для платформы AVR
  • , другая программная реализация протокола USB для AVR
  • от Peter Fleurys для AVR

[Железо]

Собранный прототип Вид спереди Вид сзади

Железо состоит из AVR ATmega8 CPU, окруженного несколькими электронными компонентами и коннекторами к PC и LCD.

Светодиод (LED) питания LED1 показывает, что система запитана от USB. Тактовая частота вырабатывается от кварца 12 МГц. Такая частота нужна для работы программной поддержки протокола USB.

Интерфейс USB

USB интерфейс LCD2USB основан на программной реализации протокола USB с использованием трех ножек AVR (PC0, PC1 и PD2). Эта программная реализация поддерживает только low speed USB, о которой PC информируется резистором R1. Текущая версия 1.1 LCD2USB работает с сигналами USB на 3.6V, и в этом отношении она больше соответствует стандарту USB, чем старая версия 1.0.

Соединение с USB может происходить через коннектор типа USB B. Это квадратный коннектор, обычно используемый для USB-устройств (в отличие от коннекторов типа flat A, используемый для USB хостов). USB коннектор монтируется на обратной стороне PCB. Другой способ подключения - прямая напайка кабеля к обратной стороне, как показано на рисунке.

Подключенное таким способом устройство называется bus powered device (устройство, запитанное от шины). Это означает, что устройство полностью, напрямую запитано от USB. Таким образом AVR и LCD запитаны от сигнала VBUS интерфейса USB. Этот сигнал может предоставить max 500 мА. Питание отфильтровано C3 и C6.

Интерфейс LCD

LCD2USB поддерживает несколько разных текстовых дисплеев на основе контроллера HD44780. Поддерживаются одноконтроллерные дисплеи (проверено на 16*2, 20*2 и 20*4) и двухконтроллерных дисплеях (проверено на 27*4 и 40*4). LCD2USB интерфейс использует шину 4 бита для связи с HD44780.

Два различных коннектора (JP1 и JP2) предоставляют интерфейс к наиболее распространенным дисплеям HD44780. Дополнительный коннектор JP6 расширяет JP2 для двухконтроллерных дисплеев, например 40*4. См. подробности на рисунках. Поскольку питание для соединения индикатора 40*4 отличается от 20*2, запайка мостиков SJ2 и SJ3 позволяет настроить полярность питания на JP2. По умолчанию установлено соединение для 20*2. На фотографии показано, как изменить установки с дисплеем 4x40:

Внимание: использование неправильной полярности может повредить индикатор LCD, интерфейс и даже порт PC USB. Пожалуйста убедитесь, что коннектор дисплея соответствует разводке сигналов платы LCD2USB. Вы можете для первых испытаний использовать хаб USB между LCD2USB и PC. Это снижает риск повреждения PC, если Вы не подали корректно питание на LCD. Но все равно в случае ошибки можно повредить LCD2USB, LCD и хаб.

Об источнике питания

Для дисплеев с подсветкой нужно предпринять специальные меры для их питания. LCD2USB разработан так, что опотребляет в большинстве случаев 75 мА, что нормально для LCD с подсветкой на LED. Эта величина также сообщается PC при конфигурировании подключения USB. Интерфейс LCD2USB может предоставить до 100 мА с помощью программного управления подсветкой. Это ограничение транзистора T1. Если подсветка потребляет более 100 мА, необходимо заменить T1 (см. секцию "Примечания к списку деталей" далее). Также необходимо предотвратить перегрузку шины USB, которая не может предоставить ток более 500 мА для bus powered device. Увеличение потребления тока подсветкой необходимо отразить в конфигурации устройства USB путем настройки константы USB_CFG_MAX_BUS_POWER в файле usbconfig.h исходного кода прошивки (firmware), и перекомпилировать проект. Это изменение firmware может не потребоваться для всех PC, но некоторые могут отключать источник питания для устройства, которое потребляет ток больше, чем заказано в дескрипторах USB.

Интерфейс программирования (ISP)

Firmware LCD2USB загружается через стандартный 10-pin AVR ISP коннектор (SV1). Для загрузки нужен отдельный кабель. Может использоваться простейший программатор наподобие AVRisp. Программа PC Ponyprog или UISP будут использовать этот кабель для загрузки firmware в AVR устройства LCD2USB. Кабель программирования понадобится только один раз, поскольку firmware сохраняется напрямую во внутреннюю энергонезависимую flash память AVR.

Последовательный интерфейс

Коннектор JP3 предоставляет последовательный интерфейс AVR. Этот коннектор предназначен для отладки. Чтобы подключить его к RS232 PC, необходим дополнительный преобразователь уровней (например MAX232).

[Схема и разводка печатной платы (PCB ver. 1.1)]

Схема LCD2USB на ATmega8

Плата LCD2USB на ATmega8

В последней версии PCB добавлены два диода Зенера (стабилитроны) для увеличения совместимости с шиной USB. Как выяснилось, индуктивность по питанию стала ненужной и была удалена, что освободило место для двух диодов Зенера.

Примечания к списку деталей

1. Кварц должен быть в маленьком корпусе HC49U. Вы можете использовать кварц в корпусе HC18, но Вам для этого нужно его смонтировать на обратной стороне платы.
2. C1 и C2 имеют расстояние между ножками 2.54 мм (1/10 дюйма), C3 и C5 - 5.08 мм между ножками (2/10 дюйма).
3. T1, помеченный как BC547C, может быть заменен BC547A или BC547B.
4. Катод LED1 обращен к R5. Длинная ножка LED расположена ближе к JP1.

Резистор R4 ограничивает ток для подсветки. Величина 47 Ом в списке деталей хорошо подходит для LCD дисплеев с маломощной LED подсветкой. Некоторые дисплеи уже имеют токоограничивающий резистор и/или требуют более мощный ток. В этом случае подсветка будет очень слабой или едва видимой (сопротивление R4 47 Ом не дает ток больше). Для увеличения тока подсветки (и соответственно увеличения её яркости) можно уменьшить номинал R4. Сверьтесь с даташитом на Ваш индикатор, чтобы верно выбрать токоограничивающий резистор для подсветки. BC547 транзистор T1 может не обеспечить требуемый ток > 100 мА. Возможна замена T1 на BS170 MOSFET для управления током 240 мА.

[Загрузка firmware]

Если Вы знакомы с программированием микроконтроллеров Atmel, то наверняка знаете, что нужно делать. Файл Makefile в lcd2usb/firmware/Makefile предполагает, что Вы используете простой stk200-совместимый адаптер программирования, подключаемый в принтерный порт LPT компьютера.

Подсоедините собранное устройство (подключение дисплея LCD пока не требуется) через USB к PC. Оно пока не определится, поскольку firmware еще не загружено (подключение к USB дало питание для устройства LCD2USB, что необходимо для программирования flash). Соедините LCD2USB через коннектор SV1 кабелем программирования с программатором. На Линукс с установленным можно просто ввести "make fuse; make flash-nodep" для загрузки firmware.

Если Makefile не работает, Вы можете запрограммировать flash на устройстве вручную, используя программу avrdude и уже упомянутый stk200-совместимый адаптер программирования:

avrdude -c stk200 -p atmega8 -U lfuse:w:0x9f:m -U hfuse:w:0xc9:m -U flash:w:firmware-avrusb.hex

Для LCD2USB ver. 1.4 возможна загрузка через USB с помощью , который avrdude также поддерживает. В этом случае для загрузки firmware введите "make avrdude-nodep".

Для ручной загрузки через 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 (USB control messages). Более эффективны и скоростные передачи bulk, которые доступны только на высокоскоростных устройствах. Сообщение USB control message для низкой скорости всегда состоит из 8 байт. Первый байт индицирует control type и установлен в фиксированное значение для команд, специфичных для вендора. LCD2USB использует для себя не-вендор специфичные команды типа запрос имени устройства, ID и т. п. Оставшиеся 7 байт в управляющей передаче задают тип запроса (1 байт), величину (value 2 байта), и индекс (index 2 байта) и поле длины (2 байта) для передаваемых данных. Протокол LCD2USB не посылает дополнительных данных, поэтому последние 2 байта должны быть 0 для совместимости. Оставшиеся 4 байта (2 для value и 2 для index) освобождаются для передачи данных. Это позволяет передавать 4 байта за одну посылку, следовательно за одну транзакцию USB можно послать 4 байта команд HD44780 или 4 байта данных HD44780.

Байт запроса (request byte)

Bit   7 6 5 4 3 2 1 0
Name  C C C T T R L L

CCC = тип команды (command type)
0 (000) = echo
1 (001) = command
2 (010) = data
3 (011) = set
4 (100) = get
5 (101) = зарезервировано
6 (110) = зарезервировано
7 (111) = зарезервировано

TT = target id
R = зарезервировано, установлено в 0
LL = количестов байт в передаче -1

Поле target id различается для различных запросов. Передачи типа command и типа data передают 2 бита данных, показывающих, какой из двух возможных контроллеров адресуется LCD2USB. Оба контроллера могут быть адресованы одновременно  (например для настройки символов пользователя).

Для операций set и get target id содержит величину для установки и получения соответственно. Сейчас поддерживаются следующие значения:
set 0 - установка яркости
set 1 - установка контрастности
get 0 - получить версию firmware (старший байт MSB = major version, младший байт LSB = minor version)
get 1 - получить данные кнопок
get 2 - получить продетектированные контроллеры

См. исходный код программы testapp, поставляемый в архиве вместе с LCD2USB firmware.

[Программное обеспечение]

Интерфейс LCD2USB изначально был разработан для использования с . Тем временем и были расширены для поддержки LCD2USB. Программные архивы LCD2USB содержат небольшое демонстрационное приложение, которое может использоваться как основание для дальнейших портов LCD2USB. В настоящее время Linux, MacOS X и Windows поддерживаются этим приложением.

Использование LCD2USB под Windows

Harald Korfgen написал LCD Smartie плагин для LCD2USB, который позволяет использовать LCD2USB под Windows. Вот то, что он пишет о своем дополнении к программе: "LCD2USB-smartie.zip содержит все необходимые файлы исходного кода для компиляции драйвера под Microsoft® Windows Server® 2003 R2 Platform SDK, Microsoft Visual C++ 2005 Express Edition и LibUsb-Win32. В результате получаем файл LCD2USB.DLL. Чтобы использовать драйвер, библиотека libusb-win32 должна также быть установлена, и LCD2USB.DLL должен быть помещен в каталог "displays" программы LCD Smartie, и это будет автоматически использоваться. Драйвер протестирован только на дисплее 20x4, и обратная связь с информацией о багах приветствуется."

[Проблемы и методы их решения]

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

Решение: убедитесь, что Вы запустили тестовое приложение как пользователь root, поскольку обычный пользователь может не иметь достаточно прав для доступа ко всем возможностям железа lcd2usb.

2. Проблема: устройство не может правильно определиться. Linux сообщает об ошибке "device not accepting address" (устройство не принимает адрес) в системном логе, но LCD отображает начальное сообщение (LCD2USB VXX.XX).

Решение: USB интерфейс не работает, как требуется. Возможно, что Ваш AVR работает на неправильной тактовой частоте. Проверьте правильность установки перемычек AVR (fuses, или фьюзы). Если это не помогло, то возможно диоды Зенера слишком медленные (см. описание следующей проблемы).

3. Проблема: устройство не может правильно определиться. Linux сообщает об ошибке "device descriptor read/all, error -71" в системном логе.

Решение: устройство частично работает, и передачи USB ненадежны. Причина может быть в медленных диодах Зенера (такие могут быть для больших токов стабилизации). Эти медленные диоды легко распознать по более толстым ножкам, чем у других электронных компонентов. Вы можете просто попробовать удалить эти диоды, и устройство заработает, если Ваш PC справляется с сигналами D+ и D- USB напряжением 5V (на многих PC это срабатывает, особенно на старых). Можно попробовать включить устройство через USB хаб, если PC не работает с 5-вольтовыми сигналами. В противном случае Вам нужны быстрые диоды Зенера (стабилитроны) для замены.

[Ссылки]

[Ссылки на закачку]

  • Version 1.08(avrusb)/2.08(usbtiny): lcd2usb-2007-10-13.zip (310 Кб). Загрузок: 289
    - PCB version 1.1 (см. текст выше об изменениях)
  • Version 1.08(avrusb)/2.08(usbtiny): lcd2usb-2007-05-20.zip (268 Кб). Загрузок: 207
    - все части совместимы с GPL
    - патч для создания версии usbtiny работает, когда устройство подклюено во время загрузки
    - оба стека USB обновлены на последние версии
  • driver
    - готовая к использованию LCD2USB.DLL (52 Кб). Загрузок: 210 для инсталляции в папку "displays" программы LCD Smartie
    - архив с исходным кодом LCD2USB-smartie.zip (6 Кб). Загрузок: 231 для драйвера
  • Version 1.07/2.07: lcd2usb-2007-01-15.zip (261 Кб). Загрузок: 210
    - по просьбам пользователя добавлена версия, основанная на
    - AVR-USB версии 1.07, USBtiny версии 2.07
  • Version 1.06: lcd2usb-2007-01-14.zip (239 Кб). Загрузок: 212
    - улучшение генерации напряжения контраста (благодаря Tino Albecht)
    - контрастность и яркость сохраняются в eeprom
  • Version 1.05: lcd2usb-2006-04-08.zip (239 Кб). Загрузок: 205
    - добавлен Makefile для сборки testapp под MacOS X.
  • Version 1.05: lcd2usb-2006-03-18.zip (238 Кб). Загрузок: 198
    - обновление для использования новой версии AVR-USB.
    - подстроено нумерование версий
  • Version 1.4: lcd2usb-2006-02-26.zip (234 Кб). Загрузок: 203
    - обновление для использования новой версии AVR-USB.
    - в Makefile добавлена поддержка avrdude/USBasp
  • Version 1.3a: lcd2usb-2006-02-22.zip (232 Кб). Загрузок: 200
    - небольшие улучшения поддержки Windows в тестовой программе
  • Version 1.3: lcd2usb-2006-02-09.zip (231 Кб). Загрузок: 203
    - поддержка кнопок
    - улучшена обработка USB
  • Version 1.2: lcd2usb-2006-02-04.zip (230 Кб). Загрузок: 198
  • Version 1.1: lcd2usb-2006-01-26.zip (119 Кб). Загрузок: 199
  • Version 1.0: lcd2usb-2006-01-21.zip (109 Кб). Загрузок: 206
  • LCD2USB-smartie.zip (6 Кб). Загрузок: 231
  • LCD2USB.DLL (52 Кб). Загрузок: 210

Автор статьи: Андрей Синюткин (переводчик)

Просмотров: 6681

Splan 7.0.0.9 Rus + Portable + Viewer Fiinal
26.04.2014
sPlan – удобный инструмент для черчения электронных схем. Имеет простой и интуитивно понятный интерфейс. В программе заложены... подробнее...

Очень удобная программа для чтения pdf Foxit Reader
26.04.2014
Foxit Reader - Компактная и шустрая программа для чтения PDF файлов. Может служить альтернативой для популярного просмотрщика PDF - Adobe Reader.... подробнее...

Proteus 7.7 SP2 + Crack v1.0.2 + RUS
22.04.2014
Proteus VSM - программа-симулятор микроконтроллерных устройств. Поддерживает МК: PIC, 8051, AVR, HC11, ARM7/LPC2000 и другие распространенные процессоры.... подробнее...

Новое становление сайта Eldigi.ru
01.04.2014
Проект Eldigi.ru который долгое время находился в застывшем состоянии снова принимается за работу с новымы силами, с новыми статьями и с... подробнее...

Proteus 7.7 SP2 + Crack v1.0.2 + RUS
22.04.2014
Proteus VSM - программа-симулятор микроконтроллерных устройств. Поддерживает МК: PIC, 8051, AVR, HC11, ARM7/LPC2000 и другие распространенные процессоры.... подробнее...

Splan 7.0.0.9 Rus + Portable + Viewer Fiinal
26.04.2014
sPlan – удобный инструмент для черчения электронных схем. Имеет простой и интуитивно понятный интерфейс. В программе заложены... подробнее...

Цифровая паяльная станция своими руками (ATmega8, C)
27.05.2012
Состав: ATmega8, LM358, IRFZ44, 7805, мост, 13 резисторов, один потенциометр, 2 электролита, 4 конденсатора, трехразрядный светодиодный семисегментный... подробнее...

Тахометр на AVR микроконтроллере (ATtiny2313, C)
13.01.2010
Данное устройство представляет собой неплохой тахометр, предел его измерений составляет 100 - 9990 об/мин. Точность измерения - ± 3 об/мин.... подробнее...

USB-контроллер джойстика на основе микроконтроллера AVR (ATmega8, C)
15.05.2011
Я начал разрабатывать этот контроллер джойстика, вдохновленный необходимостью в простом самодельном джойстике, который мог бы... подробнее...

Индикатор интенсивности работы компьютера (AT89C2051, asm)
28.08.2010
Идея создания этого устройства пришла после того, как в компьютере начали разом «стучать» оба жестких диска, причиной чего, как... подробнее...

Термометр на TC77 (PIC16F628, C)
11.10.2010
Такой термометр подходит для большинства потребностей измерения температуры в быту. Но не смотря на то, что он очень прост и дешев,... подробнее...

Вольтметр и амперметр на микроконтроллере для лабораторного блока питания (ATmega8)
09.08.2008
Не так давно я задался целью сделать себе для работы лабораторный источник питания. Долго думал как реализовать с помощью ШИМ и мощных... подробнее...