22:59 Адаптер USB to USART & SPI & I2C | |
Адаптер USB to USART & SPI & I2CВсе началось с того, что мне надо было подключиться к одному устройству по USART. Я сразу взял адаптер USB to UASRT (ибо в ноутбуке COM порт не предусмотрен) на AtTiny2313 (рекламой заниматься не буду, схема легко находится в интернете), подключил, запустил и внезапно понял, что у адаптера фиксированная скорость 9600, а у девайса, к которому требовалось подключиться, скорость 57600. Дело, естественно, было поздним вечером, и купить что-нибудь вроде FT232 возможности не было. Поэтому после непродолжительного раздумья, было решено изменить скорость UASRT в адаптере обычной перепрошивкой. В итоге соединение было успешно налажено. Но согласитесь - это ведь не выход, программатора может под рукой не оказаться, да и неудобно каждый раз с прошивкой шаманить. В следствие этого я серьезно задумался о создании нормального адаптера, с регулируемой скоростью (и не только). Конечно, самый простой вариант – купить FT232, но сравнив ее стоимость со стоимостью Mega8, я пришел к выводу, что этот вариант мне не подходит. Поэтому было решено сделать адаптер на МК. А раз он на МК, то делать только USART как-то не рационально. Поэтому неплохо было бы в этот адаптер засунуть еще несколько интерфейсов, если уж делать, то что-то универсальное и полезное. Почти сразу в памяти всплыли "приятные” воспоминания об установке драйверов для адаптера на Tiny2313 (для Windows7 x64 это довольно мучительно). А это значит, что от устройства "виртуальный COM” придется отказаться, следовательно, надо будет написать программу для ПК, иначе работа с устройством будет невозможна. В общем, после обдумывания в течение некоторого времени, сформировалась окончательная идея девайса. Функционал получился вот таким:
Объектом издевательств стал МК Mega8, т.к. в TQFP корпусе он занимает совсем мало места (намного меньше, чем AtTiny2313) и обладает целыми 8 Кб. памяти. Сначала планировалось сделать все интерфейсы программными, но после разводки платы пришлось отказаться от аппаратного I2C, т.к. на односторонней плате вывести его никак не получалось (в будущем все-таки надо будет решить этот вопрос, может отдельно вывести сбоку платы). Поэтому его функциональность несколько ограничена, но USART и SPI остались полнофункциональными. Для связи с ПК была применена библиотека V-USB. Схема устройства получилась вот такой: Как видно, ничего сложного в ней нет. МК питается напряжением 5 В., согласование уровней для USB выполнено при помощи делителей напряжения резистор 68 Ом. + стабилитрон 3.3 В.. Тактовая частота МК – 12 МГц. Это минимальная частота для работы с шиной USB. Так же в схеме присутствуют три светодиода для индикации режимов работы. Один из светодиодов показывает, какй режим работы включен, а два других индицируют прием/передачу данных. Никаких кнопок и переключателей в устройстве не предусмотрено, и все настройки выполняются программно, прямо с ПК. Да, на все выводы, используемые для работы интерфейсов включены резисторы на 68 Ом. для защиты МК от КЗ. Как уже было отмечено выше, устройство представляется ПК как HID и не требует установки драйверов. VID и PID были выбраны из предоставляемых V-USB: VID - 0x16c0, PID - 0x05df. В противном случае пришлось бы отдать кругленькую сумму за покупку индивидуального идентификатора для USB устройства. Но т.к. проект Open Source и некоммерческий, совершенно свободно можно использовать идентификаторы, предложенные V-USB. Плата получилась вот такая: А в спаянном виде: Это был тестовый образец да еще и разведенный с ошибками. Я почему-то посчитал, что вывод CE выводить не стоит. Ну ничего, все уже исправлено и к статье приложена правильная плата. Итак, со схемой все понятно, он простая до предела и паяется за один вечер. Но, как было сказано выше, получившееся устройство определяется ПК как HID, т.е. ОС подбирает под него драйвер из своей базы. Проще говоря, Windows думает, что работает с устройством ввода. Это делает возможным работу на любом ПК без мороки с драйверами. Но с этим связана одна небольшая проблема, ни одна из существующих программ для обмена данными через USART работать с этим устройством не будет. А значит нужна какая-то специальная программа для работы с модулем, иначе он никакой ценности из себя не представляет. Поэтому я открыл свой любимый C++ Builder (нынче его обозвали CodeGear RAD Studio, что в прочем не меняет смысла), версия 2007, и написал вот такую программу: Ничего особо сложного в ней нет, для каждого интерфейса присутствует некоторое количество настроек. Да, одновременно несколько интерфейсов работать не могут, только по одному. Работает все это дело очень просто, при подключении устройства к ПК в окне программы активизируются кнопки, нажатие на которые запускает соответствующий интерфейс. Потом достаточно написать данные в поле ввода в определенном формате и нажать кнопку "Send". Для каждого интерфейса свой формат данных. Сейчас рассмотрим их более подробно: USART: (прием данных идет все время, пока активен режим, так сказать, на автомате)
SPI:
I2C:
Для SPI в режиме Slave никаких команд не предусмотрено, просто сидим и ждем, пока нам что-нибудь пришлют. Для работы с девайсом подключаем его к ПК, ждем некоторое время, пока ОС не сообщит, что драйвера успешно найдены и установлены, запускаем программу и начинаем обмен данными. Все предельно просто, ведь простота и была одним из критериев при создании устройства. Да, кстати, программа совместима со всеми версиями Windows, начиная с Windows XP и заканчивая Windows 8, и не требует для работы различной экзотики, типа NetFramework и т.п. Как, впрочем, и сам модуль. Вот, собственно, и все, программа, плата и исходники прилагаются. Фьюзы выставляются для работы от внешнего кварца с высокой частотой. Выглядят вот так: На картинке LOW фьюзы в 1, когда не отмечены, и в 0, когда отмечены. HIGH фьюзы наоборот. В шестнадцатеричном виде это выглядит вот так: HIGH: D9, LOW: FF. Ну и конечно же видео, т.к. лучше один раз увидеть, чем... (USART работает в режиме эхотест (Rx и Tx соединены), а SPI и I2C тестируются с микросхемой PCA2129T, статья о ней тут) Взято с http://cxem.net/comp/comp129.php Прикрепленные файлы:
| |
|
Всего комментариев: 0 | |