Адаптер USB to USART, SPI и I2C
Все началось с того, что мне надо было подключиться к одному устройству по USART. Я сразу взял адаптер USB to UASRT (ибо в ноутбуке COM порт не предусмотрен) на AtTiny2313 (рекламой заниматься не буду, схема легко находится в интернете), подключил, запустил и внезапно понял, что у адаптера фиксированная скорость 9600, а у девайса, к которому требовалось подключиться, скорость 57600. Дело, естественно, было поздним вечером, и купить что-нибудь вроде FT232 возможности не было. Поэтому после непродолжительного раздумья, было решено изменить скорость UASRT в адаптере обычной перепрошивкой. В итоге соединение было успешно налажено. Но согласитесь - это ведь не выход, программатора может под рукой не оказаться, да и неудобно каждый раз с прошивкой шаманить. В следствие этого я серьезно задумался о создании нормального адаптера, с регулируемой скоростью (и не только).
Конечно, самый простой вариант – купить FT232, но сравнив ее стоимость со стоимостью Mega8, я пришел к выводу, что этот вариант мне не подходит. Поэтому было решено сделать адаптер на МК. А раз он на МК, то делать только USART как-то не рационально. Поэтому неплохо было бы в этот адаптер засунуть еще несколько интерфейсов, если уж делать, то что-то универсальное и полезное. Почти сразу в памяти всплыли “приятные” воспоминания об установке драйверов для адаптера на Tiny2313 (для Windows7 x64 это довольно мучительно). А это значит, что от устройства “виртуальный COM” придется отказаться, следовательно, надо будет написать программу для ПК, иначе работа с устройством будет невозможна. В общем, после обдумывания в течение некоторого времени, сформировалась окончательная идея девайса. Функционал получился вот таким:
адаптер USB->USART;
адаптер USB->SPI;
адаптер USB->I2C;
при этом устройство должно быть HID (Human Interface Device), чтобы не морочить голову с установкой драйверов.
Объектом издевательств стал МК 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, и написал вот такую программу:
Адаптер USB to USART, SPI и I2C
- Administrator
- Сообщения: 167722
- Зарегистрирован: 27 июн 2011 19:11
- Пол: Мужской
- Зодиак:: Овен
- Страна:: Украина
- Имя: Роман
- Мой телевизор :: BRAVIS LED-39G5000 + T2 , BRAVIS LED-1697 bleck, Liberton D-LED 3225 ABHDR,
- Мой ресивер:: STRONG 4450, Gi HD Mini, Trimax TR-2012HD plus (Т2), Beelink W95 (2Гб/16Гб), X96 X4 (905X4/2GB/16GB)
- Мои спутники:: 4°W,5°E,13°E - ( Два штука ) + 36°E KУ
- Благодарил (а): 10858 раз
- Поблагодарили: 42302 раза
Administrator
-
- Информация
- Сообщения: Поиск…
- Зарегистрирован: Пожалуйста, подождите.
Объявление
TVIZI - Кино и телевидение
Доступные пакеты TVIZI
1 плейлист - 2 устройства, без привязки к IP
Базовый пакет 2.5 $/месяц
Спортивный пакет 1 $/месяц
VIP пакет 3 $/месяц
➤ Перейти на TVIZI
1 плейлист - 2 устройства, без привязки к IP
Базовый пакет 2.5 $/месяц
Спортивный пакет 1 $/месяц
VIP пакет 3 $/месяц
IPTV от IPTV.ONLINE
Просмотр ваших любимых телепередач с любого устройства в любой точке мира.
1500+ каналов в SD, HD и 4K качестве.
Более 70 тысяч фильмов и сериалов доступно в медиатеке.
Пакеты IPTV.ONLINE
Базовый - 2.49$
Взрослый - 0.99$
Спортивный - 0.99$
VIP ALL - 3.49$
➤ Перейти на IPTV.ONLINE
1500+ каналов в SD, HD и 4K качестве.
Более 70 тысяч фильмов и сериалов доступно в медиатеке.
Пакеты IPTV.ONLINE
Базовый - 2.49$
Взрослый - 0.99$
Спортивный - 0.99$
VIP ALL - 3.49$
Edem TV (ILook.tv)
Всего за $1 в месяц, вы получаете около 800 каналов
Архив телепередач на все каналы, за 4 дня.
А также возможность выбрать наиболее подходящий GeoIP сервер.
➤ Перейти на Edem TV
Архив телепередач на все каналы, за 4 дня.
А также возможность выбрать наиболее подходящий GeoIP сервер.
- Administrator
- Сообщения: 167722
- Зарегистрирован: 27 июн 2011 19:11
- Пол: Мужской
- Зодиак:: Овен
- Страна:: Украина
- Имя: Роман
- Мой телевизор :: BRAVIS LED-39G5000 + T2 , BRAVIS LED-1697 bleck, Liberton D-LED 3225 ABHDR,
- Мой ресивер:: STRONG 4450, Gi HD Mini, Trimax TR-2012HD plus (Т2), Beelink W95 (2Гб/16Гб), X96 X4 (905X4/2GB/16GB)
- Мои спутники:: 4°W,5°E,13°E - ( Два штука ) + 36°E KУ
- Благодарил (а): 10858 раз
- Поблагодарили: 42302 раза
Адаптер USB to USART, SPI и I2C
Адаптер USB to USART, SPI и I2C. продолжение.
USART: (прием данных идет все время, пока активен режим, так сказать, на автомате)
отправка нескольких HEX чисел, просто пишем их через пробел в неограниченном количестве, например: 01 05 fa aa ...
отправка строки (текст, числа и т.п.). Тут уже в начале строки пишется идентификатор S (s), например: s www.cxem.net
SPI:
для отправки данных устройству формат строки такой: Адрес (кому передавать и в какую ячейку памяти) А (а) и Данные D (d). Например: aa3 dfa;
для запроса данных с устройства: Адрес (от кого принимать и из какой ячейки памяти) и идентификатор чтения R (r). Например: aa3 r
I2C:
для отправки данных устройству: Адрес устройства (бит чтения в 0) А (а) Адрес ячейки памяти M (m) Данные D (d). Например аа2 m03 d15
запрос данных выглядит вот так: Адрес устройства (бит чтения в 0) А (а) Адрес ячейки памяти M (m) Адрес устройства (бит чтения в 1) А (а) Идентификатор чтения с количеством ячеек памяти для чтения R (r). Например: aa2 m03 aa3 r1
?Для SPI в режиме Slave никаких команд не предусмотрено, просто сидим и ждем, пока нам что-нибудь пришлют. Для работы с девайсом подключаем его к ПК, ждем некоторое время, пока ОС не сообщит, что драйвера успешно найдены и установлены, запускаем программу и начинаем обмен данными. Все предельно просто, ведь простота и была одним из критериев при создании устройства.
Да, кстати, программа совместима со всеми версиями Windows, начиная с Windows XP и заканчивая Windows 8, и не требует для работы различной экзотики, типа NetFramework и т.п. Как, впрочем, и сам модуль.
Вот, собственно, и все, программа, плата и исходники прилагаются.
Фьюзы выставляются для работы от внешнего кварца с высокой частотой. Выглядят вот так:
Ну и конечно же видео, т.к. лучше один раз увидеть, чем... (USART работает в режиме эхотест (Rx и Tx соединены)
Список радиоэлементов
comp129-4.jpg
Ничего особо сложного в ней нет, для каждого интерфейса присутствует некоторое количество настроек. Да, одновременно несколько интерфейсов работать не могут, только по одному. Работает все это дело очень просто, при подключении устройства к ПК в окне программы активизируются кнопки, нажатие на которые запускает соответствующий интерфейс. Потом достаточно написать данные в поле ввода в определенном формате и нажать кнопку "Send". Для каждого интерфейса свой формат данных. Сейчас рассмотрим их более подробно:USART: (прием данных идет все время, пока активен режим, так сказать, на автомате)
отправка нескольких HEX чисел, просто пишем их через пробел в неограниченном количестве, например: 01 05 fa aa ...
отправка строки (текст, числа и т.п.). Тут уже в начале строки пишется идентификатор S (s), например: s www.cxem.net
SPI:
для отправки данных устройству формат строки такой: Адрес (кому передавать и в какую ячейку памяти) А (а) и Данные D (d). Например: aa3 dfa;
для запроса данных с устройства: Адрес (от кого принимать и из какой ячейки памяти) и идентификатор чтения R (r). Например: aa3 r
I2C:
для отправки данных устройству: Адрес устройства (бит чтения в 0) А (а) Адрес ячейки памяти M (m) Данные D (d). Например аа2 m03 d15
запрос данных выглядит вот так: Адрес устройства (бит чтения в 0) А (а) Адрес ячейки памяти M (m) Адрес устройства (бит чтения в 1) А (а) Идентификатор чтения с количеством ячеек памяти для чтения R (r). Например: aa2 m03 aa3 r1
?Для SPI в режиме Slave никаких команд не предусмотрено, просто сидим и ждем, пока нам что-нибудь пришлют. Для работы с девайсом подключаем его к ПК, ждем некоторое время, пока ОС не сообщит, что драйвера успешно найдены и установлены, запускаем программу и начинаем обмен данными. Все предельно просто, ведь простота и была одним из критериев при создании устройства.
Да, кстати, программа совместима со всеми версиями Windows, начиная с Windows XP и заканчивая Windows 8, и не требует для работы различной экзотики, типа NetFramework и т.п. Как, впрочем, и сам модуль.
Вот, собственно, и все, программа, плата и исходники прилагаются.
Фьюзы выставляются для работы от внешнего кварца с высокой частотой. Выглядят вот так:
comp129-5.jpg
На картинке LOW фьюзы в 1, когда не отмечены, и в 0, когда отмечены. HIGH фьюзы наоборот. В шестнадцатеричном виде это выглядит вот так: HIGH: D9, LOW: FF.Ну и конечно же видео, т.к. лучше один раз увидеть, чем... (USART работает в режиме эхотест (Rx и Tx соединены)
Список радиоэлементов
comp129.pdf
Прикрепленные файлы:
comp129_AVR_Module2.rar
comp129_Module.rar
comp129_Universal-Interface-Module.rar
http://cxem.net/comp/comp129.phpAdministrator