2. ПРОГРАММИРОВАНИЕ LPT-ПОРТА
2.1. Установка драйвера giveio sys
2:2. Управление состоянием линий LPT-порта
2.3. Схема стенда для отладки программы
2.4. Сопряжение микроконтроллера с LPT-портом
2.5. Аппаратно-программные средства снятия вольт-амперных характеристик полупроводниковых приборов
2.5.1. Снятие вольт-амперных характеристик биполярных транзисторов
2.5.2. Снятие вольтамперных характеристик полевых транзисторов
2.5.3. Снятие вольт-амперных характеристик диодов
2.5.4. Снятие вольт-амперных характеристик стабилитронов
2.5.5. Блок управления
2.5.6. Описание программных средств
3 ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ
3.1. Аппаратная организация порта
3.2. Интерфейс RS-232C
3.3. Электрический интерфейс
3.4. Управление потоком передачи
3.4. Интерфейс «токовая петля»
3.6. Инфракрасный интерфейс
3.7. Интерфейс MIDI
3.8. Конфигурирование СОМ-портов
3.9. Использование СОМ-портов
3.10. Неисправности и тестирование СОМ-портов
3.10.1. Проверка конфигурирования
3.10.2. Функциональное тестирование
3.11. Программирование UART для микроконтроллеров
3.11.1. Передача данных
3 11.2. Прием данных
3.11.3. Управление UART
3.11.4. Бод-генсратор (Baud Rate Generator)
3.12. Сопряжение компьютера с микроконтроллером по СОМ-порту
3.13. Программа для микроконтроллера
4. ПРОГРАММИРОВАНИЕ СОМ-ПОРТОВ
4.1. Открытие порта
3.2. Настройка параметров порта
4.3. Настройка тайм-аутов
4.4. Использование стандартного диалога настроек порта
4.5. Прием и передача данных
4.6. Использование потоков
5. ШИНА USB
5.1. Аппаратная организация шины
5.2. Преобразователи USB-FIFO
5.3. Подключение микросхемы FT245BM к USB
5.4. Преобразователи USB-RS232
5.5. Подключение микросхемы FT232BM к USB
6. ПРОГРАММИРОВАНИЕ USB-ШИНЫ
6.1. Установка драйверов
6.2 .Определение подключенных устройств. Получение информации об устройстве
6.3. Организация обмена данными
6.4. Программа для контроллера AVR
6.5. Использование тайм-аутов
6.6. Программирование устройств на базе FT232
6.7. Программирование EEPROM
6.8. Коды ошибок при работе с USB
7. ОБЗОР ПРОГРАММНЫХ СРЕДСТВ ДЛЯ РАБОТЫ С ПОРТАМИ
7.1. Proteus
7.2. SCADA-снстемы
7.2.1. Принцип работы SCADA систем
7.2.2. Система Genie
7.3. Teiminat
7.4. Wtnscope
8. ПРИНЦИПЫ ОРГАНИЗАЦИИ СЕТЕВЫХ КОММУНИКАЦИЙ
8.1. Использование Windows Sockets
8.2. Инициализация Winsock
8.3. Создание гнезда и открытие соединения
8.4. Отправление и получение сообщений
8.5. Управление процессом генерации сообщений
8.6. Пример разработки программы
ПРИЛОЖЕНИЯ
ЛИТЕРАТУРА
Издательство: Олди-плюс
Год издания: 2008
Страниц: 380
ISBN: 978-966-8447-51-8
Язык: русский
Формат: PDF
Размер: 8,5 Мб
Скачать: Рябенький В.М. Компьютерное управление внешними устройствами через стандартные интерфейсы
П. ВЫСОЧАНСКИЙ, г. Рыбница, Приднестровье, Молдавия
У стройство компьютерного управления различными приборами, схема которого показана на рис. 1, функционально подобно описанному в , но подключается к USB-порту компьютера, который (в отличие от СОМ-порта) сегодня есть в каждом из них. Единственная микросхема устройства - распространенный микроконтроллер ATmega8. Он необходим для организации связи по шине USB. Хотя в нем и отсутствует специализированный аппаратный модуль, эта функция выполняется программно.
Резистор R1, подключенный между положительным выводом источника питания и линией D-шины USB, переводит ее в низкоскоростной режим LS со скоростью обмена 1,5 Мбит/с, что и позволяет расшифровывать посылки компьютера программным способом. Резисторы R4 и R5 устраняют переходные процессы, возникающие при обмене информацией, что увеличивает стабильность работы. Конденсатор С1 блокирует импульсные помехи в цепи питания, что также улучшает стабильность работы устройства. Диоды VD1 и VD2 служат для понижения напряжения питания микроконтроллера приблизительно до 3,6 В - это требуется для согласования уровней с шиной USB. Сигналы управления приборами формируются на выходах РВО-РВ5 и РСО, РС1 микроконтроллера. Высокий логический уровень - напряжение около 3,4 В. Напряжение низкого уровня близко к нулю. К выходам можно подключать приборы, потребляющие ток не более 10 мА (от каждого выхода). Если требуются большие значения тока или напряжения, то следует использовать узлы согласования, показанные в на рис. 5 и 6.
Устройство собрано на макетной плате, печатная не разрабатывалась. Применены резисторы МЛТ, конденсаторы С2 и СЗ - керамические высокочастотные, С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 XP, Windows 7, а 64-разрядной - только в Windows ХРх64.
Программа UniUSB написана на языке PureBasic (версия 4.31) с использованием библиотеки пользовательских функций HIDJJb, поддерживающей работу с USB HID устройствами. Внешний вид окна программы показан на рис. 3.
В одной папке с ее исполняемым файлом должен находиться файл, называющийся UniUSB_KOfl.txt или UniCOM_KOfl.txt. Последний вариант необходим для совместимости с программой UniCOM, предложенной в . В этом файле хранится сценарий управления внешними приборами. При запуске программы данные из файла загружаются в таблицу, расположенную в главном окне, а при завершении работы сохраняются в файле. Щелчок левой кнопкой мыши по ячейкам таблицы позволяет изменять их состояние: 1 - высокий логический уровень, 0 или пусто - низкий логический уровень.
Для добавления или удаления столбца таблицы нужно по ней щелкнуть правой кнопкой мыши и в появившемся меню выбрать требуемое действие.
При подключении устройства к USB-порту программа обнаружит его и активирует кнопку > , расположенную в верхней части окна на панели инструментов. Нажатием на эту кнопку запускают процесс перебора столбцов таблицы и установки указанных в них состояний выходов. Для большей наглядности слева от таблицы подсвечиваются номера выходов, на которых в данный момент установлен высокий логический уровень. Скорость перебора (время в миллисекундах между переходами от столбца к столбцу) задают в поле "Скорость, мс".
Учтите, операционная система Windows - многозадачная! Это означает, что процессорное время делится между множеством иногда скрытых от пользователя процессов, которые выполняются по очереди с учетом установленных в системе приоритетов. Поэтому не стоит ожидать большой точности выдерживания интервалов времени менее 100 мс.
Для кратковременной остановки перебора столбцов используйте кнопку JB. Повторное нажатие на нее продолжит перебор с места остановки. Кнопка ■ полностью прекращает перебор столбцов таблицы. Если в процессе обмена информацией между компьютером и устройством произойдет сбой либо устройство будет отключено от разъема USB компьютера, программа сообщит об ошибке, выведя в строке состояния соответствующее сообщение.
В статье сделана попытка предоставить пошаговую инструкцию - как соединить самодельное устройство USB HID на микроконтроллере AVR и компьютер с операционной системой Windows 7 x64 , чтобы обмениваться данными и управлять портами микроконтроллера. Пример приложения управляет через USB ножкой порта микроконтроллера (к ней подключен индикационный светодиод). Есть возможность также прочитать состояние состояние светодиода - потушен он или горит. Топик предназначен для новичков, поэтому большая просьба к знатокам программирования - приберегите тухлые яйца и гнилые помидоры иронические комментарии для более удобного случая.
Все программное обеспечение, кроме Visual Studio 2010, бесплатное, хотя есть возможность использовать Visual Studio C# 2010 Express бесплатно в течение ограниченного срока. Все действия проводились в среде операционной системы Windows 7 x64, но наверняка подойдет и любая другая операционная система семейства Windows (Windows XP и более свежая).
Чтобы экономить время и усилия, лучше использовать готовую макетную плату. Особенно удобно, если в плату будет записан USB-загрузчик (bootloader), тогда не понадобится покупать программатор для перепрошивки платы. Я использовал макетную плату AVR-USB-MEGA16 с микроконтроллером ATmega32A, в ней загрузчик есть (USBasploader, эмулирующий поведение программатора USBasp). Вот так платка выглядит в натуральную величину:
Можно взять также metaboard (на нем стоит ATmega168 или ATmega328), или даже программатор на микроконтроллере ATmega8. Подобные железки можно дешево купить на ebay.com или dx.com .
Теперь нужно правильно настроить компилятор. В верхнем меню 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), появится окно с настройками:
Сделайте следующие настройки:
В выпадающем списке 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.
Примечание. Программа была создана на основе примера консольного приложения из той же библиотеки 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); }
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, то в ответ заполняется буфер текущим состоянием светодиода, и данные буфера отправляются обратно хосту. Все очень просто, и при желании поведение кода можно легко переделать под свои нужды.
Видео, как это работает:
Буду рад ответить в комментариях на вопросы и конструктивные замечания.
Скорость переключения |
|
Выбор COM-порта |
|
Кнопка старт и пауза (включение порта) |
|
Кнопка стоп (отключение порта) |
|
Кнопка настройки выходов |
|
Кнопки ручного управления входами (1, 2, 3) |
|
Кнопка очистки таблицы |
|
Кнопка вызова справки |
|
Кнопка выхода из программы |
|
Индикаторы, имитирующие работу выходов |
|
Сетка таблицы со значениями (пустые ячейки |
Для управления нагрузкой в схемах с постоянным напряжением, например 24В, можно использовать любые мощные составные транзисторы - в нашем случае КТ829.
Для коммутации переменного тока 220В проще всего использовать так называемый полупроводниковый ключ переменного тока, который имеет на входе оптодрайвер с детектором нуля фазы, что обеспечивает гальваническую развязку.
Для увеличения коммутируемого тока симистор устанавливается на радиатор. Обратите внимание - в высоковольтной части использованы сопротивления мощностью 0,5 Вт.
Не забывайте о технике безопасности - во время работы коммутатора не касайтесь оголенных элементов, а при перепайке деталей и проводов отключите коммутатор от сети.
Плата выполнена из одностороннего фольгированного текстолита. Размер платы 30х25мм. На плате под корпусом микросхемы впаяна перемычка. В целях защиты от перегрева микросхемы во время пайки использована 16-контактная панель под микросхему.
Для управления выходами (светодиодами), устройство достаточно соединить с ПК 4х проводным шнуром. Шнур распаивается на стандартный разъем к COM-порту - розетку DB9.
Сигнал +5В для общего провода цифровых входов берётся из схемы устройства. Сопротивления в линиях цифровых входов можно распаять в корпусе розетки DB9.
К цифровым входам можно подключить кнопки, тумблера, микропереключатели.
Справочная информация
Основой устройства является доступная микросхема 74hc595, представляющая собой последовательный регистр сдвига с выходной блокировкой. Для управления этой микросхемой достаточно трёх сигнальных линий. В нашем случае сигналы инициируются в программе управления UniCOM и выдаются через интерфейс RS-232 (COM-порт). В качестве сигнальных линий в этом интерфейсе использованы линии 9-контактного разъема: RTS - 7 контакт, DTR - 4 контакт и TxD - 3 контакт.
Принцип работы микросхемы 74hc595 заключается в последовательной записи логических сигналов высокого и низкого уровней, подаваемых на вход DS (14 ножка). Запись осуществляется задним фронтом (переход из лог. 1 в лог. 0) на входе SH_CP (11 ножка). Вывод записанных данных происходит также задним фронтом, но на входе ST_CP (12 ножка). Таким образом, на ножках 1-7 и 15 появляются уровни последних восьми записанных сигналов.
Высокому уровню сигнала на выходах (ножки 1-7 и 15) соответствует напряжение питания микросхемы - в нашем случае +5 Вольт, а низкому уровню соответствует 0 Вольт. Сигналы на выходах являются статическими, т.е. неизменными до тех пор, пока не придёт очередной импульс на вход ST_CP (12 ножка). Необходимо отметить, что снижение напряжения питания ниже минимального уровня ведет к сбросу сигналов на выходах. Согласно документации на микросхему, минимальное напряжение питания составляет 2 вольта.
Сопряжение интерфейса RS-232 с микросхемой 74hc595 сделано посредством стабилитронов на 5,1В. Согласно спецификации на RS-232 высокий уровень сигнала лежит в диапазоне от +3 до +25В, что позволяет нам организовать обратную связь с программой управления UniCOM.
Компьютер, некоторые детали, инструменты любой желающий сможет организовать простое управление бытовыми приборами с этого компьютера. Множество приборов используемых в быту имеют множество функций, например большинство современных телевизоров могут показывать некоторое количество разных каналов, у вентилятора м.б. некоторое количество разных режимов работы и т.д. Для того чтобы сделать такое сложное управление как например переключение каналов или режимов работы, помимо перечисленного выше понадобятся дополнительные знания, детали и инструменты но сделать простое включение и выключение под силу каждому кто это перечисленное имеет. Arduino связывается с компьютером через USB порт, передачу информации с компьютера на Arduino можно осуществлять через среду разработки для Arduino (называется Arduino IDE) которую можно скачать с страницы на официальном сайте Arduino . Существует множество разнообразных модулей для взаимодействия Arduino с внешним миром, например специальный модуль с блоком реле для коммутации нагрузок, при использовании таких модулей работа сильно упрощается, здесь же мы рассмотрим самостоятельное изготовление модуля с одним реле для включение/выключения бытовых приборов, при необходимости можно изготовить более одного такого модуля и использовать их с одним Arduino тем самым сделав возможным простое управление множеством бытовых приборов. Arduino (любое) имеет некоторое количество выводов общего назначения которые обозначаются, на плате, просто цифрами или цифрами с волнистым знаком "~". Подключив Arduino к компьютеру и записав в него (в Ардуино) специальный скетч (программа для Arduino) можно с этого компьютера через программу "Arduino IDE" управлять этими выводами делая на них высокое напряжение (примерно +5В (HIGH)) или низкое (примерно 0В (LOW)). Также на Arduino есть вывод "GND" (на плате так и обозначен). Если на одном из выводов общего назначения высокое напряжение то подключив что либо проводящее ток между этим выводом и выводом "GND" через то что подключено потечёт электрический ток и величина этого тока будет зависеть от сопротивления этого предмета и рассчитать её можно по , т.е. чем меньше сопротивление том больше ток, но если сопротивление будет слишком низким то через Arduino потечёт слишком большой ток и оно перегорит. Максимальный ток который может выдать вывод общего назначения Arduino может быть разным в зависимости от используемого в нём микроконтроллера но обычно это 40мА = 0.04А - этого может быть недостаточно для того чтобы включить реле которое будет включать прибор (приборы) поэтому для усиления тока необходимо использовать дополнительный элемент например биполярный транзистор. Биполярный транзистор имеет три вывода: эмиттер, коллектор, база. Максимальный ток транзистора также ограничен как и у Ардуино и обычно он больше, например у популярного КТ315 максимальный ток равен 100мА = 0.1А. Биполярные транзисторы бывают двух типов n-p-n и p-n-p использовать можно оба типа но по разному и далее рассмотрим использование транзистора КТ315 тип которого n-p-n. Для того чтобы транзистор усилил ток из Ардуино необходимо соединить его базу с выводом Ардуино ЧЕРЕЗ РЕЗИСТОР сопротивлением 1кОм (на резисторе м.б. написано 1к), эмиттер этого транзистора соединить с "GND" Arduino и минусом питания или "GND" источника питания напряжение которого равно напряжению обмотки имеющегося реле (допустим 12В) один из выводов обмотки реле соединить с коллектором транзистора другой с плюсом источника питания (+12В допустим) и ещё одной не влияющей на усиление но ОЧЕНЬ важной деталью является диод который нужно соединить анодом с коллектором и катодом с плюсом источника питания (+12В). Если диод импортный то на скорее всего на его корпусе будет светлая полоса - она указывает на катод, другой вывод диода это анод. Оставшиеся выводы реле - это выводы его контактов, если их два и они не замкнуты то при подаче достаточного тока на обмотку реле эти контакты замкнуться, их нужно соединить последовательно с прибором и это последовательное соединение можно втыкать в розетку, тогда при замыкании контактов на прибор поступит 220В и он включиться. Описанное выше можно изобразить на картинке:
Рисунок 1 - Управление прибором с компьютера
Рисунок 2 - Управление прибором с компьютера
Char pc_code=0;
Void setup()
{
pinMode(2, OUTPUT);
Serial.begin(9600);
}
Void loop()
{
if (Serial.available() > 0)
{
pc_code = Serial.read();
if(pc_code=="a")
{
digitalWrite(2, HIGH);
}
else if(pc_code=="b")
{
digitalWrite(2, LOW);
}
}
}
О том как правильно настроить Ардуино и загрузить в неё скетч уже описано на странице . Далее для включения прибора необходимо на Ардуино отослать символ "a" для выключения символ "b". Для того чтобы отослать символ на ардуино можно, в среде Arduino IDE, войти по вкладке Инструменты-Монитор последовательного порта и в появившемся окне в верхнем текстовом поле вписывать символы и отсылать нажатием кнопки "отправить" символ придёт на ардуино и для данного случая если отослать символ "a" то прибор включиться, если "b" то соответственно выключиться. Если Ардуино не принимает символы то нужно в правом нижнем углу окна монитора последовательного порта установить такую же скорость какая прописана в скетче т.е. 9600 бод. Для того чтобы включать 2 прибора можно немного изменить скетч:
Char pc_code=0;
Void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
Serial.begin(9600);
}
Void loop()
{
if (Serial.available() > 0)
{
pc_code = Serial.read();
if(pc_code=="a")
{
digitalWrite(2, HIGH);
}
else if(pc_code=="b")
{
digitalWrite(2, LOW);
}
else if(pc_code=="c")
{
digitalWrite(3, HIGH);
}
else if(pc_code=="d")
{
digitalWrite(3, LOW);