Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Связь компьютера с микроконтроллером



 

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

Рассмотрим вариант соединения микроконтроллера с компьютером через канал RS-232 в соответствии со стандартом. Для разработки используем микроконтроллеры Atmel, в которых предусмотрена аппаратная функция UART (Universal Asynchronous Receiver and Transmitter – универсальный асинхронный приемопередатчик).

Напомним, что канал RS-232 предназначен для обмена информацией между двумя устройствами как в синхронном, так и в асинхронном режиме.

В компьютере для организации COM-порта используется только асинхронный способ передачи и лишь часть сигналов и функций, предусмотренных стандартом RS-232C.

В микроконтроллерах AVR с UART аппаратно-программными средствами поддерживаются только две линии: линия приема (RxD) и линия передачи данных (TxD).

Для связи компьютера с микроконтроллером будем использовать только общий провод и две сигнальные линии. По одной из них данные передаются от микроконтроллера к компьютеру, по другой – в обратном направлении.

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

Будем считать, что передаваемая группа содержит стартовый бит, 8-битную информационную группу, бит четности и один стоповый бит.

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

Логическая единица передается по каналу RS-232 уровнем напряжения -3 … -12В относительно общего провода, логический нуль – уровнем напряжения +3 … +12В. Указанные уровни напряжений приведены ко входу приемника сигнала.

Уровни сигналов в диапазоне -3 … +3В попадают в зону нечувствительности и не воспринимаются приемником.

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

На линиях RxD и TxD микроконтроллера уровни сигналов соответствуют уровням TTL-логики, поэтому для подключения микроконтроллера к каналу RS-232 требуется преобразователь уровней.

Линия TxD микроконтроллера подключается к линии RxD компьютера через преобразователь уровня, а линия TxD компьютера – к линии RxD микроконтроллера также через преобразователь уровня.

Подобные преобразователи уровней в интегральном исполнении выпускаются многими компаниями, например Analog Devices, Maxim.

Обычно в наименовании преобразователей присутствуют числа 232, 202, 242. Чаще встречаются микросхемы с двумя или четырьмя преобразователями.

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

В компьютере для организации COM-порта используется либо 9-контактный (DB-9M), либо 25-контактный разъем (DB-25M), поэтому для изготовления кабеля надо подобрать подходящий к разъему COM-порта вашего компьютера разъем DB-9F или DB-25F.

Необходимо обратить внимание на частоту кварцевого резонатора ZQ1. Она равна 7,3728 МГц. Использование кварцевого резонатора с такой частотой позволяет точно устанавливать скорости передачи, рекомендованные стандартом RS-232.

 

 

Протокол обмена

 

Обычно программное обеспечение для компьютера и для микроконтроллера разрабатывают разные специалисты или группы специалистов.

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

В протоколе должны быть учтены все тонкости совместной работы программ, а его положения – быть четкими и не допускать возможности различного толкования. В то же время нет смысла перегружать протокол, например, переписывая из стандарта RS-232 требования к электрическим параметрам сигнала.

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

Общие положения

Обмен информацией выполняется асинхронными сериями в соответствии с требованиями интерфейса RS-232. Электрические характеристики сигнала также должны соответствовать требованиям интерфейса RS-232C.

Данные передаются сообщениями. Сообщения состоят из 5…134 байт и требуют передачи не чаще одного раза в секунду.

Каждый байт сообщения, состоящий из 8 информационных бит, передается в составе группы из 11 бит. Группа начинается стартовым битом, затем передаются 8 информационных бит, за ними следуют бит четности и стоп-бит.

Параметры передаваемых групп:

- скорость передачи 115200 бит/с;

- 8 информационных бит;

- проверка на нечетность;

- стоп-бит.

Структура сообщения

Сообщения имеют следующий вид: 5A CMD <байты данных> СSH CSL, где 5А – стартовый байт, CMD – байт команды, <байты данных> – их количество зависит от байта команды, CSH и CSL – 2 байта контрольной суммы.

Контрольная сумма получается суммированием всех байтов сообщения в сумматоре длиной в 2 байта. В зависимости от команды старший байт контрольной суммы CSH может не передаваться.

Передаваемые сообщения

В тексте сообщений неизменяемые байты записаны в шестнадцатеричном формате, изменяемые – как подчеркнутые трехсимвольные переменные:

1. Команда ТЕСТ RS-232: 5А 20 00 00 00 00 7А.

2. Ответ на команду ТЕСТ RS-232: 5A 20 CRH CRL CSL, где CRH и CRL – два байта контрольной суммы содержимого памяти программ контроллера, а CSL – младший байт контрольной суммы команды.

3. Команда ПЕРЕДАТЬ БЛОК 128 байт в контроллер: 5A 21 00 00 B00…BFF CSH CSL, где B00…BFF – 128 байт данных, передаваемых из компьютера, а CSH и CSL – два байта контрольной суммы команды.

4. Ответ на команду ПЕРЕДАТЬ БЛОК: 5A 21 00 00 7B.

5. Команда ЗАПРОС БЛОКА 128 байт из контроллера: 5A 22 00 00 00 00 7C.

6. Ответ на команду ЗАПРОС БЛОКА: 5A 22 00 00 B0…BFF CSH CSL, где B00…BFF – 128 байт данных, передаваемых из ОЗУ контроллера, а CSH и CSL – два байта контрольной суммы команды.

7. Команда ОЧИСТИТЬ ОЗУ: 5A 23 00 00 00 00 7D.

8. Ответ на команду ОЧИСТИТЬ ОЗУ: 5A 23 00 00 7D.

9. Команда ЗАПОЛНИТЬ ОЗУ: 5A 24 FIL 00 00 CSH CSL, где FIL – байт, которым заполняется ОЗУ.

10. Ответ на команду ОЧИСТИТЬ ОЗУ: 5A 24 00 00 7E.

11. Сообщение контроллера об ошибках: 5A 0C ERR 00 CSL, где ERR – код ошибки (E0 – ошибка четности, если первый байт команды не 5A, E1 – ошибка контрольной суммы команды, E2 – неизвестная команда), а CSL – младший байт контрольной суммы.

И микроконтроллер, и компьютер проверяют поступающие сообщения, в том числе и на их длину. Проще проверять длину сообщений, когда для одного источника она одинакова. В нашем устройстве команды компьютера имеют длину в 7 байт, а ответы микроконтроллера – 5 байт. Исключения составляют сообщения, содержащие блоки данных. Их длина составляет 134 байта.

Программа для микроконтроллера

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

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

Поэтому для избежания этой коллизии имеет смысл организовать программу для микроконтроллера следующим образом: после необходимой инициализации программа будет выполнять бесконечный цикл, ожидая прерывания после приема первого байта данных по каналу RS-232. Обработчик прерывания окончания приема символа UART запустит таймер Т0 и вызовет выполнение подпрограммы приема последовательности байтов. Завершение счета таймера Т0 прекратит выполнение подпрограммы приема и инициализирует выполнение ряда подпрограмм анализа принятой последовательности, распознавания команды, ее обработки и передачи ответа микроконтроллером по каналу RS-232.

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.