- Подключение LCD-индикатора к USB
Введение
В современном PC есть только один LPT порт, один или два COM-порта и 6-8 портов USB. USB кабель - это 4 провода, а не 10-17 как в кабеле принтера. Обычно, разъем USB есть внутри корпуса, поэтому нет необходимости кидать кабель к внутреннему устройству снаружи. В большинстве случаев, загрузка процессора при работе с USB устройством гораздо меньше, чем при работе с LPT. Почему же принято подключать разнообразные устройства к LPT?
Распространено мнение, что подключить что-то к USB неимоверно сложно. Что для этого требуются запредельные знания и экстраординарные умения. Как и большинство других распространенных мнений - это неверно. Подключить LCD к USB немногим сложнее, чем к LPT и немного проще, чем к COM-порту. Т.е. если кто-то смог подключить LCD к принтерному порту, то он сможет подключить его и к USB.
Другая причина - недостаточк информации на данную тему. Если статья о подключении LCD к LPT лежит на каждом втором (если не на каждом первом) сайте по моддингу, то, о подключении к USB, нет ничего. Иногда на форумах появляются примеры схем, но, как правило, в них используются дорогие, сложнопаяемые или малораспространенные микросхемы. Это только укрепляет мнение, что работать с USB могут единицы.
Настало время изменить ситуацию...Копирайты и условия распространения
Текст и исходный код (за исключением указанного ниже)
© 2003-2004 Станислав "listener" Головин
Пропорциональный шрифт для прошивки взят из LCDControl
© Дмитрий Климов, http://digitalman.by.ru
Фиксированный шрифт для прошивки
© Виктор Зинец, http://www.zinetz.info
За основу работы с USB взят код из Motorola HC908JB8 USB Reference Design
by Oliver Thamm, MCT Electronikladen GbR, http://hc08web.de/usb08
Разрешается использование прилагающихся к статье исходных кодов и программ при условии сохранения копирайтов.О схеме
Предлагаемая схема проектировалась так, чтобы минимизировать количество используемых деталей. В ней используется микроконтроллер MC68HC908JB8ADW. В Москве и (насколько я знаю) Санкт-Петербурге его можно купить без особых затруднений. Насчет остальных мест у меня сведений нет.
Вместо MC68HC908JB8ADW можно использовать MC68HC908JB8JP. В этом случае, схема немного усложняется, но упрощается пайка. К схеме можно подключить любой индикатор, который можно подключить к LPT. Как основной вариант, рассматривается MT-12232B и, дополнительно, приводятся примеры подключения других индикаторов.Используемые материалы
Для подключения LCD к USB нам понадобятся следующие компоненты и материалы:- LCD, который мы будем подключать.
В статье рассматривается MT-12232B, но можно подключить практически любой символьный или графический LCD с параллельным интерфейсом (что? что такое параллельный интерфейс? это будет объясняться ниже. Не вдаваясь в подробности - годится любой индикатор на базе контроллера SED1520, SED1335, ST7565, KS0018, HD44770 или аналогичных. Что еще? Что такое контроллер? Это объяснятеся в FAQ по LCD. Если нет желания его читать - возьмите MT-12232B и не мучайтесь. Для него, кстати будет самое подробное объяснение и даже фотки). - микроконтроллер MC68HC908JB8ADW или MC68HC908JB8JP.
микроконтроллер - это деталь, которую сложнее всего найти. Можно воспользоваться www.efind.ru. Я покупал JB8ADW в Москве в "Митракон"е. - микросхема 74574 (в том случае, если используется JB8JP)
- кварц на 6MHz
может быть любого типа, из соображений габаритов рекомендуется тип HC-49SM или HC-49S - конденсатор 10mkF*16V - 2 штуки
- конденсатор 0.1mkF - 2 штуки
- конденсатор 22pF - две штуки
- резистор 1M - 1 штука
- резистор 1К - 1 штука
- резистор 50 Ом - 1 штука (на некоторых индикаторах уже установлен)
резисторы и конденсаторы могут быть любого типа. Рекомендуются бескорпусные, SMD1206. - транзистор КТ3102 или аналогичный
- кнопка тактовая - 1 штука
кнопку можно использовать любую, хоть от звонка. Если не заниматься отладкой прошивки, можно вообще обойтись без кнопки. - провод монтажный - порядка 2м. Рекомендуется провод МГТФ во фторопластовой изоляции.
- провод для подключения к USB
Тип провода зависит от того, куда планируется подключаться - к внешнему или внутреннему разъему. Самый простой метод - взять ненужный USB-кабель. - фольгированный текстолит и хлорное железо, либо макетная плата
Если используется JB8ADW, на макетной плате должно быть место для SMD-компонентов (см.фото).
Я сознательно не привожу разводки платы. Схемы в формате Eagle прилагаются. Если есть опыт изготовления плат - плата под используемые компоненты рисуется за полчаса, даже односторонняя. Если такого опыта нет - проще собрать на макетной. - припой и канифоль
Все, кроме LCD, должно уложиться в 250-300 рублей.
Материалы для программатора
Для записи загрузчика нам понадобится программатор. Программатор понадобится только для начального запуска устройства, поэтому никаких особых требований к деталям не предъявляется. Чтобы собрать его, нам понадобятся:- микросхема MAX232 (или любая аналогичная, у нее масса аналогов)
- конденсатор 1mkF - 4 штуки (номинал конденсатора зависит от используемой микросхемы, например, для MAX232A - 0.1mkF)
- резистор 10К - 4 штуки
- диод КД522 или аналогичный - 1 штука
Инструменты
- паяльник (лучше - паяльная станция. За неимением - паяльник мощностью не более 25 ватт).
- канифоль и припой. Для пайки на плату рекомендуется использовать нормальный флюс, например ТАГС.
- острый нож (например, канцелярский для бумаги)
- маленькие кусачки
- пинцет (если есть потребность. я обхожусь без него)
- зажигалка (если используется провод во фторопластовой изоляции - достаточно несколько секунд подержать конец провода в пламени)
- тестер (не обязательно, но очень желательно).
Необходимые предупреждения
Я думаю, что все это знают, но, на всякий случай:- Перед тем, как что-то перепаивать, устройство нужно обесточить.
- При пайке не рекомендуется нагревать выше 150-200 градусов ни детали, ни плату.
- После пайки нужно тщательно проверить правильность спаянного.
- Если что-то переписывалось в прошивке - рекомендуется сохранить все открытые файлы не менее, чем за 10 секунд до подключения устройства.
Схемы
Картинки (.gif):
Схема на JB8ADW
Схема на JB8JP
В формате Eagle:
Схема на JB8ADW
Схема на JB8JP
Библиотека MC68HC908JB8
Номиналы деталей:
R1 - 1M
R2 - 1K
R3 - 50 Ом (либо перемычка, если он уже есть в индикаторе или подсветка индикаторе не светодиодная)
R4 - 1K (если используется)
C1, C4 - 0.1 mkF
C2, C3 - 22 pF
C5, C6 - 10.0 mkF
Q1 - 6.0 MHzПайка
В этой части ничего сложного нет. Берется плата, берутся детали и второе припаивается к первому в соответствии со схемой. Индикатор пока не подключаем. Порядок пайки - как удобнее.
Паялось в такой последовательности:- контроллер
- конденсаторы: C2, C3, C1, C4, C5, C6
- кварц (ножки пропущены с обратной стороны)
- резистор R1
- кнопка
- транзистор
- резистор R2
- перемычки
Хорошее руководство по пайке SMD элементов лежит на AVR Freaks (требует бесплатной регистрации на сайте).
После того, как все спаяно, рекомендуется сделать паузу (Да! Совсем забыл указать Twix в списке материалов!). После этого тщательно все проверить. Рекомендуется прозвонить соседние контакты микросхемы. Еще рекомендуется проверить, как припаяны электролитические конденсаторы - если перепутать полярность, они обычно взрываются. Напоследок, проверить, как поключен USB провод: красный провод (+5V) должен быть соединен с 5-м выводом контроллера, черный (земля) - с первым.
Все правильно? Откладываем устройство в сторону и переходим к следующей части.Программатор
Схема программатора
Номиналы конденсаторов зависят от используемой микросхемы. Диод - любой.
Поскольку (если не заниматься серийным производством) программатор потребуется один раз, единственное требование к собранной конструкции - она должна развалиться не раньше, чем в ней пропадет потребность.Первое включение и запись boot loader'а
Итак, теоретически, контроллер готов. Начнем со смок-теста.
Подключаем контроллер к USB (или просто подадим на него питание). Если ничего не взорвалось и не пошел дым, замерим напряжения. Между 1м и 5м контактом должно быть 5v, между 1м и 4м - 3.3v. Напряжение лучше мерить не на самих контактах, а на подключенных к ним конденсаторах. Если замерять на контактах, есть вероятность, что щуп соскользнет и что-нибудь замкнет.
Отключим питание.
Если все нормально, подключим программатор. (Если что-то не так - ищем ошибки). Припаяем к контактам PTA0..PTA3 по резистору на 10К. Другой конец резистора от PTA2 подключается на землю, остальных резисторов - к +5v.
Припаяем 4 провода от программатора. Два провода питания - к питанию. Провод, помеченный на схеме как IRQ - к контакту IRQ микросхемы, провод, помеченный как DATA - к PTA0.
Еще раз проверим. Все в порядке? Включаем. На контакте IRQ должно быть порядка 8..10v. Выключили.
Пока все идет хорошо. Чтобыо заставить контроллер что-нибудь делать, нам понадобится прошить в контроллер управляющую программу. Чтобы не подключать программатор каждый раз, когда появится новая версия (а при отладке это вообще приходится делать, в среднем, раз в пять минут), прошьем в контроллер bootloader, чтобы, в дальнейшем, можно было заливать прошивки непосредственно по USB.
Нам понадобится софт для программатора. Он скачивается с www.pemicro.com. То, что нам нужно, называется PROG08SZ.
Устанавливаем. Запускаем. На экране должно быть вот такое окошко. Выбираем COM-порт, к которому подключились, Target Hardware Type - class III, остальное - по умолчанию (если в эту микросхему уже записана какая-нибудь прошивка, то нужно еще поставить галочку IGNORE security failure или прописать код доступа). Проверяем, что устройство включено и нажимаем "Contact target ...". Если все работает, нам должны предложить выбрать алгоритм программирования. Выбираем jb8_908_highspeed.
После некоторой паузы, мы должны перейти в основное окно. Specify S Record. Указать icp.s19. Program Module. Если не было ошибок, то все готово. Если в этот контроллер уже было что-то записано, перед Program module нужно сделать Erase module.
Bootloader (isp.s19)
USB-флэшер (flash-jb8.zip)
Если все прошло нормально, то в этом месте у нас должен быть контроллер с прошитым bootloaderом. Проверим. Отключаем программатор (в принципе, чтобы не восстанавливать все, если что-то пошло не так, достаточно отключить только провод от контакта IRQ). Включаем. Обнаружено новое устройство? Ура. Распаковываем архив с флешером. Ставим драйвер оттуда. Запускаем USBICP.exe. Выбираем любой personal file. Erase Chip. Blank Check. Прошло? Если да, то внешний программатор нам больше не нужен. Можно отпаивать его совсем и делать uninstall PROG08SZ.Подключение USB
Ну, теперь пора заняться тем, ради чего это все было затеяно. Вооружаемся монтажным проводом и припаиваем согласно схеме. Ниже приведены семы под MT-12232B, PSE12864URT и HD44780.
Необходимое дополнение: мало подключить индикатор, нужно еще, чтобы он воспринимался программной частью. Об этом - далее. А в итоге пайки должно получится примерно следующее:Прошивка контроллера
Для начала - процесс прошивки подробно. Распаковываем flash-jb8.zip. Запускаем USBICP.exe. Должен последовать запрос Personal File. В ответ на него нужно указать любой из .imp файлов, лежавших в архиве. Если устройство не подключено, флэшер выдаст сообщение "Error in calling Open_Device ()" - его можно проигнорировать.
На экране должно появиться вот такое окно. Далее - понадобится подключенное устройство. Причем не просто подключенное, а в режиме программирования. Выключаем его (если оно включено). Нажимаем кнопку и не отпуская - включаем. Через одну-две секунды - отпускаем кнопку.
Erase Flash. Select File. Выбираем файл с прошивкой (jb8-bulk.s19). Program. Готово.
Если выдается сообщение "Fail to open device" - переподключить устройство. Если что-то пошло не так - искать ошибки в аппаратной части. Но я ни разу не слышал о каких-либо проблемах на этом этапе.
Кнопка "Checksum" в программаторе предназначена для подсчета контрольной суммы прошивки. После перекомпиляции прошивки нужно загрузить файл в программатор и проверить контрольную сумму. Она должна совпадать с числом в vecjb8.c. Если не совпадает - нужно поправить число, откомпилировать заново и снова загрузить в программатор.
jb8-bulk-101.s19 - Прошивка для описанного выше варианта (v1.01)
jb8-bulk-7565-101.s19 - Прошивка для JB8JP+PSE12864URT (v1.01)
jb8-bulk-101.zip - Исходные тексты прошивки (v1.01).Программное обеспечение
Итак, процесс подключения к USB завершен. Перейдем к практическому применению.
Программному обеспечению будет посвящена вторая часть статьи, а пока, чтобы можно было попробовать:
Простой тест - для примера, как работать с контроллером.
USB PortIO - эмулятор HD44770. С исходниками.
В архиве, кроме исходников, находятся файлы dlportio.dll и usbportio-test.exe. Требуется скопировать dlportio.dll в каталог к используемой LCD-программе и запустить usbportio-test.exe. После этого, запустить программу и указать ей в параметрах двустрочный индикатор на базе HD44770. Должно работать.
Чтобы перехватчик работал с lcdhype, прилагаемую dlportio нужно разместить в системном каталоге (обычно - c:\windows\system32). Внимание! Если установлен dlportio - не забудьте сохранить оригинальную .dll!
Эмулятор был успешно протестирован с LCDMonitor3 и LCDSmartie. С lcdhype работает ограниченно, в режиме HD44780, без управления подсветкой.
Работающие устройства:
К сожалению, инверсные индикаторы практически невозможно фотографировать со вспышкой, поэтому вторая фотография мутная. В жизни он гораздо красивее.To be continued...
На этом первая часть статьи заканчивается. Во второй (и, возможно, следующих) частях ожидается:- подробное описание подключения разных индикаторов (как аппаратной, так и программной части);
- описание структуры прошивки и внесения в нее изменений;
- подключение дополнительных кнопок и светодиодов;
- эмуляторы четырех- и восьмистрочных индикаторов;
- плагин к lcdhype;
- фильтры визуализации DirectShow.
Следить за ходом работ, высказать свои предложения автору, оставить свои пожелания/замечания/просьбы можно по ссылке ниже.
© listener
- LCD, который мы будем подключать.