Воскресенье, 22.07.2018
Интеллектуальные системы управления
Меню сайта
Категории раздела
Эксперименты [3]
Программирование микроконтроллеров PIC [7]
Программирование микроконтроллеров STM32 [0]
Программирование микроконтроллеров STM8 [0]
Программирование микроконтроллеров AVR [0]
Программирование микроконтроллеров MSP430 [0]
Программирование ПЛИС ALTERA [0]
Облако тегов
Главная » Статьи » Программирование микроконтроллеров » Программирование микроконтроллеров PIC

Соединяем микроконтроллер с компьютером посредством интерфейса RS232

Мигание светодиодами это конечно здорово, но хочется двигаться дальше узнавая что-то новое. Сегодня мы будем подключать наш микроконтроллер к компьютеру и пробовать управлять нашим устройством. Делается это в основном помощью интерфейса передачи данных RS232.

Предыстория

RS232 был разработан сравнительно давно и предназначается для связи двух устройств между собой, одно из которых является терминалом, а другое коммуникационным устройством. В роли этих двух устройств могут выступать микроконтроллеры, компьютеры, модули, микросхемы памяти и т.д. и т.п. Но все же чаще всего в роли терминала выступает персональный компьютер. Устройства в RS232 соединяются друг с другом посредством кабеля с двумя видами разъемов типа D-sub: 9-ти или 25-ти контактный. В начале использовался только 25-ти контактный разьем, но из-за того что многие устройства не использовали половину контактов стандарт изменили и стало возможным применение 9-ти контактного разьема DE9.

Наименование контактов интерфейсного разьема DE9 (COM)

 Наименование Направление Описание Контакт

 DCD

 Вход

 Определение несущей (Carrie Detect)

 1
 RXD Вход Принимаемые данные (Receive Data)  2
 TXD Выход Передаваемые данные (Transmit Data)  3
 DTR Выход Готовность терминала (Data Terminal Ready)  4
 GND

 -

 Земля, общий провод (System Ground)  5
 DSR Вход Готовность данных (Data Set Ready) 6
 RTS Выход Запрос на отправку (Reqest To Send)  7
 CTS Вход Готовность приема (Clear To Send) 8
 RI Вход Индикатор (Ring Indicator) 9

Для подключения внешних устройств вроде микроконтроллера используют трехпроводную связь RXD, TXD и GND. Для расширения функциональности иногда задействуют дополнительные линий RTS и CTS. Можно конечно заморочится и задействовать все контакты, но это является лишним и на практике такое подключение чаще всего используется при подключении модема к компьютеру.

Сейчас, в связи с активным продвижением интерфейса USB, RS232 отходит на второй план, только некоторые материнские платы продолжают комплектоваться COM-разьемом. Если на вашем компьютере сзади нет такого вот выхода:

то помимо модемного кабеля вам нужно будет купить переходник USB -> COM.

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

Итак приступим...

Создаем в MPLAB пустой проект как это мы делали в предыдущих статьях. Открываем даташит на главе Универсальный синхронно-асинхронный приемо передатчик (USART) и пытаемся понять что там написано.

Как вы уже знаете место между "void main(void)" и "while(1)" это область начальной настройки микроконтроллера, сюда мы и вписываем все необходимые значения регистров управления. В первую очередь настроим выводы порта C так как именно он участвует в работе модуля USART.

Code
TRISC=0b11000000;
PORTC=0b00000000;

Насчет обнуления я уже говорил так что поднимать эту тему еще раз не имеет смысла, а вот значение первой строки я взял из текста в даташите. Если вы внимательно читали его, то увидели: "для корректной работы модуля USART необходимо выводы <7> и <6> порта С перевести в режим входа подав на соответсвующие биты логическую "1". Если этого не сделать то можно часами просиживать возле компьютера в поиске ответа - "почему же схема собранная как по написанному все равно не работает?".

Далее настраиваем регистры управления модуля USART.

Code
TXSTA=0b00000000;
    TXEN=1;
    BRGH=1;
RCSTA=0b00000000;
    SPEN=1;
    CREN=1;
SPBRG=255;

Первая строка обнуляет регистр приемника TXSTA, это необходимо для того чтобы при включении или сбросе микроконтроллера ненужные нам функции модуля USART не включились бы сами собой. Плюс сам код получается более эстетичным и главное стабильно работающим. При настройке контроллера, когда основная программа еще не заработала, сделать несколько лишних действий ничего не стоит, зато в единицу будут выставлены именно те биты, которые необходимы.

И наконец к написанным ранее строкам настройки прерываний добавляем команду включения прерывания от модуля USART.

Code
     RCIE=1;

а в обработчик прерываний следующий блок:

Code
     if(RCIF)
     {
           // Тут будет ваш код
           RCIF=0;
     }

Все данные, которые приходят на микроконтроллер, записываются в регистр RCREG. Регистр 8-ми битный, в нем помещается только один символ, поэтому новые символы, пришедшие в микроконтроллер затирают уже принятые. Так что оперировать регистром RCREG как переменной нет смысла, компилятор ошибок не покажет, а вот логика работы программы будет хромать и принимать мы будем совсем не то что должны. Лучше всего в обработчике прерывания содержимое приемника переприсвоить в любую другую переменную и уже с ней работать, ожидая новой посылки. В основном информационный обмен между устройствами не ограничивается только одним байтом (символом), поэтому разработчики идут на разного рода ухищрения - придумывают протоколы обмена, вводят символы конца и начала сообщения (блока) и т.д. На первое время мы ограничимся приемом только одного символа:

Code
     Buffer=RCREG;

где Buffer это наша переменная содержащая очередной принятый байт (символ). Кстати, не забудьте ее объявить в начале программы:

Code
     char Buffer=0;

Теперь загружаем PROTEUS и смотрим как все работает. Для схемы вам понадобятся:

  1. PIC16F877A (Category - Microprocessor ICS, Sub-category - PIC16 Family);
  2. Button (Category - Switches & Relays, Sub-category - Switches);
  3. Resistor 10k (Category - Resistors, Sub-category - 0.6W Metal Film (хотя на самом деле пофиг каким он будет));
  4. Capacitor 22p (Category - Capacitors, Sub-category - Ceramic Disc);
  5. Cristal 20MHz (Category - Miscellaneous, Sub-category - All) Частоту кварца, как вы помните, надо настраивать в свойствах самого кварца;
  6. Virtual Terminal;
  7. Terminal Mode - Power;
  8. Terminal Mode - Ground.

В конечном счете должно получиться следующее:

После запуска симуляции в открывшемся окне терминала можно набирать любую информацию и она будет отправляться в наш микроконтроллер. Чтобы все было более наглядно можно в качестве дополнения вставить в схему светодиоды и принятое с терминала значение сразу отправлять в порт:

Code
     PORTB=RCREG;

либо каким то образом его обрабатывать и пересылать обратно на терминал:

Code
     TXREG=RCREG+2;

Моя цель просто показать что и куда записывать, как включать и т.д. написание сложных процедур и замысловатых функций оставляю вашей музе и фантазии. Во всяком случае пока...

Категория: Программирование микроконтроллеров PIC | Добавил: Anubis (22.01.2012)
Просмотров: 5517 | Комментарии: 1 | Теги: интерфейс, COM-порт | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Copyright MyCorp © 2018