Главная - Душевые кабины
Схема управления нагрузками через компьютер. Управляем нагрузками от COM или USB. Как пакеты USB декодируются в firmware микроконтроллера

Устройство компьютерного управления
различными приборами, схема которого показана на рис. 1, функцио­нально подобно
описанному в , но подключается к USB-порту компьюте­ра, который (в отличие
от СОМ-порта) сегодня есть в каждом из них. Единственная мик­росхема устройства
- распространенный мик­роконтроллер ATmega8. Он необходим для орга­низации
связи по шине USB. Хотя в нем и отсут­ствует специализирован­ный аппаратный
модуль, эта функция выполняется программно. Резистор R1, подклю­ченный между
положи­тельным выводом источ­ника питания и линией D-шины USB, переводит ее в низкоскоростной
режим LS со скоростью обмена 1,5 Мбит/с, что и позво­ляет расшифровывать по­сылки
компьютера про­граммным способом. Ре­зисторы R4 и R5 устра­няют переходные
процес­сы, возникающие при об­мене информацией, что увеличивает стабильность работы.
Конденсатор С1 блокирует импульсные по­мехи в цепи питания, что также улучшает
стабиль­ность работы устройства. Диоды VD1 и VD2 служат для понижения напряже­ния
питания микроконт­роллера приблизительно до 3,6 В - это требуется для
согласования уровней с шиной USB. Сигналы управления приборами формируются на
выходах РВ0-РВ5 и РС0, РС1 микроконтроллера. Высокий логический уровень -
напряжение око­ло 3,4 В. Напряжение низкого уровня близко к нулю. К выходам
можно под­ключать приборы, потребляющие ток не более 10 мА (от каждого выхода).
Если требуются большие значения тока или напряжения, то следует использовать узлы
согласования, показанные в на рис. 5 и 6.

Устройство собрано на макетной плате,
печатная не разрабатывалась. Применены резисторы МЛТ, конденса­торы С2 и С3 -
керамические высоко­частотные, С1 - К50-35 или аналогич­ный импортный. Диоды
кремниевые с падением напряжения на переходе около 0,7 В. Программа для микро­контроллера
разработана в среде Bascom-AVR версии 1.12.0.0. Для работы с шиной USB
использована библиотека swusb.LBX, которая выполняет программное декодирование сигналов
USB в режиме реаль­ного времени. Полученный в результате компиляции код программы
из файла с расши­рением HEX следует загрузить во FLASH-память микроконт­роллера.
Для этого был ис­пользован программатор совместно со встроенной в Bascom-AVR
утилитой. Состоя­ние разрядов конфигурации микроконтроллера должно со­ответствовать
показанному на рис. 2. При первом подключении устройства к компьютеру опе­рационная
система обнаружит новое USB HID совместимое устройство с именем
“uniUSB” и установит необходимые драйверы. Через несколько се­кунд
устройство настроено и готово к использованию.

Для работы с ним была создана программа
UniUSB. Она пред­ставлена в двух вариантах: для 32-разрядных (х86) и 64-раз­рядных
(х64) операционных систем семейства Windows. Работа 32-разрядной версии проверена
в операционных системах Windows 98, Windows ХР, Windows 7, а 64-разрядной -
только в Windows ХР х64. Программа UniUSB написана на языке PureBasic (версия
4.31) с исполь­зованием библиотеки пользовательс­ких функций HID_lib,
поддерживающей работу с USB HID устройствами. Внеш­ний вид окна программы
показан на рис. 3. В одной папке с ее исполняемым файлом должен находиться
файл, называющийся UniUSB_Код.txt или UniCOM_Код.txt. Последний вариант необходим
для совместимости с про­граммой UniCOM, предложенной в . В этом файле
хранится сценарий управ­ления внешними приборами. При запуске программы данные
из файла загружаются в таблицу, расположенную в главном окне, а при завершении
рабо­ты сохраняются в файле. Щелчок левой кнопкой мыши по ячейкам таблицы поз­воляет
изменять их состояние: 1 - высокий логический уровень, 0 или пусто - низкий
логический уровень. Для добавления или удаления столбца таблицы нужно по ней
щелкнуть правой кнопкой мыши и в появившемся меню выбрать требуемое действие.

При подключении устройства к USB-порту
программа обнаружит его и активирует кнопку, расположенную в верхней части
окна на панели инстру­ментов. Нажатием на эту кнопку запус­кают процесс
перебора столбцов таб­лицы и установки указанных в них со­стояний выходов. Для
большей нагляд­ности слева от таблицы подсвечивают­ся номера выходов, на
которых в дан­ный момент установлен высокий логи­ческий уровень. Скорость
перебора (время в миллисекундах между перехо­дами от столбца к столбцу) задают
в поле “Скорость, мс”.

Учтите, операционная система Windows
- многозадачная! Это означает, что процессорное время делится между множеством
иногда скрытых от пользователя процессов, которые вы­полняются по очереди с
учетом уста­новленных в системе приоритетов. По­этому не стоит ожидать большой
точно­сти выдерживания интервалов времени менее 100 мс. Для кратковременной
остановки пе­ребора столбцов используйте кнопку Повторное нажатие на нее
продолжит перебор с места остановки. Кнопка полностью прекращает перебор столб­цов
таблицы. Если в процессе обмена информацией между компьютером и устройством
произойдет сбой либо уст­ройство будет отключено от разъема USB компьютера,
программа сообщит об ошибке, выведя в строке состояния соответствующее
сообщение.

ЛИТЕРАТУРА

1. Носов Т. Управление приборами
через СОМ-порт компьютера. - Радио, 2007, № 11,0.61,62.

2. Рыжков А. US-программатор
микро­контроллеров AVR и AT89S, совместимый с AVR910. - Радио, 2008, № 7, с.
28, 29.

От редакции . Программы для микро­контроллера и компьютера находятся
на нашем FTP-сервере по адресу ftp:// ftp.radio.ru/pub/2011/02/uniUSB.zip

В статье сделана попытка предоставить пошаговую инструкцию - как соединить самодельное устройство USB HID на микроконтроллере AVR и компьютер с операционной системой Windows 7 x64 , чтобы обмениваться данными и управлять портами микроконтроллера. Пример приложения управляет через USB ножкой порта микроконтроллера (к ней подключен индикационный светодиод). Есть возможность также прочитать состояние состояние светодиода - потушен он или горит. Топик предназначен для новичков, поэтому большая просьба к знатокам программирования - приберегите тухлые яйца и гнилые помидоры иронические комментарии для более удобного случая.

Используемое программное обеспечение

1 . Для микроконтроллера - библиотека V-USB компании Objective Development и IDE Atmel Studio 6 компании Atmel. Нужно также скачать и установить тулчейн WinAVR для компиляции firmware микроконтроллера (для спецов это необязательно, потому что можно обойтись тулчейном, который входит в состав Atmel Studio).
2 . Для написания программы Windows (ПО хоста) использовалась библиотека LibUsbDotNet Тревиса Робинсона и IDE Visual Studio C# 2010 компании Microsoft.

Все программное обеспечение, кроме Visual Studio 2010, бесплатное, хотя есть возможность использовать Visual Studio C# 2010 Express бесплатно в течение ограниченного срока. Все действия проводились в среде операционной системы Windows 7 x64, но наверняка подойдет и любая другая операционная система семейства Windows (Windows XP и более свежая).

Используемое железо

Благодаря библиотеке V-USB для создания устройства USB HID подойдет любой микроконтроллер AVR. Если Вы дружите с паяльником, то даже можете собрать подключение к USB самостоятельно по одной из опубликованных схем. Такая схема (взята из пакета V-USB ) в качестве примера приведена на картинке.

Чтобы экономить время и усилия, лучше использовать готовую макетную плату. Особенно удобно, если в плату будет записан USB-загрузчик (bootloader), тогда не понадобится покупать программатор для перепрошивки платы. Я использовал макетную плату AVR-USB-MEGA16 с микроконтроллером ATmega32A, в ней загрузчик есть (USBasploader, эмулирующий поведение программатора USBasp). Вот так платка выглядит в натуральную величину:

Можно взять также metaboard (на нем стоит ATmega168 или ATmega328), или даже программатор на микроконтроллере ATmega8. Подобные железки можно дешево купить на ebay.com или dx.com .

Создание firmware микроконтроллера с помощью Atmel Studio 6 и библиотеки V-USB

Сделайте новый проект в Atmel Studio 6 (далее просто AS6). Когда AS6 предложит выбрать микроконтроллер, выберите Atmega32 без буквы A , не Atmega32A (хотя на плате стоит Atmega32A ) - это важно, так как тулчейн WinAVR не видит разницы, он знает только Atmega32. Эти микроконтроллеры по внутреннему устройству идентичны, так что для нас разницы нет, а для AS6 есть.

Теперь нужно правильно настроить компилятор. В верхнем меню AS6 нажите Tools , далее Options.. и появится вот такое окно:

Слева в списке выберите Toolchain . Справа появится список Flavours. Этим словечком Atmel закодировала возможные варианты используемого инструментария (тулчейны).

Примечание. В списке уже присутствует тулчейн Native, который используется по умолчанию (Default). Тулчейн Native - это компилятор GCC вместе с заголовочными файлами и библиотеками, которые предоставляют необходимую среду компилирования исходного кода для микроконтроллера. Этот тулчейн предоставила Atmel, он устанавливается автоматически вместе с установкой AS6. Как я уже упоминал, для компиляции можно использовать и этот тулчейн, но тогда в исходный код примеров V-USB (на основе примера USB HID будет работать наше устройство USB) придется вручную вносить исправления. Они несложные, но для новичков будет лучше добавить сюда тулчейн WinAVR, и использовать для компиляции именно его.
Для добавления в список Flavours тулчейна WinAVR нажмите кнопку Add Flavour , появится следующее окно:

В верхней строчке этого окна введите имя компилятора WinAVR (произвольное), а в нижней строке введите полный путь, куда установлен сам компилятор тулчейна (с указанием папки \bin) и нажмите кнопку Add . В списке Flavours появится добавленный компилятор, как показано на скриншоте.

Выделите мышкой наш новый добавленный компилятор WinAVR и нажмите кнопку Set As Default (сделать его тулченом по умолчанию), и нажмите OK. После этой процедуры наша AS6 будет использовать компилятор WinAVR.

Пора настроить свойства нашего проекта, для этого курсором в Solution Explorer левым щелчком выберите имя проекта и нажмите Alt+F7 (меню Project -> Properties), появится окно с настройками:

Сделайте следующие настройки:

  • В разделе AVR/GNU C Compiler -> Symbols добавляем в поле -D строчку F_CPU=12000000UL - это соответствует частоте микроконтроллера 12 МГц (такой кварц установлен на моей макетной плате AVR-USB-MEGA16).
  • В разделе AVR/GNU Assemler -> General в поле Assembler flag надо добавить -DF_CPU=12000000UL .
  • В разделе AVR/GNU C Compiler -> Optimization в поле Optimization Level должно стоять Optimize for size (-Os) .
Далее очень важный момент - в левой части окна, в списке выберите раздел Advanced , как показано на рисунке ниже.

В выпадающем списке Toolchain Flavour выберите добавленный компилятор WinAVR, чтобы при компилировании проекта AS6 использовала его. На этом настрока AS6 закончена.

Далее необходимо в созданный проект добавить файлы исходного кода проекта - см. папку firmware\VUSB, файлы VUSB.c, usbdrv.c, usbdrvasm.S и oddebug.c. Проект ASS6 создан на основе одного из примеров библиотеки V-USB: hid-custom-rq, который изначально компилировался с помощью утилиты make из командной строки. На основе библиотеки V-USB можно найти много других примеров кода - в основном это устройства USB HID (мыши, клавиатуры, устройства ввода и вывода), но есть также и устройства USB CDC (виртуальный COM-порт). Если Вам лень самому создавать проект, просто откройте в AS6 файл проекта VUSB.atsln, в нем уже сделаны все необходимые настройки и добавлены все нужные файлы.

Если у Вас используется другая макетная плата, то нужно правильно настроить файл usbconfig.h . Это конфигурационный файл библиотеки V-USB, в нем задаются многие настройки и параметры (VID, PID, ножки микроконтроллера, значения для дескрипторов и другие настройки). Подробное описание всех настроек дано в комментриях этого файла. Основное внимание следует уделить назначению выводов микроконтроллера, которые используются под сигналы USD D+ и D- (макроопределения USB_CFG_IOPORTNAME, USB_CFG_DMINUS_BIT, USB_CFG_DPLUS_BIT), к этим ножкам предъявляются особые требования. Конфигурационный файл usbconfig.h из архива предназначен под разводку ножек макетной платы AVR-USB-MEGA16, и он гарантированно работает. Моргать программа будет светодиодом, который уже имеется на макетной плате и подключен к ножке 0 порта B.

Создание программы для компьютера (ПО хоста)

Наша программа должна посылать через подключение USB пакеты, которые будут управлять микроконтроллером.

Примечание. Программа была создана на основе примера консольного приложения из той же библиотеки V-USB. Компиляция исходного кода консольного приложения выполнялась с помощью makefile и пакета MinGW, и использовала библиотеку LibUSB. В нашем примере мы будем использовать графическую среду Visual Studio и библиотеку LibUsbDotNet. Однако главный цимус использования LibUsbDotNet вовсе не в том, что теперь легко и удобно можно делать не только консольные, но и графические приложения. Самый большой плюс - теперь не нужен драйвер фильтра, который таскала за собой библиотека LibUSB много лет. Для тех, кто в танке, драйвер фильтра - это особая программная надстройка над библиотекой LibUSB, через которую осуществлялся обмен данными с устройствами USB на платформе Windows. Теперь этот атавизм не нужен.
Запустите Microsoft Visual C# 2010 Express и создайте новый проект на основе Windows Form. Теперь нужно подключить к проекту библиотеку LibUsbDotNet.dll . В обозревателе решений нажмите правой кнопкой мыши на названии проекта, и выберите «Добавить ссылку».

Появится ещё одно окно

Здесь нужно найти путь на диске, где находится библиотека LinUsbDotNet.dll (по умолчанию она устанавливается папку C:\Program Files\LibUsbDotNet, но лучше сделать копию файла DLL в рабочий каталог проекта. После подключения библиотеки её нужно объявить в проекте, для этого добавьте в главный модуль программы (файл Form1.cs) строки:

Using LibUsbDotNet; using LibUsbDotNet.Info; using LibUsbDotNet.Main;
Перейдите к визуальному редактору формы, и приведите её приблизительно к такому виду (добавьте 3 кнопки Button и 3 текстовых метки Label):

Сделайте обработчик события загрузки формы. Он нужен для того, чтобы при старте программы происходила инициализации экземпляра класса LibUsbDotNet, через который осуществляется обмен с устройством USB. Перед началом обмена необходимо открыть доступ именно к нашему устройству, потому что к компьютеру может быть подключено несклько устройств USB HID, и необходимо уметь обращаться к каждому по отдельности. Для целей идентификации USB-устройств служат специальные идентификаторы, которые имеют абсолютно все устройства USB, это VID и PID.

Примечание. Иногда для идентификации устройства дополнительно используется уникальный серийный номер или отдельный текстовый дескриптор - когда к компьютеру подключено несколько устройств USB с одинаковыми VID и PID, но это не наш случай. Поскольку обычно у каждого USB-устройства, подключенного к компьтеру, своя пара VID/PID, отличающаяся от других устройств, то найти нужное устройство и обратиться к нему не составляет проблем.
VID это идентификатор производителя (Vendor ID), а PID - идентификатор устройства (Product ID). Наше USB-устройство имеет VID: 0x16C0 , PID: 0x05DF , эти значение указаны в конфигурационном файле usbconfig.h (об этом файле мы уже упоминали) проекта микроконтроллера AS6. Чтобы ПО хоста обратилась к именно к нашему USB-устройству, нужно инициализировать объект MyUsbFinder такими же параметрами VID: 0x16c0, PID: 0x05df, как указаны в файле usbconfig.h . Для этого в область определения глобальных переменных класса Form1 добавьте следующий код:

Public static UsbDevice MyUsbDevice; public static UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(0x16c0, 0x05df);
После того как мы определились с каким USB-устройством будем работать, можно к нему подключаться, и это удобно сделать в момент старта программы (открытия окна формы). Для этого выберите основную форму программы, и в редакторе свойств создайте обработчик события загрузки Form1_Load. В теле обработчика введите следующий код:

Private void Form1_Load(object sender, EventArgs e) { MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder); if (MyUsbDevice != null) { label2.Text = " подключено!"; } else label2.Text = " не найдено!"; }
Сделайте обработчик события клика на кнопке button1 («Вкл»), для этого сделайте в визуальном редакторе на кнопке двойной щелчок, и добавьте в тело обработчика события код:

Private void button1_Click(object sender, EventArgs e) { // Передать пакет, который включает светодиод на макетной плате AVR-USB-MEGA16. UsbSetupPacket packet = new UsbSetupPacket((byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device | UsbCtrlFlags.Direction_Out), 1, (short)1, 0, 0); int countIn; byte data = new byte; MyUsbDevice.ControlTransfer(ref packet, data, 0, out countIn); }
Для обработчика кнопки «Выкл» добавьте код:

Private void button3_Click(object sender, EventArgs e) { // Передать пакет, который погасит светодиод на макетной плате AVR-USB-MEGA16. UsbSetupPacket packet = new UsbSetupPacket((byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device | UsbCtrlFlags.Direction_Out), 1, (short)0, 0, 0); int countIn; byte data = new byte; MyUsbDevice.ControlTransfer(ref packet, data, 0, out countIn); }
Код для обработки кнопки «Чтение»:

Private void button2_Click(object sender, EventArgs e) { //Получение данных от макетной платы AVR-USB-MEGA16 - состояние светодиода. UsbSetupPacket packet = new UsbSetupPacket((byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device | UsbCtrlFlags.Direction_In), 2, (short)0, (short)0, (short)0); int countIn; byte data = new byte; if (MyUsbDevice.ControlTransfer(ref packet, data, 1, out countIn) && (countIn == 1)) { label3.Text = "Прочитано значение " + data.ToString(); } }
Обработчик события закрытия формы (завершение работы программы) гасит светодиод, если он горит:

Private void Form1_FormClosed(object sender, FormClosedEventArgs e) { UsbSetupPacket packet = new UsbSetupPacket((byte)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device | UsbCtrlFlags.Direction_Out), 1, (short)0, 0, 0); int countIn; byte data = new byte; MyUsbDevice.ControlTransfer(ref packet, data, 0, out countIn); }

Как пакеты USB декодируются в firmware микроконтроллера

Прием и обработка данных на стороне микроконтроллера осуществляется в функции usbFunctionSetup (находится в главном модуле VUSB.c проекта firmware AS6). Вот эта функция:

UsbMsgLen_t usbFunctionSetup(uchar data) { usbRequest_t *rq = (void *)data; if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_VENDOR){ DBG1(0x50, &rq->bRequest, 1); /* отладочный вывод: печатаем наш запрос */ if(rq->bRequest == CUSTOM_RQ_SET_STATUS){ if(rq->wValue.bytes & 1){ /* установить LED */ LED_PORT_OUTPUT |= _BV(LED_BIT); }else{ /* очистить LED */ LED_PORT_OUTPUT &= ~_BV(LED_BIT); } }else if(rq->bRequest == CUSTOM_RQ_GET_STATUS){ static uchar dataBuffer; /* буфер должен оставаться валидным привыходе из usbFunctionSetup */ dataBuffer = ((LED_PORT_OUTPUT & _BV(LED_BIT)) != 0); usbMsgPtr = dataBuffer; /* говорим драйверу, какие данные вернуть */ return 1; /* говорим драйверу послать 1 байт */ } }else{ /* вызовы запросов USBRQ_HID_GET_REPORT и USBRQ_HID_SET_REPORT не реализованы, * поскольку мы их не вызываем. Операционная система также не будет обращаться к ним, * потому что наш дескриптор не определяет никакого значения. */ } return 0; /* default для нереализованных запросов: не возвращаем назад данные хосту */ }
Наше устройство USB HID простейшее, и реагирует оно только на управляющие передачи (control transfer), которые проходят через конечную точку 0 (default control endpoint). По типу запроса (поле bRequest) декодируется направление передачи данных. Если CUSTOM_RQ_SET_STATUS, то это данные, предназначаемые для микроконтроллера. Данные декодируются и микроконтроллер выполняет заложенную там команду. В этом случае в самом первом по порядку принятом байте данных закодировано состояние светодиода - если там в младшем бите единичка, то светодиод включается, а если нолик, то гаснет. Если же в поле bRequest принято значение CUSTOM_RQ_GET_STATUS, то в ответ заполняется буфер текущим состоянием светодиода, и данные буфера отправляются обратно хосту. Все очень просто, и при желании поведение кода можно легко переделать под свои нужды.

Видео, как это работает:

Буду рад ответить в комментариях на вопросы и конструктивные замечания.

В наше время в каждой мастерской по ремонту электротехники, да, в прочем, и у каждого радиолюбителя рабочий день начинается с включения ПК, а уж потом и вспомогательного электрооборудования. В прочем с включения ПК рабочий день начинается не только у радиолюбителей, но и во многих пользователей сего «девайса», плотно вошедшего в нашу жизнь. А вот каждый день включать утром и выключать вечером, ну, предположим, принтер, активные колонки, настольную лампу да мало ли чего можно встретить у рядового пользователя, немножко надоедает. Исходя из условленных задач была поставлена цель создать коммутатор нагрузки, предназначенный для включения-выключения всех сопутствующих устройств. Соглашусь можно пойти по пути наименьшего сопротивления и поставить на всё обыкновенный выключатель, но, похоже, это не путь для радиолюбителя. Мы будем делать гораздо удобнее - встроим автомат в сетевой фильтр:

Так как устройство отслеживает факт включения-выключения устройства по принципу «ведомый-ведущий» самый простой способ - использовать USB порт. Обозначу сразу, при использовании USB порта устройство работает в ноутбуках и компьютерах с блоком питания, отключающем все источники питания. К примеру, в последних моделях блоков питания +5 вольт USB порта присутствует как дежурное даже при выключенном блоке. С ними устройство работать не будет, точнее будет, но постоянно включено. Здесь необходимо как источник сигнала использовать какой либо иной порт, и, соответственно, согласовывать сигнал источника и исполнительного механизма.

В данном устройстве исполнительным механизмом служит реле, с контактами, рассчитаными на 16 ампер и с катушкой на 5 вольт. Использование реле выполняет гальваническую развязку источника сигнала и сети 220 вольт.

После проведения ряда экспериментов было установлено, что при питании, согласно паспортных данных, +5 вольт реле потребляет 150 мА тока. Если использовать стационарный компьютер - нет никаких проблем, ибо +5 вольт USB порта идут непосредственно с блока питания и не сильно нагружают его. Если всё вышесказанное устраивает на этом - можно остановиться и сделать свой вариант по ниже приведенной схеме.

Но если планируется использовать ноутбук, то как бы прогонять дополнительные 150 мА через через компьютер не желательно, в таком случае необходимо использовать дополнительный блок питания 5 вольт. В данном варианте был использован импульсный источник питания от зарядного устройства от мобильного телефона. Можно использовать любой нестабилизированный источник питания при условии, что он может обеспечить напряжение 5 вольт и ток порядка 250 мА с учетом запаса. Также можно использовать и другое напряжение, но в таком случае необходимо будет взять и реле с соответственным напряжением питания. Для согласования источника сигнала с реле и источником питания необходимо установить транзисторный ключ типа:

Транзистор выбран типа КТ815 с любой буквой и резистор 1 кОм, диод - КД522. При такой схеме включения ток потребления показал 4 мА, что не столь существенно для ноутбука. Светодиод LED1 и LED2 обозначают состояние цепи. По желанию вместе с резисторами их можно исключить из схемы.

Устройство управления 220 В собрано в свободном месте корпуса розетки - сетевого фильтра. Файл схемы в сплане находится

13-01-2014

ATiny2313

Захаров Денис, Украина

Как известно, существует достаточное количество интерфейсов, с помощью которых микроконтроллер (МК) может общаться с внешними устройствами. Если необходимо связать МК с персональным компьютером или ноутбуком, то с уверенностью можно сказать, что лучше всего использовать интерфейс COM-порта RS-232.

Причина такого выбора очевидна - практически все контроллеры имеют аппаратные модули UART, с помощью которых можно передавать информацию при минимальном расходе ресурсов МК. Кроме того, существует множество хорошо зарекомендовавших себя программ, предназначенных для работы с COM-портом. Поскольку сигналы МК имеют уровни TTL, для согласования с интерфейсом RS-232 необходим преобразователь уровней. Часто его выполняют на основе доступной и популярной микросхемы MAX232 .

Рисунок 1.

Представленное устройство (Рисунок 1) предназначено для управления приборами с помощью любого ПК, имеющего порт USB. Современные компьютеры и ноутбуки имеют по несколько таких портов. С помощью этого комплекса можно производить управление светом, телевизором и другими приборами. Исполняющие устройства не обязательно должны находиться в непосредственной близости от ПК.

Прибор состоит из вполне доступных и распространенных элементов. Обе микросхемы - микроконтроллеры ATtiny2313 семейства . Первый контроллер подключен к USB-порту компьютера и выполняет функцию конвертора форматов USB-COM. Второй подключается к первому и все время сканирует команды, которые посылаются с ПК через терминальную программу Terminal v1.9b.

Подключенный к выводу 2 USB резистор R4 переводит устройство в низкоскоростной режим LS, позволяющий при обмене данными со скоростью 1.5 Мбит/с с помощью программы выпонять расшифровку посылок от ПК.

С помощью резисторов R2 и R3 происходит устранение переходных процессов. Конденсатор С5 блокирует импульсные помехи в цепи питания. Стабилитроны D1 и D2 необходимы для согласования логических уровней МК и USB входа ПК. Для безошибочной передачи данных между контроллерами частоты кварцевых резонаторов должны быть равны 12 и 4 МГц.
К выводам /RESET следует подключить подтягивающие резисторы, чтобы в дальнейшем избежать произвольного сброса МК из-за влияния помех и статических напряжений. В данной схеме все команды отображаются на светодиодах, подключенных к порту В. Чтобы управлять какими-либо устройствами, необходимо подключать выходы контроллера к реле (Рисунок 2).

Собрать устройство можно на макетной плате, хотя лучше, все же, на полноценной печатной плате. Элементы можно разместить, например, так, как показано на Рисунке 3.

Программа для микроконтроллера U1 разработана товарищем GetChiper в среде Bascom-AVR. Для работы с шиной USB использована библиотека swusb.LBX . С ее помощью выполняется программное декодирование USB протокола в режиме реального времени. Для работы устройства с ПК, нужно установить соответствующие драйверы, скопировав их на жесткий диск. При первом подключении устройство опознается и запросит драйвер. Далее нужно указать путь к папке с файлами, и все заработает.

Программа микроконтроллера U2 была написана мною в среде AVRStudio на языке ассемблера. Блок-схема алгоритма работы МК представлена на Рисунке 4. Аппаратный модуль UART следует настроить на прерывание по завершению приема данных. Сам МК не будет выполнять ни одной функции, пока не наступит прерывание. Для снижения энергопотребления можно воспользоваться режимом sleep, но в данной конструкции этого делать не понадобилось. Как только из терминала ПК последуют команды, МК мгновенно перейдет к их сканированию. На данный момент контроллер поддерживает следующую систему команд:

-on1, on2, on3, on4, on5, on6, on7, on8 - команды установки портов в «лог. 1»;
-off1, off2, off3, off4, off5, off6, off7, off8 - команды установки портов в «лог. 0»;
-ser - установить все порты в активное состояние «лог. 1»;
-clr - сбросить все порты в состояние «лог.0».

После окончания ввода каждой команды необходимо нажимать Enter. Таким образом МК сможет определить конец команды и приступить к ее сканированию. На каждую верную команду контроллер будет отвечать «ok». Если ввести неверные данные, то в терминальную строку вернется «error». Пример выполнения команды показан на Рисунке 5.

Версия прошивки 1.0. Выставлять фьюзы необходимо в соответствии с Рисунком 6. Разрабатывается следующая версия прошивки, где будет происходить самообучение МК и изменение систем команд в терминале.

Программное обеспечение МК, виртуальная модель Proteus и драйвер для ПК -
Протокол передачи данных между МК и ПК- скачать

  • ....вообще-то хотелось увидеть соопрежение м/у USB-портом одного компьютера с COM-портом второго...или LPT-порта третьего...
  • Спасибо! Опечатка исправлена:)
  • Зачем использовать 2 МК? Неужели у Attiny2313 мало flash? Или просто не хватает портов I/O? Тогда ладно, видно, что USB висит на INT0/INT1.
  • Сопротивление катушек маломощных реле в районе 100-200 Ом, не учитывая насыщенный транзистор (это же не пускатель, и не контактор). Так что 50-200 мА подходящий ключ не испугается. Материал очень интересен в плане привязки МК к USB без всяких интерфейсных микросхем и без присутствия в структуре МК аппаратного USB. Но учитывая цели и задачи первоисточника http://www.recursion.jp/avrcdc/cdc-232.html, из двух МК один выполняет всё же функции преобразователя USB-COM. И весьма дешёвого преобразователя, что безусловно радует.
  • Вот интересный гражданин попался с «дворянскими замашками», судя по нику. О каких экстремумах идёт речь? Вроде в материале нет даже упоминания о типе реле или транзисторов. И если реле запитывается от 5В USB то, безусловно, хотелось бы минимизировать потребление со стороны хоста на ПК. Этого можно добиться оптронами и дополнительным питанием реле со стороны нагрузки, что усложняет схему. Или ещё пару вариантов. Разве акцент в статье сделан на оптимизации? Автор добился своего и правильно делает, что не выкладывает конкретную плату. Для того, кто будет повторять, данного узла достаточно.
  • Да, статейка еще та... но стоит ли так опситраться? Я тоже хотел кое что прокомментировать сразу как ее прочел, и диод в том числе. Но анонимно тут нельзя. Вот зачем автору AVR-CDC? Я не заметил что где-то в схеме используются сигналы DTR, DTS, RTS, CTS. V-USB не хватило? Про два "кирпича" уже написали выше, - хватило бы и одного. А про диод уже исправлено, слава Будде! Диод нужен для защиты транзистора от импульса напряжения самоиндукции обмотки реле, в момент размыкания тока. Вот, кстати, вспомнил одну реализацию. Статья была в журнале Радио, но и в интернетах нашлась, кому интересно можете глянуть.

За основу схемы взяты сдвиговые регистры 74hc595 которые управляются микроконтроллером PIC18F252. Выхода схемы логические, т.е. лог "1" или лог. "0". Они маломощные, по этому для управления какими нибудь устройствами нужны усилители (ключи). Не забывайте про гальваническую развязку управляемых устройств со схемой! Контроллер управляется по протоколу USART непосредственно с компьютера. Способы реализации протокола рассмотрены ниже.

Рассмотрим два способа получения USART.

1-ый, самый простой способ:
Это преобразователь уровня RS232 в USART. Схема которого приведена ниже.

Думаю здесь рассказывать нечего. 7,8 выводы подключаются к СОМ порту компьютера, а 9,10 к основной схеме устройства.

2-ой способ : Преобразователь USB - COM

Практически на всех новых компьютерах нет последовательного COM порта, а большая часть старой техники, работает именно через этот интерфейс, так называемый RS232. На новых компьютерах появилась последовательная шина USB, но протокол обмена данными через USB сложнее, чем по RS232.
Благодаря разработкам английской компании FTDI (Future Technology Devices International) появилась возможность преобразовать USB в "виртуальный" последовательный порт, обмен данными с которым ведут привычными хорошо известными методами.

Это преобразователь интерфейсов USB to COM предназначен для подключения к USB шине модема, сканера, различную измерительную аппаратуру, т.е. фактически любое устройство, ранее использовавшее интерфейс RS-232. Причем пользователю не требуется никаких знаний об устройстве и работе USB. Поставляемые компанией FTDI программные драйверы создают впечатление, что обмен идет через обычный COM порт. Разумеется, это справедливо только в том случае, если программное обеспечение использует COM порт в стандартном режиме.
Принципиальная схема преобразователя интерфейса показана на рисунке. Его основа - микросхема DD1 FT232BM включена по стандартной схеме, рекомендованной изготовителем.

Микросхему ЭСППЗУ DD2 AT93C46 можно не устанавливать. В ней хранятся идентификаторы изготовителя (VID) и персональный (PID), заводской номер изделия и другие данные. Это необходимо, если по USB с компьютером одновременно связаны несколько устройств на микросхемах FT232BM. Особенно важен серийный номер, так как программный драйвер полагается на его уникальность, ассоциируя тот или иной виртуальный COM-порт с конкретным устройством. Если ПЗУ отсутствует, к компьютеру можно подключить только одно образующее виртуальный COM порт устройство. Вместо AT93С46 можно использовать AT93C56 или AT93C66. Программируется ПЗУ непосредственно в устройстве с помощью специальной утилиты, поставляемой FTDI.

Я немножко подукоротил схемку и сделал вот так. Питание сделал от общей схемы устройства.


Выводы RX и TX к основной схеме устройства. Драйвер к этой МС можно скачать на оф. сайте под конкретную ОС.

Работа устройства представляет из себя двухстороннюю связь с ПК на скорости 115200 Кбит/сек. с проверкой контрольной суммы команды. Т.е. исключены ошибочная передача данных. При запуске программы происходит опрос наличия подключенного устройства и если оно обнаружено или утеряно в процессе, программа даст знать.

Управляется это устройство, специально мною написаной, программой и лежит в архиве. В принципе программа как бы демонстрационная, может только управлять выводами. Так что за индивидуальной программой, для конкретного случая, обращайтесь.

 


Читайте:



Завершился вывод войск ссср из афганистана

Завершился вывод войск ссср из афганистана

В 1987 году в Афганистане начала осуществляться политика национального примирения, принятая и одобренная на Пленуме ЦК НДПА в декабре 1986 года....

Новое направление: инноватика Сложно ли учиться на инноватике

Новое направление: инноватика Сложно ли учиться на инноватике

Предоставляют массу возможностей для выбора профессионального направления. Многие из предметов и направлений обозначены достаточно непонятными...

К чему снится племянница

К чему снится племянница

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

Репейник: толкование сновидения

Репейник: толкование сновидения

Сонник репейник толкует как символ стремления к особой защищенности от возможных неприятностей. Сон, в котором вы видели одиноко стоящий куст,...