Форум РадиоКот https://radiokot.ru/forum/ |
|
Управление через СОМ порт компьютера внешними устройствами https://radiokot.ru/forum/viewtopic.php?f=24&t=46771 |
Страница 1 из 1 |
Автор: | Володя Шишкин [ Пн апр 18, 2011 15:33:35 ] |
Заголовок сообщения: | Управление через СОМ порт компьютера внешними устройствами |
(язык - visual basic 6.0) 1. Суть метода Часто в конференциях от радиолюбителей можно услышать вопрос:"Я сделал (хочу сделать) какое-то внешнее устройство и имею желание подключить его к компьютеру по СОМ порту, чтобы им как-то управлять, но не знаю как". СОМ порт более предпочтителен для таких экспериментов, так как у него выше, чем у LPT нагрузочная способность, и поэтому меньше шансов спалить порт. Если у вас установлен Visual Basic и есть какие-то навыки программирования на нём, то наиболее простой, по-моему, путь- использовать компонент управления (контрол) MSComm Control, который вызывается Project->Components->и поставить галочку на MSComm Control. Далее необходимо поместить этот контрол на форме и написать код программы для него. Сложность заключается в том, что приём-передача через СОМ порт требуют строгого соблюдения протокола RS-232, и не всем радиолюбителям под силу разработка контроллера, который бы этот протокол поддерживал. Между тем этот контрол MSComm позволяет считывать и управлять отдельными выводами СОМ порта и тем самым напрямую управлять какими-то внешними устройствами без формирования временных последовательностей RS-232 протокола. В качестве примера такого внешнего устройства можно привести популярный программатор PonyProg (правда он написан не на VB, но принцип одинаковый). Если внимательно посмотреть на его схему, то видно, что в некоторых случаях (например, при программировании микросхем 24хх), главные информационные сигналы СОМ порта Rx (2) и Tx (3) не используются вообще. Весь обмен идет через вспомогательные выводы CTS(8), DSR (6), DTR (4), RTS (7) (хотя кое-где используется 3-й вывод Tx, об этом мы тоже поговорим). Для того чтобы считать состояние вывода, достаточно на вход порта компьютера подать однополярные положительные сигналы и обойтись без преобразователей уровня TTL-RS232. Вообще-то это не соответствует стандарту RS-232, однако большинство портов с такими уровнями замечательно работают. Итак, три вывода СОМ порта - CD, CTS, DSR можно опросить. Команда, которая позволяет считать состояние например вывода CTS (8), выглядит примерно так: Код: If MSComm1.CTSHolding = False Then' (1) 'или If MSComm1.CTSHolding = True Then' (2). То есть этой командой мы опрашиваем 0 или 1 присутствует на выводе CTS. На два вывода СОМ порта - DTR и RTS можно вывести (+12В) или (-12В), и тем самым зажечь светодиод, включить реле или какой-то другой исполнительный механизм. Например, для вывода RTS, это команды: Код: MSComm1.RTSEnable = False ' (3) выводит на 7 ножку +12Вольт. MSComm1.RTSEnable = True ' (4) выводит на 7 ножку -12Вольт. На основе этих команд (1)-(4) можно организовать как простой обмен данными с компьютером, так и довольно сложные протоколы, например I2C, SPI, MiсroWire и т.д. В качестве примера можете посмотреть DS1621 pc thermometer, и как, используя эти команды, Альберто Риччи организовал I2C протокол обмена с микросхемой термометра DS1621. ![]() Рис.1. Схема для проверки Если в качестве практики вы не поленитесь за 10 мин собрать схему рис.1 (можно прямо навесным монтажом на разъёме DB9), и запустить программу Com_device, то сможете увидеть как реагирует программка на замыкание кнопки и включает-выключает светодиод (кнопкой LED) с помощью именно тех команд, о которых я говорил выше (на кнопку ''Ввод" пока не обращайте внимания). Если же вашему устройству требуется импульсный сигнал, то и его несложно получить. Правда для этого всё же придётся познакомится с временной диаграммой протокола RS-232 (рис.2). ![]() Рис.2. Временная диаграмма RS-232 Как видно, первым идёт старт-бит, затем биты данных, затем стоп-бит (обратите внимание, что 0- это +12В, 1- это -12В) . Предположим, мы посылаем старт-бит, затем сразу же за ним какое-то число нулей, например, в битах 0-1-2-3. Получим такой импульс Рис.3. Формирование импульса Меняя число импульсов вслед за стартовым, мы сможем менять длительность импульса (правда с шагом в длительность бита). Для этого на порт необходимо посылать одно из следующих чисел: FF, FE, FC, F8, F0, E0, C0, 80, 00. Причём при FF длительность импульса будет минимальная, при 00- максимальная. На рис.3 код импульса - F0. Чтобы компьютер выдал на COM порт такой сигнал нужно всего-то выполнить команду Код: MSComm1.Output = "какой-символ или строка" '(5) Этой командой на порт выдается ASCII код символа. А как нам послать на порт, например, число F0 (240 в десятичном виде)? Вот таким нехитрым способом: Код: MSComm1.Output = Chr(240) ' (6) То есть мы сперва преобразуем число 240 в какой-то символ (я даже не знаю какой, можете посмотреть по таблице ASCII кодов) и этот символ отправляем на выход порта. Таким образом мы можем из компьютера сделать 8-уровневый формирователь ШИМ сигнала и управлять, например, скоростью вращения какого-нибудь моторчика постоянного тока, вентилятора и т.д. Только сигнал этот придется усилить по току и без внешнего питания вы вряд ли обойдётесь, так как макс. ток, который может выдать СОМ порт- что-то около 25мА. Можете это питание взять с блока питания компьютера. Возможно, придётся ещё и усреднить этот ШИМ сигнал RC-цепочкой или интегрирующим усилителем, это зависит от вашего устройства. Теперь пришло время нажать кнопку "Ввод" в программе Com_device. Вы увидите окно ввода чисел. Если вы введёте одно из десятичных числел 255, 254, 252, 248, 240, 224, 192, 128, 0 , то вы получите гладкий импульс на 3(Tx) выводе DB9. Если же у вас нет осциллографа, подключите вольтметр постоянного тока между 5(GND) и 3(Tx) выводами и посмотрите, как меняется напряжение. У меня получилась такая зависимость: Код: FF | FE | FC | F8 | F0 | E0 | C0 | 80 | 0 255 | 254 | 252 | 248 | 240 | 224 | 192 | 128 | 0 -9.2B | -8.1B | -7.0B | -5.9B | -4.8B | -3.6B | -2.5B | -1.4B | -0.4B Как видно, довольно линейная картинка. Посмотрите, как изменится сигнал при изменении свойства Interval таймера Timer2, а также попробуйте в строке MSComm1.Settings = "1200,N,8,1" изменять скорость обмена (параметр baud rate- в этой строке= 1200). Если 8 уровней вам не хватает, можете посылать подряд 2 байта: Код: MSComm1.Output = Chr(240) & Chr(255) '(7) Получится уже 16 уровневый формирователь. С помощью его уже можно организовать 4-разрядный ЦАП, а если его дополнить внешним компаратором, выход которого опрашивать с помощью команд (1),(2) одним из выводов CD, CTS, DSR; то можно и получить 4-разрядный АЦП, например последовательного приближения. Com_device.rar(5,2 Kb) - архив с исходным текстом программы на VB. Схема ниже показывает как можно управлять скоростью вращения вентилятора с помощью ШИМ сигнала, сформированного из Тх-сигнала СОМ-порта. Вентилятор можно использовать от блока питания компьютера. ![]() Рис.4. Схема управления скоростью вращения вентилятора Заметьте, что выводы 2 и 3 разъёма DB9 в ней объединены. Запустив программу FunControl (рис.5) и щёлкая по радиокнопкам, можно дискретно изменять скорость вращения вентилятора. ![]() Рис.5. Окно программы управления скоростью вращения вентилятора FunControl. Ехе-файл программы FunControl находится в архиве Exe.rar. |
Автор: | Володя Шишкин [ Пн апр 18, 2011 15:39:07 ] |
Заголовок сообщения: | Re: Управление через СОМ порт компьютера внешними устройст |
2. Расширяем число линий вывода Всё бы хорошо, но в большинстве случаев два вывода СОМ порта - DTR и RTS - это катострофически мало. Выход из этой ситуации давно известен и очень прост. Он очень часто используется разработчиками устройств на микроконтроллерах при дефиците выводов (ну например, даже в моём проекте Цифровой термометр ![]() Сигналы с СОМ-порта компьютера через разъём DB9 подаются на схемы сопряжения (транзисторы Q1...Q3). Вместо них можно использовать какой-нибудь МАХ232. RTC выступает в качестве входа последовательных данных (serial data input), Тх- в качестве сигнала сдвига (shift register clock input), DTR - в качестве сигнала записи (защёлки) (storage register clock input) - в скобках обозначения по даташиту, который я советую скачать. Рис.6. Увеличение числа линий вывода с помощью регистра сдвига 74HC595 На рис.7 показано окно программы. Скачайте исходник на VB6 ехе-файл (52кБ) . Рис.7. Окно программы Нажимая на кнопки 0...7 выберете комбинацию и нажмите кнопку "Ввод". Должны загореться соответствующие светодиоды. Кнопка "Очистить " гасит все светодиоды. Вместо светодиодов можно использовать реле или другие исполнительные механизмы (конечно, с учётом их нагрузочной способности). Число линий вывода можно увеличивать наращиванием числа сдвиговых регистров, при этом вывод 9 надо соединить со входом 14 последующего (как, например на схеме ниже). |
Автор: | Володя Шишкин [ Пн апр 18, 2011 15:42:35 ] |
Заголовок сообщения: | Re: Управление через СОМ порт компьютера внешними устройст |
3. Вывод даты-времени на 4-разрядный LED-индикатор Конечно СОМ порт проигрывает LPT по скорости обмена, но часто больших скоростей и не требуется. Но чтобы у вас не сложилось впечатление, что это уж слишком "тормознутый" порт, предлагаю посмотреть, как можно вывести системные дату-время на 4-разрядный LED-индикатор. Причём с динамической индикацией- и без всяких микроконтроллеров! При этом частота регенерации составила около 70Гц и мерцания вообще не видно. ![]() Рис.8. Схема вывода даты-времени на 4-разрядный LED-индикатор IC1,IC3 - регистры сдвига 74HC595, индикаторы- от старых AT-корпусов компьютеров. На регистр IC1 выводится код цифры, на IC3- позиция включаемого знака. Рис.9. Окно программы VB_clock и макетная плата При нажатии кнопкок "Время" и "Дата" выводится соответственно системное время и дата. VBclock.rar - ехе-файл программы VBclock. |
Автор: | Володя Шишкин [ Пн апр 18, 2011 15:47:27 ] |
Заголовок сообщения: | Re: Управление через СОМ порт компьютера внешними устройст |
4. Вывод бегущей строки На следующем примере показана возможность вывода символов на светодиодную матрицу 7х7 программой RunString. Входные цепи идентичны предыдущей схеме. ![]() Рис10. Нажав кнопку «Символ», можно вывести одиночный символ, кнопка «Строка» выводит бегущую строку произвольной длины, которую вы можете ввести в окне ввода строки. Все буквы любого набранного вами текста будут переведены в верхний регистр. В окне программы RunString (рис.11) есть поле 7х7 мнемонических индикаторов, которые дублируют вывод на светодиодную матрицу. ![]() ![]() Ехе-файл программы RunString находится в архиве Exe.rar 5. Создание "мультфильма" Следующая программа Film выводит на светодиодную матрицу (схема осталась прежней, рис.10) запрограммированные вами анимированные картинки размером 7х7 элементов изображения.. Нажимая на кружки нарисуйте картинку- это будет кадром. Сохраните его, нажав на одну из кнопок «>» или «|>» (рис.12). Иногда картинку удобнее рисовать «с чистого листа», а иногда следующая картинка - лишь незначительное изменение предыдущей. Кнопка «>» сохраняет предыдущий кадр и переходит к чистому следующему (все светодиоды погашены), кнопка «|>» также сохраняет предыдущий кадр, но следующий кадр будет повторением предыдущего, который вы сможете изменять по своему желанию. Кнопка «<» возвращает предыдущий кадр. ![]() Рис.12. После того, как все кадры созданы, нажмите кнопку «Пуск» - все ваши кадры будут последовательно воспроизведены как в окне программы, так и на светодиодном поле. Причём фильм будет прокручиваться до кадра, отображённого в окне «№ кадра». В окне «Ткадра,мс» выберите время показа одного кадра, в миллисекундах. Максимальное число кадров ограничено программой до1000. Ехе-файл программы Film находится в архиве Exe.rar. Гирлин Андрей, г.Сургут, E-mail: giran@mail15.com |
Автор: | ploop [ Пн апр 18, 2011 15:49:45 ] |
Заголовок сообщения: | Re: Управление через СОМ порт компьютера внешними устройст |
Почему не оформите статьёй? |
Автор: | Володя Шишкин [ Пн апр 18, 2011 15:53:21 ] |
Заголовок сообщения: | Re: Управление через СОМ порт компьютера внешними устройст |
Конец цитаты _________________ Мои вопросы: 1.) Если администрация разрешит, то я выложу ссылки на исходники программ. 2.) Не работает схема для проверки, позднее опишу ход своих действий, надеюсь вы поможете мне. |
Автор: | Володя Шишкин [ Пн апр 18, 2011 15:54:59 ] |
Заголовок сообщения: | Re: Управление через СОМ порт компьютера внешними устройст |
ploop, как оформить статью? |
Автор: | ploop [ Пн апр 18, 2011 18:34:19 ] |
Заголовок сообщения: | Re: Управление через СОМ порт компьютера внешними устройст |
Я, конечно, не вникал (да и не мне судить), но судя по всему у вас материал интересный. Вот сюда: http://radiokot.ru/about/collaboration/ |
Автор: | Володя Шишкин [ Пн апр 18, 2011 19:13:25 ] |
Заголовок сообщения: | Re: Управление через СОМ порт компьютера внешними устройст |
ploop, так-как это придумал не я, я лишь процитировал статью, и если заархивировать текст и отправить его на мейл, то получится нехорошо, плагиат. Это же разные вещи, то я цитирую, и я несу всю ответственность за авторское право, а если поступить как описано там, куда ты выложил ссылку, то получится что за авторское право будет ещё отвечать Кот. Может быть лучше оставить просто на форуме? |
Автор: | ploop [ Пн апр 18, 2011 19:21:37 ] |
Заголовок сообщения: | Re: Управление через СОМ порт компьютера внешними устройст |
Ну так я не знал, что это не твой материал ![]() |
Автор: | Vovan95 [ Пт июл 08, 2011 03:04:11 ] |
Заголовок сообщения: | Re: Управление через СОМ порт компьютера внешними устройст |
вот у меня возник такой вопрос по пункту 2. Можно ли сделать так, что бы вместо светодиодов я наоборот подавал напряжение и это у меня высвечивалось как-то на программе или же это как то иначе осуществляется?! полная тема с исх. http://schemz.narod.ru/COMdevice.htm |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |