Среди кучи интерфейсов СОМ наилучшим образом подходит для коммуникации с
удалёнными устройствами автоматики. Например роботами. Причины опустим.
В компе обычно есть 1 или 2 СОМ порта, в ноутах бывает нет, но есть куча разных
переходников, самый распространённый USB-COM, так, что если USB есть, то
это значит, что СОМ есть! В разъёмах 9 ножек (25 уже не существует :) ). Нам
надо всего 3. В следущий раз об остальных ногах, они не очень важны.
Нас интересует нога 5, 2 и 3. 5 - это земля.
2 - это вход последовательных данных.
3 - выход данных.
Напряжения в СОМ порте имеют значения от +12 до -12 :)
Что от +3 до +12 - это логическая единица.
От -12 до -3 - логический ноль.
Если ваш микроконтроллер работает от 5 вольт, то в принципе можно
пренебречь на этом этапе преобразователем уровней. Это который из
+-12 делает 0 или +5 и наоборот! Но для начала можете присоединить
микроконтроллер напрямую через сопротивления 5-10к.
Подключаем прямо в комп два провода, к 5-му и 3-му. Далее 5-ый к
общему проводу вашей схемы с контроллером. 3-й, через сопротивление
10к к любому I/O входу контроллера если вы используйте контроллер
без встроенного RS232 модуля, и к ноге RX контроллера, если этот
модуль есть :) (прим. 16F84a не имеет, а 16F877a имеет RS232 модуль)
Обвесте микроконтроллер всем, чем надо (минимум питание, кварц и
сопротивление от ПЛЮСА к MCLR) и коммуникация настроена!
Теперь надо написать две программы. Для компа и контроллера.
Для микроконтроллера:
INCLUDE "bs2defs.bas" b3 VAR byte loop: SERIN porta.4, N9600, ["A"], b3
IF b3 = "X" THEN porta.0 = 0 IF b3 = "W" THEN porta.0 = 1
GOTO loop
По программе, подключаем 3-ий от компа провод к 4 ноге порта А. В pic
16F84a это нога номер 3. Смотрите мануал. N9600 означает, что мы хотим
принимать данные на скорости 9600кбит в секунду. Для начала вполне
приличная скорость :) Далее А означает, что контроллер сначала ждёт
букву А от компа, как бы ключ, разрешающий принимание одного
следующего символа и сразу за ней ждёт этот один символ, числовое
значение которого он даст переменной b3. И сразу контроллер начнёт
проверять, что делать с этой переменной. Если это была буква X, тогда
напряжение на ноге 0 порта А становится 0 вольт, относительно земли
контроллера. (читай: становится минусом). Если буква была W, то эта
же нога станет плюсом. (логическая единица - напряжение не ноге равно
напряжению питания контроллера). Далее на эту ногу можно подключить
светодиод - для визуального представления что на ней происходит. Если
контроллер с железным блоком RS232 то прога выглядит так:
INCLUDE "bs2defs.bas" DEFINE OSC 4 ' квац на 4мГц DEFINE HSER_RCSTA 90h ' включаем RS232 приёмник DEFINE HSER_BAUD 9600
b3 VAR byte loop:
HSERIN [wait ("A"),b3] ' ждём А и следующую букву кладём в b3
IF b3 = "X" THEN porta.0 = 0 IF b3 = "W" THEN porta.0 = 1
GOTO loop
От компа провод в данном случае подключается к RX контроллера.
(прим. N26 в 16F877a)
Теперь о проге для компа.
В Visual Basic-е добавляем на форму COMM Control и пару кнопок, Command1
и Command2. Теперь в код.
Private Sub Form_Load() MSComm1.Settings = "9600,N,8,1"
MSComm1.CommPort = 1
MSComm1.PortOpen = True ' открываем порт!
End Sub
Private Sub Command1_Click()
MSComm1.Output = "A"
MSComm1.Output = "X"
End Sub
Private Sub Command2_Click()
MSComm1.Output = "A"
MSComm1.Output = "W"
End Sub
Запускаем. Две кнопки. Нажатием одной шлём A и X, другой A и W. Далее вы
видели уже что контроллер с этими буквами делает (А - ключ :) ).
Программа подразумевает, что тот разъём, куда вы подключили микроконтроллер
называется COM с номером 1. Скорость в 9600 можно изменить, не забыв сделать
то же и в контроллере!
Связь налажена! Далее эксперементируйте!
|