Разработка автономного аппаратно-программного комплекса средств для подсистемы управления 'Роботом-дозиметристом'

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,66 Мб
  • Опубликовано:
    2012-11-20
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка автономного аппаратно-программного комплекса средств для подсистемы управления 'Роботом-дозиметристом'

Аннотация

«Робот-дозиметрист» представляет собой довольно сложную вычислительную систему, состоящую из нескольких узлов. При выходе из строя какого-нибудь из его узлов весь робот может выйти из строя, особенно если этим узлом станет бортовой ПК, который отвечает за все внутренние процессы робота. Основной проблемой данной реализации робота является малая дистанция передачи данных. Для обеспечения дополнительной безопасности системы и увеличения дальности передачи данных, было принято решение, разработать автономный аппаратно-программный комплекс средств для подсистемы управления “Роботом - дозиметристом”.

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

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

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

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

Оглавление

ВВЕДЕНИЕ

.        ОБЗОРНАЯ ЧАСТЬ

.1       Робот-дозиметрист (проект НИЯУ МИФИ): назначение, краткая характеристика, перспективы внедрения.

.2       Робот-дозиметрист (проект НИЯУ МИФИ): архитектурная концепция, основные составные узлы.

.2.1    Контроллер управления двигателями

.2.2    Аккумуляторы для питания блока управления

.2.3    Бортовой ПК

.3       Обзор общей функциональной схемы “Робота - дозиметриста”.

.        НАХОЖДЕНИЕ ОПТИМАЛЬНОГО СПОСОБА ДОПОЛНИТЕЛЬНОГО КОНТРОЛЯ РОБОТА

.1       Обзор способов беспроводной передачи данных на большие расстояния.

.2       Основные требования к контроллерам.

.        РАЗРАБОТКА АППАРАРАТНОЙ ЧАСТИ КОНТРОЛЛЕРА ОПЕРАТОРА И БОРТОВОГО КОНТРОЛЛЕРА.

.1       Проектирование принципиальной схемы контроллера оператора.

.2       Проектирование принципиальной схемы бортового контроллера.

.3       Трассировка печатных плат.

.        РАЗРАБОТКА ПРОГРАМНОЙ ЧАСТИ КОНТРОЛЛЕРОВ.

.1       Алгоритм взаимодействия контроллеров.

.1.1    Формат пакетов.

.1.2    Протокол обмена данными.

.1.3    Возможные ситуации при передаче данных по протоколу.

.1.4    Блок-схемы основных функций протокола.

.2       Общий алгоритм программы.

.        ТЕСТИРОВАНИЕ И ОТЛАДКА СПРОЕКТИРОВАННЫХ УСТРОЙСТВ.

.1       Тестирование печатных плат

.2       Отладка программной части контроллеров

СПИСОК ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЕ 1. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ.

ВВЕДЕНИЕ

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

Для описания эволюции роботов можно воспользоваться теорией профессора Университета Карнеги-Меллона (Пенсильвания, США) Ханса Моравеца, согласно которой созданные человеком роботы должны пройти 4 этапа эволюции. Условное первое поколение он уподобил по своему интеллектуальному потенциалу ящерице, ко второму отнёс роботов с возможностью накопления знаний (обучения) и уподобил их мышам (по его же прогнозу, такие роботы появятся к 2020 году). Третье поколение роботов должно иметь интеллект сопоставимый с обезьяной. И, наконец, четвёртое поколение он уподобил человеку, однако, появление таких роботов профессор предсказал никак не ранее второй половины 21 века.

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

Настоящая работа посвящена проектированию одной из составных частей колёсной передвижной платформы «Робота-дозиметриста» - а именно, подсистеме управления.

Для успешного выполнения задачи необходимо:

-    провести анализ проектных решений для устранений возможных неисправностей в разрабатываемом роботе;

-    проанализировать способы дистанционной передачи данных;

-    спроектировать функциональную схему бортового вычислительного блока Робота-дозиметриста;

-    провести анализ микроконтроллеров для разработки системы;

-    спроектировать функциональную и принципиальные схемы плат подсистемы управления Роботом-дозиметристом и произвести трассировку в системе автоматизированного проектирования P-cad;

-    закупить комплектующие и изготовить спроектированные платы;

-    провести монтаж и отладку изготовленных плат;

-    написать управляющую программу для взаимодействия контроллеров;

-    протестировать спроектированные платы;

-    протестировать управляющую программу;

-    составить руководство пользователя.

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

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

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

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

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

.       
ОБЗОРНАЯ ЧАСТЬ

1.1     Робот-дозиметрист (проект НИЯУ МИФИ): назначение, краткая характеристика, перспективы внедрения

Универсальная робототехническая платформа «Робот - дозиметрист» - разрабатываемое в рамках научных программ НИЯУ МИФИ многофункциональное устройство, основное предназначение которого - удалённый сбор данных и получение максимально-подробных сведений об окружающей среде, в том числе, в условиях, непригодных для работы человека. В соответствии со своим назначением, проектируемое устройство должно обладать следующими характеристиками:

-    повышенной прочностью конструкции и надёжности аппаратуры, в том числе, радиационной стойкостью всех устройств робота не менее 10000 рентген/час при гамма-излучении

-    возможностью максимально-удалённой от оператора работы, либо полностью автономной работы

-    мобильностью (возможность передвигаться со скоростью не менее 15 км\ч, размеры не более чем 500х500х500 мм)

-    временем работы без подзарядки в любых условиях не менее часа

-    возможностью автономной ориентации на местности (самостоятельный объезд препятствий, сбор сведений о местоположении встречаемых предметов относительно друг друга для дальнейшей передачи оператору)

-    наличием датчиков, достаточных для полного анализа радиоактивной обстановки

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

-    экономической привлекательностью относительно зарубежных робототехнических платформ

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

1.2     Робот-дозиметрист (проект НИЯУ МИФИ): архитектурная концепция, основные составные узлы

Разрабатываемый робот представляет собой четырёхколёсную тележку с 2 ведущими колёсами. Такая компоновка позволяет обеспечить оптимальные ходовые характеристики при необходимом уровне проходимости. В качестве мотор-колёс используются колёса HUB24E производства компании GoldenMotor(рис 1.1).

Рис. 1.1. Мотор-колесо HUB24E

Технические характеристики мотор-колёс приведены ниже:

-    номинальное напряжение питания: 12/24/36 В;

-    максимальная мощность:100-300 Вт;

-    вес: 4.8 кг.

Структурная схема связи элементов робота, размещённых на тележке, представлена на рис 1.2. Так же на схеме показана модель связи с удалённым оператором.

Концепция проектируемого робота предлагает разбиение его составных частей на 3 узла: блок сбора данных, систему видеонаблюдения и блок управления. В центре этой системы находится бортовой ПК, связанный с каждым из 3 узлов по USB-интерфейсу. Кроме этого, по штатному Wi-Fi каналу бортовой ПК связан с клиентской системой (постом оператора).

В целом, блок управления отвечает за механическое передвижение робота. Он состоит из контроллера управления двигателями, самих двигателей. Он связан с бортовым ПК через проводник USB-COM.

Система видеонаблюдения состоит из 2 видеокамер и контроллера видеоизображения.

Блок сбора данных состоит из платы управления датчиками, отвечающей за сбор данных с самих датчиков и передачу её на бортовой ПК. Блок сбора данных имеет автономную систему питания.

Рис. 1.2. Cтруктурная схема «Робота-дозиметриста»

1.2.1  Контроллер управления двигателями

Для управления двигателями выбран двухканальный контроллер ax3500 американской фирмы RoboteQ (рис. 1.3), предназначенный для преобразования команд, полученных от беспроводного модема, аналогового джойстика или другого микроконтроллера в ток высокого напряжения для управления одним или двумя двигателями постоянного тока. Два канала контроллера могут работать независимо или в паре для задания направления движения либо вращения движимого объекта путём координации движения с 2 сторон объекта.

Рис. 1.3. Двухканальный контроллер управления двигателями RoboteQ ax3500

Технические характеристики контроллера:

-    рабочее напряжение: от 12 до 40 В постоянного тока;

-    количество каналов: 2;

-    ток: 40А постоянный, 60A Max;

-    ограничение по току: по автоматическому снижению выходной мощности в зависимости от нагрузки и прошедшего времени;

-    защита по температуре: автоматически, начиная от 80 С;

-    защита по напряжению: отключение при значении ниже 12 и выше 43В:

-    коррекция на входах: программируемая;

-    операционная температура: От -40 до +85 ° С (температура радиатора);

-    способ охлаждения: радиатор;

-    размеры: 106 х 172 х 30 мм;

-    вес 212 грамм;

-    возможность использования:

двух R / C входов;

последовательного интерфейса RS232;

двух входов аналогового интерфейса;

разъёмов для двух дополнительных оптических энкодеров (максимум 125 кГц);

8 выходов R / C сервоприводов;

двух входов цифрового интерфейса, одного выхода (максимально

В, 2 А);

контроля скорости при движении вперёд или назад;

тахометра на аналоговых входах;

потенциометра на аналоговых выходах.

1.2.2  Аккумуляторы для питания блока управления

В качестве аккумулятора для питания мотор-колёс используются герметизированные, свинцово-кислотные аккумуляторные батареи CSB HR 12120W, высокоэффективные и обладающие большой энергоемкостью.

Имея небольшие массогабаритные показатели, батареи обеспечивают работу более 260 циклов заряда-разряда до 100% степени разряда в циклическом режиме или 3-5 лет эксплуатации в буферном режиме. Основное достоинство данных батарей - это специальная конструкция решетки, позволяющая повысить выходную мощность на 20%. Они наиболее приспособлены к использованию в высокомощном оборудовании и источниках бесперебойного питания. Батареи герметизированы, не нуждаются в обслуживании и в доливке водой, могут работать как в буферном, так и в циклическом режимах. Они могут эксплуатироваться в любом положении, имеют очень низкий уровень саморазряда и низкое сопротивление.

Характеристики:

-    страна производства: Тайвань;

-    выполнены по AGM-технологии;

-    напряжение: 12 В;

-    ёмкость: 30 Ач;

-    длина 166 мм;

-    ширина 125 мм;

-    высота 166.5 мм;

-    высота с клеммой: 175 мм;

-    вес 10.7 кг;

-    срок службы 5 лет;

-    количество элементов в блоке: 6;

-    максимальный ток разряда 400 (5 сек);

-    внутреннее сопротивление 9 мОм;

-    диапазон рабочих температур:

разряд: -20°С ~50°С

заряд : 0°С ~40°С

хранение : -20°С ~40°С

-    оптимальная рабочая температура: 25°С;

-    напряжение подзаряда: 13,5 до 13,8 В при 25°С;

-    максимальный ток заряда: 12 А;

-    напряжение заряда при циклическом режиме: 14,4 до 15,0 В при 25°С

-    саморазряд: батареи CSB могут храниться 6 месяцев без подзарядки при 25°С. При более высокой температуре - время хранения уменьшается;

-    материал корпуса: ABS (акрило-бутадиен-стирол).

1.2.3  Бортовой ПК

Основным бортовым вычислительным узлом проектируемого робота-дозиметриста является нетбук Acer Aspire One. С помощью 3USB-портов нетбук связан с контроллером управления двигателями, платой управления датчиками, а так же с бортовыми органами зрения (веб-камерами). Через штатную систему беспроводной связи нетбука (Wi-fi) осуществляется связь робота с оператором. Формируемая посылка от робота к оператору содержит информацию о состоянии окружающей среды с платы управления датчиками и с веб-камер. В обратную сторону, оператор может выдавать задания роботу по автономному исследованию определённой местности, либо управлять роботом вручную в режиме реального времени.

1.3    
Обзор общей функциональной схемы “Робота - дозиметриста”

Универсальная робототехническая платформа «Робот - дозиметрист» - разрабатываемая в рамках научных программ НИЯУ МИФИ многофункциональное устройство, основное предназначение которого - сбор данных и получение максимально-подробных сведений об окружающей среде в условиях, непригодных для работы человека.

«Робот - дозиметрист» состоит из нескольких основных узлов: блока сбора данных, системы видеонаблюдения и блок управления. В центре этой системы находится бортовой ПК, связанный с каждым из 3 узлов по USB-интерфейсу. Кроме этого, по штатному Wi-Fi каналу бортовой ПК связан с клиентской системой (постом оператора). В связи с этим, при постоянном использовании робота может возникнуть ряд проблем, которые смогут помешать выполнению поставленной задачи. Ниже, более подробно, рассматриваются эти проблемы.

Основными программно-аппаратными проблемами являются:

·        Потеря сигнала Wi-Fi;

·        Выход из строя контроллера управления датчиками;

·        Выход из строя контроллера управления двигателями;

·        Выход из строя бортового ПК.

По штатному Wi-Fi каналу бортовой ПК связан с клиентской системой (постом оператора). По этому, потеря Wi-Fi сигнала приведёт к невозможности управлять роботом и следить за показанием датчиков. Это одна из самых серьёзных и часто встречающихся проблем. Она может возникать в различных ситуациях. Wi-Fi сети поддерживают роуминг, поэтому клиентская станция может перемещаться в пространстве, переходя от одной точки доступа к другой.

Имеет большое значение расположение "точки доступа" или беспроводного свитча/роутера и всех кто будет подключен через эту "беспроводную сеть" (клиентские машинки). Передача данных идет (в основном) по прямой, по кратчайшему расстоянию. Имеет значение количество и материал преград на пути сигнала (стены, окна-двери, мебель и т.п.). Наилучший вариант - когда все в одном "ангаре" без преград, наихудший вариант - когда много преград из железобетона, железа. Может быть проблемой и одна стенка, если она расположена почти параллельно пути сигнала, но сигналу нужно через нее пройти.

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

Плата управления датчиками представляет собой контроллер, имеющий свой собственный источник питания, отличный от основного (двух аккумуляторов CSBHR 12120W). К этому контроллеру подключены оптические датчики, ультразвуковые датчики, акселерометры и прочие. Контроллер опрашивает датчики, обрабатывает данные, пришедши с них, и отсылает их на бортовой ПК. После чего, компьютер, обрабатывает данные, пришедшие с датчиков и команды управления, пришедшие по Wi-Fi от оператора, и принимает решение, выполнять эти команды или нет. Эти “Инстинкты”, должны служить гарантом безопасности во время движения робота.

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

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

Этот узел является основным для управления роботом, так как он напрямую управляет двигателями, преобразуя команды, пришедшие с бортового ПК в постоянный ток. При выходе из строя данного контроллера, наступает ситуация когда невозможно контролировать движение робота. В лучшем случае робот остановится и не сможет сдвинуться с места. В худшем, контроллер начнёт подавать на двигатели максимальный ток, а они в свою очередь будут выдавать максимальную мощность. “Инстинкты” описанные высшее не смогут защитить робота от столкновения или ограничить его скорость, так их расчёт происходит в бортовом ПК. Контроллер можно перепрограммировать, в зависимости от поставленной задачи. Так что, неисправности данного рода могут возникнуть по большей части из-за программных ошибок. Несмотря на большой ток, аппаратные поломки мало вероятны, так как двигатели управляются высокоэффективными управляемыми транзисторами Power MOSFET с помощью широтно-импульсной модуляции (ШИМ) при 16кГц.AX3500 может работать от 12 до 40 В постоянного тока и может выдержать до 60A, обеспечивая мощность до 2400 Вт полезной мощности каждого двигателя.

Основным бортовым вычислительным узлом проектируемого робота-дозиметриста является нетбук Acer Aspire One. Как было написано выше, он обеспечивает связь оператора с роботом через Wi-Fi канал. Так же он отправляет оператору данные собранные с датчиков и видео изображение, полученное от двух видеокамер установленных на нём. Нетбук является центральным узлом системы и контролирует каждый узел в отдельности и любая проблема программного или аппаратного характера приведёт к сбою работы робота. С точки зрения безопасности, самым уязвимым местом является Wi-Fi канал, так как он ограничен по дистанции. Потеря связи оператора с роботом приведёт к неспособности управлять роботом и получать с него необходимые данные.

.       
НАХОЖДЕНИЕ ОПТИМАЛЬНОГО СПОСОБА ДОПОЛНИТЕЛЬНОГО КОНТРОЛЯ РОБОТА

2.1     Обзор способов беспроводной передачи данных на большие расстояния

Основной проблемой данной реализации робота является малая дистанция передачи данных. Она связана с использованием стандартного Wi-Fi канала расположенного на ПК робота. Дальность передачи данных такого канала, на открытой местности, около 50 метров. В помещение она гораздо ниже.

Для передачи на большие расстояния, нужно или увеличивать мощность передатчика или применять наружную антенну и увеличивать чувствительности по приему.Fi имеет многоголосную структуру, что позволяет ему работать в режиме параллельной приёма-передачи данных. Для этого Wi-Fi использует 13 каналов для передачи данных. Каналы в данном случае представляют собой частотный диапазон. Благодаря этому и работе на частоте 2.4ГГц достигается большая скорость обмена данными. Но именно из за этого Wi-Fi имеет малую дальность работы.

При проектировке любых радиопередатчиков основной характеристикой является максимальная дистанция передачи данных. Она достигается двумя вещами. Во-первых, необходимо компенсировать реактивную составляющую сопротивления (импеданс) выхода передатчика и реактивное сопротивление антенны. Второй основной характеристикой является коэффициент усиления антенны [3].

Для согласования импеданса, в радиотехнике обычно используется определённое расположение активных элементов в цепи (колебательный контур) между передатчиком и антенной. При правильном расположении этих элементов в цепи достигается резонанс частот. Этот резонанс внутренней частоты колебательного контура и частоты передаваемого сигнала значительно увеличивает амплитуду передаваемого сигнала (рис. 2.1). При достижении резонанса, импеданс последовательно соединённых индуктивности и ёмкости минимален, а при параллельном включении - максимален. Частота, на которой происходит резонанс, определяется величинами (номиналами) используемых элементов, т.е. для каждой конкретной частоты передачи данных необходим свой колебательный контур с определёнными номиналами.

Рис. 2.1. АЧХ при резонансе частот на частоте 2.4ГГц.

Рис. 2.2. Пример конфигурации элементов колебательного контура для радио модуля CC1100 работающего на частоте 433МГц.

Резонансная частота у Wi-Fi 2.4ГГц, но Wi-Fi использует параллельную передачу данных, что подразумевает под собой использование определённого частотного диапазона. Эти частоты относительно близки к частоте 2.4ГГц, но всё же не являются резонансными. Амплитуда сигнала передаваемого на этих частотах гораздо меньше, чем на резонансной частоте, поэтому сигналы на этих частотах рассеиваются гораздо сильнее, что накладывает определённые ограничения на дальность использования Wi-Fi сигнала.

Коэффициент усиления антенны определяет, насколько децибел плотность потока энергии, излучаемого антенной в определенном направлении, больше плотности потока энергии, который был бы зафиксирован в случае использования идеального точечного источника электромагнитных волн, излучающего равномерно по всем направлениям (изотропный излучатель). Зная коэффициент усиления антенны и мощность передатчика, нетрудно рассчитать мощность сигнала в направлении главного лепестка диаграммы направленности. Так, при использовании беспроводной точкой доступа с мощностью передатчика 20 dBm (100 мВт) и направленной антенны с коэффициентом усиления 10 dBi мощность сигнала в направлении максимального усиления составит 20 dBm + 10 dBi = 30 dBm (1000 мВт), то есть в 10 раз больше, чем в случае применения изотропной антенны. Тем самым можно утверждать, что при проектировании радиопередатчика основная роль отводится антенне.

Одним из вариантов увеличения дистанции передачи данных является усиление Wi-Fi сигнала. Так как усилить электрические характеристики Wi-Fi модуля, с целью увеличения выходной мощности сигнала не представляется возможным, то единственным вариантом усиления Wi-Fi сигнала является увеличение коэффициента усиления антенны

В плане использования все антенны для Wi-Fi-устройств можно условно разделить на два больших класса: антенны для наружного (outdoor) и для внутреннего применения (indoor). Отличаются эти антенны, прежде всего своими габаритами и коэффициентом усиления. Естественно, антенны для наружного использования больше по размерам и предусматривают форму крепления либо к стене дома, либо к вертикальному столбу. Высокий коэффициент усиления в таких антеннах достигается за счет малой ширины диаграммы направленности (главного лепестка). Внешние антенны применяются, как правило, для связи двух беспроводных сетей, находящихся на большом расстоянии друг от друга. Две такие антенны устанавливаются в зоне прямой видимости, и в данном случае важно, чтобы каждая из них находилась в зоне главного лепестка диаграммы направленности другой антенны.

Антенны для внутреннего использования меньше по размерам и обладают более низким коэффициентом усиления. Такие антенны либо устанавливаются на столе, либо крепятся к стене или непосредственно к точке доступа.

К самой точке доступа, антенны, могут подсоединяться либо напрямую, либо с помощью кабеля. При этом, для подсоединения антенны или кабеля к точке доступа предусмотрен специальный миниатюрный SMA-разъем.

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

Стоит отметить, что стоимость всех антенн для внутреннего использования явно завышена - средняя цена на рынке около 3500р.

Антенны для внешнего использования не применима в нашем случае из-за своих габаритов.

Ещё одним вариантом для передачи данных является использование радиоканала построенного на основе радио модуля реализованного в виде микросхемы.

Чуть ранее, была рассмотрена работа Wi-Fi канала. Из неё можно сделать вывод, что для передачи сигнала лучше использовать одну частоту чем диапазон частот. Из-за этого радио модуль медленнее передаёт информацию, но в то же время на большие дистанции. Современные радио модули могут передавать сигнал до 2 км на открытом пространстве при допустимых мощностных характеристиках, не требующих лицензирования данного устройства. Такие возможности достигаются только при правильном выборе антенны с колебательным контуром, которые подключаются к радио модулю.

Современные радио модули предоставляют пользователю большой выбор радиочастот, в которых они могут работать. Они могут работать, как в режиме передачи данных, так и в режиме приёма. Стандартный радио модуль подключается с одной стороны к антенне, а с другой, либо к модулю последовательной приёмопередатчи данных (UART), либо к последовательному периферийному интерфейсу (SPI). Эти интерфейсы широко распространены в современных микроконтроллерах, так что использование радио модулей не представляет особого труда.

На основе всего вышесказанного было принято решение реализовать два устройства для дополнительного контроля робота. Эти устройства представляют собой два контроллера: контроллер оператора и бортовой контроллер. Контроллер оператора, должен будет предоставлять пользователю информацию о текущем состоянии робота и возможность для управления роботом. Бортовой контроллер должен будет отслеживать текущее состояние робота. Он должен быть установлен на роботе между ПК и контроллером управления двигателями. Такое расположение позволит управлять роботом при отключении основных узлов, таких как контроллер управления датчиками или бортовой ПК. Каждый контроллер должен иметь свой источник питания. Такой подход позволит сделать нашу систему энергонезависимой от уже имеющихся источников питания. Поскольку он будет подключён к своему источнику, разрядка любого аккумулятора данной системы не приведёт к выключению данного устройства. Обмен данными между этими контроллерами будет происходить по радиоканалу, так как в отличие от остальных возможных вариантов только он способен передавать сигнал на большие расстояния при низком энергопотреблении. Общая структурная схема «Робота-дозиметриста» приведена на рис. 2.3.

Рис. 2.3. Общая структурная схема «Робота-дозиметриста»

2.2     Основные требования к контроллерам

Контроллер оператора, (или пульт управления) должен представлять собой портативное устройство с помощью которого, пользователь, может в любой момент времени получить необходимые данные о состоянии робота и ”перехватить” управление роботом. Он должен удовлетворять следующим требованиям:

•        Наличие дисплея;

•        Набор клавиш;

•        Наличие радиоканала;

•        Собственный источник питания.

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

Основными требованиями к данному контроллеру являются:

•        Наличие USB-порта;

•        Наличие COM-порта;

•        Наличие радиоканала;

•        Собственный источник питания.

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

Функциональная схема подсистемы управления представлена на рис.2.4.

Рис. 2.4. Функциональная схема подсистемы управления

3.       РАЗРАБОТКА АППАРАРАТНОЙ ЧАСТИ КОНТРОЛЛЕРА ОПЕРАТОРА И БОРТОВОГО КОНТРОЛЛЕРА


Проектировка печатных плат, в данной работе, производилась с нуля. Проектировка производилась в редакторе печатных плат P-CAD 2006 [1]. Это многофункциональная, профессиональная программа для пошагового проектирования и разработки печатных плат любой сложности и проектирования аналоговых, цифрово - аналоговых и аналогово-цифровых устройств. Разработка печатных плат состояла из двух этапов:

-    разработка принципиальной схемы устройства;

-    размещение компонентов и трассировка платы.

3.1     Проектирование принципиальной схемы контроллера оператора

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

-    Передача сигнала по радио каналу;

-    Наличие интерфейса для пользователя;

-    Наличие автономного источника питания;

-    Компактность.

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

-    LCD дисплей, для вывода необходимой информации пользователю

-    Набор кнопок (возможно кнопочная клавиатура) для предоставления пользователю возможности ввода необходимой информации;

-    Радио модуль для обеспечения работы с радиоканалом;

-    Микроконтроллер, имеющий в своём наличии необходимый нам минимум, а именно: АЦП для обеспечения контроля энергопитания, порты ввода\вывода, последовательный интерфейс для взаимодействия с радио модулем и LCD модуль;

-    Источник питания.

На современном цифровом рынке есть большое количество различных компаний, таких как Atmel, Texas Instruments, Microchip, Fujitsu и т.д., которые производят, как и цифровые устройства, так и сами цифровые компоненты. Практически у всех этих компаний есть различные линейки микро контроллеров, которые всецело удовлетворяют нашим требованиям. Цены у этих микроконтроллеров тоже не слишком разнятся. Поэтому, вопрос выбора микроконтроллера всецело упирается в предпочтения разработчика, если конечно в задании чётко не указано на каком конкретном микроконтроллере производить разработку.

В связи с этим, мною был выбран микроконтроллер CC430F6137 компании Texas Instruments (рис 3.3). Его основные технические характеристики:

•        16-разрядный микроконтроллер пониженной мощности;

•        32КБ Flash-памяти;

•        4КБ RAM;

•        CC1101 радио модуль;

•        12 разрядный АЦП;

•        LCD модуль.

Как видно из данных характеристик микроконтроллера, он всецело удовлетворяет нашим требованиям, даже с избытком. Он потребляет очень мало электроэнергии за счёт возможности управления внутренней частотой его работы и так же в процессе работы его можно перевести в режим «сна». В этом режиме, ЦПУ микроконтроллера перестаёт выполнять исполнительный код программы, записанный в него, но не отключает контроллер прерываний. Можно сказать, что в данном случае ЦПУ микроконтроллера просто перестаёт работать, до момента, когда на него поступит какое-нибудь прерывание извне. Данная особенность микроконтроллера позволяет нам отказаться от использования миниатюрных аккумуляторов, которые должны были нам дать необходимые электрические мощности, и перейти на использование обычной пальчиковой батарейки. Для согласования электрических мощностей потребляемых системой и возможностей предоставляемой батарейкой был применён повышающий источник напряжения TPS61006, о котором будет написано чуть ниже.

Так же внутрь микроконтроллера был встроен уже готовый радио модуль СС1100.E является суб-ГГц приемопередатчиком высокой производительности, потребляющим очень мало мощности для работы. Он предназначен для устройств ближнего радиуса действия с частотными полосами 470-510 МГц в и 950-960 МГц.

Рис.3.1.Принципиальная схема колебательного контура для контроллера оператора

В CC1100 трансивер встроен настраиваемый модем для работы с частотным диапазоном. Модем поддерживает различные формы модуляции и имеет настраиваемые скорости передачи данных до 500 кбод. Колебательный контур для данного радио модуля подробно описан в сопровождающей документации на микроконтроллер CC430F6137.

Для отображения необходимой информации предоставляемой пользователю был выбран LCD дисплей TC20297A-00. Его основные технические характеристики:

•        Может отображать 8 цифр состоящих из 9и сегментов;

•        24 основных контакта и 3 управляющих;

•        рабочее напряжение 3.5.

Микроконтроллер CC430F6137 имеет модуль для работы с LCD дисплеями. В его состав входят 34обычных выхода и 4 выхода управления. Этот набор выходов позволяет использовать все необходимые сегменты выбранного дисплея.

Для предоставления пользователю возможности ввода необходимой информации рассматривался вариант использования кнопочной клавиатуры. Но самая маленькая такая клавиатура использует как минимум 9 контактов ввода\вывода микроконтроллера. Поэтому было принято решение использовать обычные кнопки, собрав их в виде матрицы [5]. Такой подход позволил подключить 6 кнопок, используя всего 5 контактов ввода\вывода микроконтроллера. Данную реализацию модуля ввода можно считать миниатюрной кнопочной клавиатурой.

В качестве основного источника питания было принято решение использовать обычную пальчиковую батарейку. Для согласования электрических мощностей потребляемых системой и возможностей предоставляемой батарейкой был применён повышающий источник напряжения [8] TPS61006 (рис 3.2). Данный преобразователь напряжения позволяет регулировать выходное напряжение от 1,5В до 3,3В максимум и обеспечивает минимальный выходной ток 100 мА, с одной батареей и 250 мА от двух гальванических элементов. Преобразователь запускается в полной нагрузке с напряжением питания 0,9В и остается в работе с напряжением питания 0,8 В.

Рис.3.2.Принципиальная схема повышающего источника напряжения для контроллера оператора

Все остальные элементы, включённые в схему, были добавлены в соответствии с технической документацией и являются элементами типовой схемы включения для основных компонентов, таких как CC430F6137, TPS61006, TC20297A-00.

3.2     Проектирование принципиальной схемы бортового контроллера

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

-    Передача сигнала по радио каналу;

-    Наличие необходимых интерфейсов для взаимодействия с узлами робота;

-    Наличие автономного источника питания;

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

-    USB интерфейс;

-    Интерфейс для COM - порта;

-    Радио модуль для обеспечения работы с радиоканалом;

-    Микроконтроллер, имеющий в своём наличии необходимый нам минимум, а именно: АЦП для обеспечения контроля энергопитания, порты ввода\вывода, два или более последовательных интерфейсов для взаимодействия с радио модулем и внешними последовательными интерфейсами (USB и COM);

-    Источник питания.

В качестве используемого микроконтроллера был выбран MSP430F147 (рис.3.10). Его основные характеристики:

•        16-разрядный микроконтроллер пониженной мощности;

•        32 КБ Flash-памяти;

•        1КБ RAM;

•        12 разрядный АЦП;

•        2 USARTs (универсальный асинхронный приёмопередатчик).

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

Данная система коммутации позволяет перехватывать все сообщения в обоих направлениях и аппаратно отключать/включать внешние интерфейсы. Так же, при выключенном микроконтроллере наша система сможет работать как обычный преобразователь типа USB - COM. Для реализации этой системы коммутации были использованы аналоговые ключи TS3A5017. Это двойной четырёх-канальный аналоговый мультиплексор, предназначенный для работы от 2,3 В до 3,6 В. Это устройство может работать как с цифровыми, так и аналоговыми сигналами, и сигналы до V + могут быть переданы в любом направление (рис.3.5).

В качестве радио модуля был выбран СС1100 (рис.3.6). Это было сделано, поскольку этот модуль уже используется у нас в контролере оператора. Такое решение позволит уменьшить затраты по согласованию настроек радиоканала. Колебательный контур для данного радио модуля подробно описан в сопровождающей документации на микроконтроллер CC1100.

В качестве контроллера USB [14] был выбран FT232RL (рис.3.5). Его основные характеристики:

•        одночиповый переходник из USB в асинхронный последовательный интерфейс передачи данных (UART);

•        протокол USB полностью реализован в микросхеме;

•        интерфейс UART поддерживает режимы передачи 7 и 8 бит данных, 1 и 2 стоповых бита, различные режимы контроля четности;

•        скорости передачи от 300 бод до 1 мегабод для RS-232;

В качестве преобразователя UART - COM [13] был выбран ADM232 (рис.3.5). Он представляет собой высокоскоростной преобразовательRS-232 и предоставляет скорость передачи данных до 200 Кб / с. Работая от одного +5В питания. Имеет в своём наличии два порта приёма/передачи RS-232.интерфейс имеет линию питания +5В, поэтому он может служить основным источником питания. Но поскольку для работы радио модуля CC1100 и микроконтроллера MSP430F147 нужно напряжение +3В то нам необходимо использовать преобразователь напряжения с +5В до +3В. В качестве такого преобразователя был выбран L78L00 (рис.3.7). Его основные характеристики:

•        Выходной ток до 100 мА;

•        Выходное напряжение3,3;

•        Тепловая защита от перегрузки.

Рис.3.7. Принципиальная схема понижающего источника напряжения для бортового контроллера

Поскольку не каждый USB разъём может предоставлять линию электропитания, то необходимо использовать ещё и свой внутренний источник питания. В качестве внутреннего источника питания было принято решение использовать обычную пальчиковую батарейку. Для согласования электрических мощностей потребляемых радио модуля CC1100 и микроконтроллером MSP430F147 и возможностей предоставляемой батарейкой был применён повышающий источник напряжения TPS61006 (рис.3.8). О этом преобразователе напряжения было рассказано в предыдущем параграфе.

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

Для согласования электрических мощностей потребляемых микросхемами FT232RL и ADM232 и возможностей предоставляемой батарейкой был применён повышающий источник напряжения TPS61200 (рис.3.9).

Его основные характеристики:

•        Более 90% КПД при,

-    300 мА выходной ток 3,3 V (VIN ≥ 2,4 В);

-    600 мА выходной ток при 5 В (VIN ≥ 3 В);

•        Выходной ток не менее 55 мкА;

•        Запуск при Входном напряжении 0.5В;

•        Рабочий диапазон входного напряжения от 0,3 В до 5,5 В;

•        Выходная защита от короткого замыкания при любых условиях эксплуатации;

•        Фиксированные и регулируемые параметры выходного напряжения от 1,8В до 5,5 В;

•        Режим энергосбережения для повышения эффективности при низкой выходной мощности;

•        Защита от перегрева;

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

Так же для обеспечения более удобной отладки плат в схему были введены некоторые дополнительные элементы , такие как: 2 кнопки, 2 свето-диода и 5 выводных портов подключённых к не подключенным ножкам микроконтроллера и ножкам коммутационных аналоговых мультиплексоров.

Все остальные элементы, включённые в схему, были добавлены в соответствии с технической документацией и являются элементами типовой схемы включения для основных компонентов, таких как CC430F6137, СС1100, FT232RL, ADM232, TPS61006, TPS61200, L78L00

3.3     Трассировка печатных плат

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

•        Минимальное расстояние между проводниками 0,3мм;

•        При разводке линий нельзя допускать прямых или острых углов;

•        Длинна сигнальных линий, должна быть как можно короче;

•        Количество переходных отверстий на сигнальных линиях должно быть как можно меньше;

•        Длинна линий питания может быть любой;

•        Количество переходных отверстий на линии питания может быть любым;

•        Если элемент имеет металлический корпус, то он должен быть заземлён;

•        Нельзя допускать открытие маски на медных элементах платы.

Для формы линий тоже есть свои правила.

•        Стандартная ширина сигнальной линии 0.25мм;

•        Стандартная ширина линии питания 0.50мм, но можно и больше.;

Что касаемо линий питания, чем они шире, тем лучше. Обычно их стараются делать шириной 1.0мм.

Также необходимо стараться оставить больше количество меди на плате, так как при производстве печатных плат медь стравливают с платы. А чем больше нужно вытравить меди, тем дороже плата. Лишние и не нужные медные площадки, обычно становятся «землёй». Такой подход не ухудшает качество платы, а наоборот увеличивает его, так как отрицательный заряд равномерно распределяется по медной площадке. Именно для того что бы заряд равномерно распределялся по площадкам необходимо «прошивать» эти площадки большим количеством переходных отверстий.

В данной работе было использовано два вида переходных отверстий:

•        C10D05 диаметр контактной площадки 1.0мм, диаметр отверстия 0.45мм (стандартное переходное отверстие)

•        C06D03 диаметр контактной площадки 0.60мм, диаметр отверстия 0.30ммD03 использовались только при трассировке платы контроллера оператора.

В качестве излучателя электромагнитных волн для радио канала, было принято решение использовать печатную антенну [12] для 868МГц компании CCIPCON. Реактивное сопротивление антенны на входе 50ohm. График пропускной способность при настройке антенны на частоту 868МГц представлен на рис.

Рис.3.11.Пропускная способность при настройке антенны на частоту 868МГц.

Чертёж антенны с линиями для колебательного контура представлен на рис.3.12.

Рис.3.12.Чертёж антенны с линиями для колебательного контура

Разработка печатной платы контроллера оператора производилась с учётами размеров корпуса BOS 400 компании BOPLA (рис.3.13). Чертёж корпуса представлен на рис

В дальнейшем, с учётом всех вышесказанных правил, была произведена трассировка печатной платы контроллера оператора и бортового контроллера (Рис.3.14 - 3.17).

Итоговые размеры плат составляют:

-    Для платы контроллера оператора длинна75.5мм ширина 56.5мм

-    Для платы бортового контроллера длинна 92.0мм ширина 82.0мм


Рис.3.13.Чертёж пластикового корпуса BOS 400 компании BOPLA

Рис.3.14.Печатная плата контроллера оператора (вид сверху).

Рис.3.15.Печатная плата контроллера оператора (вид снизу).

Рис.3.16.Печатная плата бортового контроллера (вид сверху).

Рис.3.17.Печатная плата бортового контроллера (вид снизу)

4. 
РАЗРАБОТКА ПРОГРАМНОЙ ЧАСТИ КОНТРОЛЛЕРОВ

Микроконтроллеры MSP430F147 [7] и CC430F6137 [8] имеют ряд библиотек для работы с модулями, которые входят в их состав. Эти библиотеки позволяют программисту легко управлять сложными процессами внутри микроконтроллера благодаря набору функций. Среди этих функций есть таки, как приём/отправка сообщений на UART, SPi. Так же в CC430F6137 есть набор функций для работы с LCD и радио модулем. Так что основными задачами при разработке программной части контроллеров были:

-    Разработка протокола для гарантированной доставки сообщений по радиоканалу;

-    Разработка основного цикла программы;

-    Разработка программы обработчика прерываний.

4.1 Алгоритм взаимодействия контроллеров

Сразу стоит сказать, что разрабатываемый нами протокол нужен нам по тому, что передача сообщений будет проходить в незащищённой, зашумлённой среде. Протокол будет гарантировать нам целостность данных при их отправке и то, что данные будут обязательно получены. Так же протокол обмена позволит нам получать данные только от того кто их нам послал, а это нам необходимо потому что частота 868МГц общедоступна и на ней работает очень много устройств. Но перед тем как разрабатывать протокол нам необходимо разработать формат данных, которые будут передаваться по радио каналу, и отработать все возможные варианты, из-за которых могут возникнуть ошибки.

4.1.1 Формат пакетов

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

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

Каждый микроконтроллер семейства MSP430 и СС430 компании Texas Instruments содержит уникальный номер, расположенный во флеш-памяти по адресу 0xff00. Он имеет длину в 10 байт. Этот номер и был взят за основу адреса устройства.

Так же при передаче нам понадобятся флаги, с помощью которых мы сможем контролировать этапы передачи данных. На первых этапах нам понадобятся:

•        Флаг подтверждения передачи ACK

•        Флаг ошибки при передаче ERR

•        Флаг установки соединения .INIT для обмена адресами.

Под эти флаги отводится 1 байт. Тем самым у нас остаётся ещё 5 бит зарезервированных для особых нужд.

Что бы следить за последовательным ходом работы при передачи пакетов, и контролировать потерю пакетов так же была введена числовая последовательность. Под неё выделяется один 1. Если

Для проверки целостности передаваемых данных, нам нужно передавать контрольную сумму. Для вычисления контрольной суммы был использован алгоритм для вычисления циклических избыточных кодов CRC16. Помимо этого с помощью этого кода можно узнать в каком месте пакета была произведена ошибка и восстановить повреждённые данные. Использование этого кода поможет свести к минимуму использование «битых» пакетов. Но всё равно остаётся одна опасная ситуация когда, одновременно повреждается пакет и контрольная сумма. Таким образом, система может посчитать пакет достоверным.

Под запись контрольной суммы полученной с использованием CRC16 отводится 2 байта.

Так же нам необходимо передавать данные в пакете. Поскольку у нас есть LCD дисплей, который нужен для отображения пользователю информации о системе, то нам необходимо передавать данные такого размера что бы на дисплее могло отобразиться максимально возможное число. Поскольку дисплей имеет 8 цифровых позиций, то максимальное число = 99999999. В шестнадцатеричном коде оно равно 5F5E0FF. Данное значение занимает 4 байта. Так же, под данные было отведено ещё 2 байта, для передачи кодов позволяющих, определить ,для чего нужны и что обозначают 4 последующих байта.

Таким образом, длинна нашего пакета ровна 30 байтам и имеет структуру изображённую на рис. 4.1.

Рис. 4.1. Формат пакета данных при передаче по протоколу гарантированной доставке сообщений по радиоканалу

4.1.2  Протокол обмена данными

При разработке алгоритмов протокола гарантированной доставки сообщений по радиоканалу были рассмотрены алгоритмы протокола TCPControl Protocol (TCP) (протокол управления передачей) - один из основных сетевых протоколов Интернета, предназначенный для управления передачей данных в сетях и подсетях TCP/IP.- это транспортный механизм, предоставляющий поток данных, с предварительной установкой соединения, за счёт этого дающий уверенность в достоверности получаемых данных, осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета.


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

Рис.4.3. Этапы нормальной работы протокола ГДС

Рис. 4.4. Этапы установления соединения по протоколу ГДС.

Основные функции, которые будет выполнять протокол гарантирован-ной доставки сообщений (ГДС) при обычной работе, изображены на рис. 4.2.

Работа протокола ГДС при обычной передаче сообщения представлена в несколько этапов (рис.4.3):

Этап 1.Сначало, инициатор передачи (1) отправляет пакет в котором указан адрес отправителя А1, адрес получателя А2, числовую последовательность ЧП, контрольную сумму CRC и сами данные. Поле флагов равно 0. После отправки пользователь 1 переходит в сон, дожидаясь подтверждения о доставке.

Этап 2.Получатель (2) принимает пакет. После чего он его проверяет, и удостоверившись что с пакетом всё хорошо он увеличивает свою числовую последовательность на 1 и отправляет пользователю 1, пакет подтверждения, а сам начинает обрабатывать данные которые только что получил. Пакет подтверждения отличается от обычного только тем, что в нём есть флаг подтверждения АСК и числовая последовательность увеличена на 1.

Этап 3.Пользователь 1 получает пакет подтверждения и проверяет его. Удостоверившись, что с пакетом всё хорошо он увеличивает свою числовую последовательность на 1

При установлении соединения, работа протокола ГДС отличается от обычной, увеличенным количеством этапов (рис.4.4):

Этап 1.Инициатор передачи (1) отправляет пакет в котором заполняет только адрес отправителя А1, числовую последовательность ЧП, контрольную сумму CRC и флаг установки соединения INIT.

Этап 2. Получатель (2) принимает пакет и благодаря флагу INIT не проверяет адреса, а проверяет только целостность пакета. Удостоверившись, что с пакетом всё хорошо он запоминает адрес отправителя и отправляет ему обычный пакет, а сам остаётся дожидается подтверждения.

Этап 3. Пользователь (1) принимает пакет и проверяет только адрес получателя и целостность пакета. Удостоверившись, что с пакетом всё хорошо он запоминает адрес отправителя, увеличивает свою числовую последовательность на 1 и отправляет пользователю 1, пакет подтверждения.

Этап 4. Пользователь 1 получает пакет подтверждения и проверяет его. Удостоверившись, что с пакетом всё хорошо он увеличивает свою числовую последовательность на 1.

При ближайшем рассмотрении становится, очевидно, что начиная со второго этапа, установка соединения выглядит как обычная передача сообщения. Она отличается только этапом 3, где не проверяется адрес отправителя. Так что можно сказать, что установка соединения по протоколу ГДС является частным случаем обычного обмена сообщениями.

4.1.3  Возможные ситуации при передаче данных по протоколу

Рис. 4.5. Потеря пакета сразу после отправки

Рис. 4.6.Нарушение целостности пакета, сразу после отправки.

Для того что бы реализовать функции проверки и формирования пакета, представленные на рис. 4.2, необходимо рассмотреть все возможные ситуации которые могут возникнуть при обычной передаче пакета по протоколу гарантированной доставке сообщений (ГДС).

Для начала рассмотрим ситуацию, когда наш пакет теряется сразу после отправки (Рис. 4.5).

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

Теперь рассмотрим ситуацию, когда сразу после отправки у нас нарушается целостность пакета (Рис. 4.6).

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

Когда отправитель получит пакет и проверит его, то на основе флага ERR и числовой последовательности, он примет решение отправить предыдущее сообщение заново. Дальнейшая работа протокола ни чем не отличается от обычной отправки сообщений.

Так же нам необходимо рассмотреть случаи, в которых происходит сбой при отправке подтверждения. Одним из этих случаев является потеря пакета подтверждения доставки сообщения (рис. 4.7).

Если такая ситуация произошла, то перед тем как отправить пакет подтверждения получатель увеличил свою числовую последовательность, а отправитель, как и в первом случае, недожавшись подтверждения, по Timeout’у, повторит отправку предыдущего пакета.

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

Рис. 4.7. Потеря пакета подтверждения

Рис. 4.8. .Нарушение целостности пакета подтверждения

Теперь рассмотрим ситуацию, у нас нарушается целостность пакета подтверждения доставки сообщения (Рис. 4.6).

В этом случае, перед тем как отправитель получит повреждённый пакет подтверждения, получатель увеличит свою числовую последовательность. Отправитель же обнаружит при проверке, что пакет повреждён и уведомит об этом получателя, выставив флаг ERR, не увеличив при этом свою числовую последовательность.

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

Единственное отличие этого случая от предыдущего, что получатель так же с предыдущим сообщением получает флаг ERR.

Как было рассмотрено выше, процесс установки соединения по протоколу ГДС является частным случаем обычного обмена сообщениями. Поэтому для него так же будут выполняться все случаи рассмотренные выше. Если же возникнет случай, когда сразу после инициализации у нас потеряется пакет с флагом INIT, то пользователь 1 просто не получит не какого сообщения и соединение не будет установлено. Тоже самое произойдет, если целостность этого пакета будет нарушена. Пользователь 2 просто откинет этот пакет и сделает вид, что ничего не произошло.

4.1.4  Блок-схемы основных функций протокола

После рассмотрения всех возможных ситуаций при работе протокола, были разработаны блок-схемы всех необходимых алгоритмов для дальнейшей реализации протокола гарантированной доставки (ГДС) сообщений по радиоканалу. В список необходимых алгоритмов вошли:

-    алгоритм проверки пакетов;

-    алгоритм передачи пакетов;

-    алгоритм приёма пакетов;

-    алгоритм установления соединения со стороны клиента;

-    алгоритм установления соединения со стороны сервера;

Алгоритм проверки пакетов был реализован при использовании результатов полученных в пункте 4.1.3. «Возможные ситуации при передаче данных по протоколу».

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

Далее идёт проверка целостности. По тому что, даже если пакет и адресован нам, но он повреждён, то нет никакого смысла проверять его дальше.

Рис.4.9. Алгоритм проверки пакетов

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

         пакет был адресован не нам, и мы возвращаемся в режим ожидания нужного нам пакета;

         успешный результат;

         нам необходимо отправить предыдущий пакет.

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

Флаг NoCh устанавливается на первом этапе (рис 4.4) со стороны клиента при попытке установления связи с сервером.. - набор флагов пришедших в пакете.. - флаги, которые необходимо отправить в будущем пакете.

ЧПН - наша числовая последовательность.

ЧПп - числовая последовательность, записанная в пришедшем пакете.

Рис.4.10. Алгоритм приёма пакетов

Рис.4.11. Алгоритм передачи пакетов

Рис.4.12. Алгоритм установления соединения со стороны сервера

Рис.4.13. Алгоритм установления соединения со стороны клиента

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

4.2    
Общий алгоритм управляющей программы

Рис.4.14. Общий алгоритм программы.

Общий алгоритм программы, представленный на рис. 4.14. был разработан для контроллера оператора и бортового контроллера. Единственное чем отличаются эти контроллеры при использовании этого алгоритма так это блоком выполнения функций.

Для контроллера оператора блок выполнения функций представляет собой набор функций вывода на LCD дисплей определённых сообщений и отправки данных запроса по протоколу гарантированной доставки сообщений по радиоканалу. Выбор выполняемых функций осуществляется с помощью обработчика прерываний кнопок.

Для бортового контроллера блок выполнения функций отсутствует. В его задачи входит обработка и выполнение запросов поступающих со стороны контроллера оператора и посылка ответов.

Блок инициализации включает в себя, настройку радио модуля, частоты работы ЦПУ, АЦП , LCD модуля, последовательных портов и основных портов ввода вывода микроконтроллера.

Блок обработки прерываний включает в себя обработку прерывания от четырёх видов источников.

Обработка прерываний от таймера. Реализована в виде ожидания в алгоритмах протокола гарантированной доставке сообщений. А так же в алгоритмах работы LCD дисплея и сканера клавиатуры.

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

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

Обработка прерываний от последовательного интерфейса. Используется только в бортовом контроллере для обработки пакетов поступающих по протоколу и обработки данных поступающих с USB или СOM-порта

Блок «Сон» представляет собой особое состояние микроконтроллера в котором ЦПУ микроконтроллера перестаёт выполнять исполнительный код программы, записанный в него, контроллер прерываний остаётся включен. Можно сказать, что в данном случае ЦПУ микроконтроллера просто перестаёт работать, до момента, когда на него поступит какое-нибудь прерывание из вне.

Блок обработки пакетов и блок установления соединения реализованы на алгоритмах, которые были разработаны в пункте 4.1.4. «Блок-схемы основных функций протокола».

Рис.4.15. Алгоритм обработки нажатия кнопок

Данный алгоритм позволяет распознавать нажатие кнопки или зажатие кнопки, на определённый период времени, устанавливая при этом соответствующие флаги. Он так же подходит для распознавания нажатия или зажима группы кнопок.

5.       
ТЕСТИРОВАНИЕ И ОТЛАДКА СПРОЕКТИРОВАННЫХ УСТРОЙСТВ

Тестирование данных устройств проводилось по двум направлениям:

-    Тестирование аппаратной части контроллеров;

-    Тестирование программной части контролеров.

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

-    Мультиметр Mastech MAS838;

-    Цифровой осциллограф АСК-22060;

-    Программатор MSP-GANG430.

5.1 Тестирование печатных плат

Тестирование состояло из следующих этапов:

-    тестирование правильности работы преобразователей напряжения;

-    тестирование приёма и передачи сообщений по интерфейсу RS-232;

-    тестирование приёма и передачи сообщений по интерфейсу USB;

-    тестирование работы радио модуля.

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

Выходное напряжение преобразователей попадало в 5% диапазон от того которое указал производитель.

Преобразователь TPS61006 установленный на плате те контроллера оператора, превышал этот диапазон. Его выходное напряжение было +3.52В при заявленных +3.3В.

В документации на микроконтроллер CC430F6137 сказано, что критическое напряжение работы микроконтроллера +3.6В.

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

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

Ход выполнения тестирования:

-    подключаем плату к USB порту, тем самым подавая напряжение на плату +5В;

-    предварительно, МК запрограммирован тестовой программой, которая должна принимать код приходящий по асинхронному последовательному порту, и отправлять обратно;

-    плата подключается по интерфейсу RS-232 к компьютеру;

-    на компьютере запускается программа “Terminal”;

-    после включения питания, плата устанавливает свою схему коммутации в положение COM - UART и передаёт по интерфейсу RS-232 сообщение о готовности ;

-    из программы “Terminal” отсылаются пакеты по интерфейсу RS-232;

-    плата ретранслирует принятые пакеты на компьютер по интерфейсу RS-232.

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

Для проверки работы интерфейса USB в режиме приёма и передачи был проведён специальный тест. Тест аналогичен соответствующему тесту для интерфейса RS-232 за счёт того, что программа “Terminal” распознают USB - соединение как COM.

Ход выполнения тестирования:

-    подключаем плату к USB порту, тем самым подавая напряжение на плату +5В;

-    предварительно, МК запрограммирован тестовой программой, которая должна принимать код приходящий по асинхронному последовательному порту, и отправлять обратно;

-    на компьютере запускается программа “Terminal”;

-    после включения питания, плата устанавливает свою схему коммутации в положение COM - UART и передаёт по интерфейсу USB сообщение о готовности;

-    из программы “Terminal” отсылаются пакеты для робота по интерфейсу USB;

-    плата ретранслирует принятые пакеты на компьютер по интерфейсу USB.

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

Для проверки работы радио модуля в режиме приёма и передачи на частоте 868МГц был проведён специальный тест.

Ход выполнения тестирования:

-    Берём 2 одинаковых контроллера оператора;

-    Подключаем к ним источник напряжения;

-    предварительно, МК запрограммирован тестовой программой, которая должна принимать код приходящий по радиоканалу и выводить его на LCD дисплей, а при нажатии на кнопку отправлять этот код;

-    нажимаем на кнопку контроллера №1;

-    контроллер №1 передаёт на контроллер №2, а тот выводит его на дисплей.

В результате этого теса сообщение было передано на максимальном расстоянии 7см. что позволяет утверждать, что радио модуль, работает. Но при повторном проведении этого теста с последующим увеличением расстояния, Сообщение не передаётся.

Этот тест так же проводился при использовании частот 916МГц и 413МГц. Но даже на расстоянии менее 7см данные не передавались. Из этого можно сделать вывод, что антенна спроектирована правильно и с частотой работы 868МГц.

При дальнейшем рассмотрении всех особенностей проектировки печатных антенн, в плате контроллера оператора была найдена ошибка, допущенная при проектировании рис.5.1.

Рис.5.1. Фотография контролера оператора (вид сверху)

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

В связи с этой ошибкой пришлось заново произвести разработку принципиальной схемой котроллера оператора с заменой микроконтроллера CC430F6137 на MSP430FE423 (рис. 5.3) и добавлением в схему отдельного радио модуля CC1100, того же что используется в бортовом контроллере.

Основные характеристики микроконтроллера MSP430FE423:

•        16-разрядный микроконтроллер пониженной мощности;

•8КБ Flash-памяти;

•        256Б RAM;

•        USARTs (универсальный асинхронный приёмопередатчик);

•        LCD модуль.

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

Новые принципиальные схемы представлены на рис.5.2, 5.3, 5.4.

Так же повторно была произведена трассировка печатной платы контроллера оператора (рис 5.5 и 5.6)

Рис.5.2. Принципиальная схема повышающего источника напряжения для повторно спроектированного контроллера оператора

Рис.5.3. Принципиальная схема микроконтроллера для повторно спроектированного контроллера оператора

Рис.5.4. Принципиальная схема радио модуля для повторно спроектированного контроллера оператора

Рис.5.5. Повторно спроектированная печатная плата контроллера оператора (вид сверху).

Рис.5.6. Повторно спроектированная печатная плата контроллера оператора (вид снизу).

5.2 Отладка программной части контроллеров

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

Но всё же радио модуль оказался способен передавать данные на короткое расстояние. Благодаря этому удалось произвести тестирование протокола гарантированной доставки сообщений по радиоканалу.

Для тестирования протокола были искусственно созданы ситуации, описанные в пункте 4.1.2. «Возможные ситуации при передаче данных по протоколу», с целью проверки того что данные всё ровно будут доставлены.

При прохождении тестов были выявлены 2 тупиковые ситуации.

Рис.5.7. Первая тупиковая ситуация

Рис.5.8. Вторя тупиковая ситуация

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

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

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

Теперь рассмотрим вторую тупиковую ситуацию. Предположим, что пакет подтверждения был доставлен поврежденным, в то время как пользователь 2 увеличил свою числовую последовательность. Тогда пользователь 1 повторит запрос установив флаг повреждения целостности ERR. Предположим, что это сообщение дойдёт до пользователя 2 тоже повреждённым. Тогда он сам отправит сообщение с флагом ERR пользователю 1. Исходя из доработанного алгоритма проверки пакетов, мы должны будем расценить это сообщение, как потерю пакета. Нам вроде как необходимо повторить отправку пакета со стороны пользователя 1 и получив пакет подтверждения увеличить свою ЧП. Но это не так. На самом деле нам просто необходимо на этапе 5 сразу увеличить свою числовую последовательно и успешно выйти из алгоритма передачи пакетов представленном на рис.4.11. Доработанный алгоритм проверки пакетов представлен на рис.5.9.

Рис.5.9. Доработанный алгоритм проверки пакетов.

робот дозиметрист передача контроллер

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

Вовремя проведения тестирования протокола, время ожидания равнялось 300мс а, количество попыток отправки пакета равно 3.

ЗАКЛЮЧЕНИЕ

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

Обзорная часть дипломного проекта состоит из следующих частей:

-    обзор аппаратных решений, применяющихся в «Роботе-дозиметристе» и анализ общей структурной схемы робота;

-    обзор способов дистанционной передачи данных.

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

-    разработана структурная схема взаимодействия контроллера оператора и бортового контроллера;

-    произведён выбор аппаратной базы для реализации контроллера оператора и бортового контроллера.

Далее, основываясь на результатах предыдущих пунктов:

-    спроектированы принципиальные электрические схемы контроллера оператора и бортового контроллера;

-    спроектированы печатные платы контроллера оператора и бортового контроллера;

-    разработан протокол гарантированной доставки сообщений для радиоканала;

-    разработана общая программа для взаимодействия бортового контроллера и контроллера оператора;

-    составлено руководство пользователя для плат бортового контроллера и контроллера оператора.

Отладка протокола не была выполнена до конца из-за возникших проблем с платой контроллера оператора.

Спроектированные контроллеры имеют большое значение в разработке «Робота-дозиметриста». Они позволяют сократить ряд основных проблем при дальнейшей разработке и эксплуатации робота, обеспечивая дополнительный контроль над ним и предоставляя ряд новых возможностей, таких как увеличенная дистанция беспроводного управления роботом.

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

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

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

СПИСОК ЛИТЕРАТУРЫ

1. Лопаткин А. В.. P-CAD. - СПб.: БВХ - Петербург, 2006. - 560 с.

. А. В. Белов. Самоучитель разработчика устройств на микроконтроллерах AVR. - М.: Наука и техника, 2010. - 544 с.

. Шахнович И. Современные технологии беспроводной связи.- М.: Мир, 1987. - 608 с.

. Семейство микроконтроллеров MSP430. Рекомендации по применению. - ЗАО «Компэл», 2005. - 544 с.

. Семейство микроконтроллеров MSP430x1xx. - ЗАО «Компэл», 2005. - 368 с.

. Лобкова Л. М. Проектирование антенн и устройств СВЧ. - СевНТУ, 2002. - 147 с.

. CC430 Family User's Guide (Rev. B). SLAU259B - Texas Instruments, 2010 - 640с.

. CC430x1xx Family User's Guide (Rev. F). SLAU049B - Texas Instruments, 2006 - 625с.

. Раймонд Мэк. Импульсные источники питания. Теоретические основы проектирования и руководство по практическому применению. - М: Додэка XXI, 2008. - 274 с.

. Горвард Джонсон, Мартин Грэхем. Высокоскоростная передача цифровых данных: высший курс черной магии. - Вильямс, 2005. - 997 с.

. Джон Мортон. Микроконтроллеры AVR. Вводный курс. - М: Додэка-ХХI, 2006. - 272 с.

. Феер К. Беспроводная цифровая связь: методы модуляции. - Пер. с англ. // Под. ред. В. И. Журавлёва. - М.: Радио и связь, 2000. - 520 с.

. Kent Smith. Antennas for low power application. - 2001 http://www.mplab.ru/rfmod/ant.pdf

. Wikipedia (http://ru.wikipedia.org/wiki/ Последовательный_порт) - интернет ресурс

. Агуров П.В. - Интерфейс USB. Практика использования и программирования. - СПб.: БВХ - Петербург, 2004. - 576 с.

ПРИЛОЖЕНИЕ 1. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ.

Инструкция по программированию МК

Программирование осуществляется при помощи программатора MSP-GANG430. MSP-GANG430 может запрограммировать до восьми идентичных MSP430 устройств одновременно. MSP-GANG430 подключается к ПК с использованием стандартного RS232 последовательного порта. MSP-GANG430 предоставляет гибкие возможности программирования устройств.GANG430 оснащен платой расширения, реализующего взаимосвязь между MSP-GANG430 и несколькими восьми устройствами.

Программирование микроконтроллера выполняется при помощи следующей последовательности действий:

. Подключите MSP-GANG430 к последовательному порту ПК (COM1 или COM15).

. Подключите внешний источник питания для MSP-GANG430. Напряжение питания должно находиться в диапазоне от 9В до 15В постоянного тока и должны быть способно, обеспечить минимальный ток 300 мА.

. Установите плату расширения. D-Sub разъем на MSP-GANG430. Плата расширения обеспечивает подключение до восьми устройств.

. Установите последнюю версию программного обеспечения, которое можно загрузить с веб-сайта MSP430 в www.msp430.com.

. Нажмите на иконку GANG430 находящуюся в папке, указанной при установке программного обеспечения (по умолчанию папка ADT430). Графический интерфейс программы изображён на рис.6.2.

. Выберите нужные устройства в закладках «группы» и «тип».

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

. После подключения нажмите на кнопку Start находящуюся на программаторе.

. Выберите файл, объектный код которого должен быть запрограммирован в устройство. Поддерживаемые форматы для файла кода .TXT и .HEX

. Используйте кнопку Load Image, чтобы загрузить файл объектного кода и его контрольную сумму для MSP-GANG430.

. Выберите напряжение, используя закладку напряжения питания.

. Выберите необходимые параметры, находящиеся в основном окне программы.

. Нажмите на кнопку Execute в главном разделе. В разделе Статус отображаются операций прогресса и завершения.

Перечень элементов


Плата контроллера оператора. Таблица 1.

Обозначение

Тип компонента

Значение

PatternName


Конденсаторы



C15

C0805

1 pF, *0.25pF NPO

805

C14

C0805

1.5 pF, *0.25pF NPO

805

C18

C0805

1.5 pF, *0.25pF NPO

805

C17

C0805

1.8 pF, *0.25pF NPO

805

C3

C0805

22pF

805

C4

C0805

22pF

805

C19

C0805

27pF 5% NPO

805

C20

C0805

27pF 5% NPO

805

C13

C0805

33 pF 5% NPO

805

C22

C0805

33 pF 5% NPO

805

C12

C0805

100 pF 5% NPO

805

C16

C0805

100 pF 5% NPO

805

C23

C0805

4.7nF X7R

805

C2

C0805

10nF

805

C5

C0805

10nF

805

C6

C0805

10nF

805

C7

C0805

10nF

805

C21

C0805

100nF X7R

805

C1

C0805

0.1uF

805

C9

C0805

1uF

805

C10

C0805

1uF

805

C25

C0805

1uF

805

C11

CASE_B

10uFx6.3V

CASEB3528

C24

CASE_B

47uFx6.3V

CASEB3528


Микросхемы



DA1

CC1100

CC1100

QLP20

DD1

MSP430EF42

MSP430F423

PQFP64_10X10P05

U2

TPS76333

TPS76333

SOT23-5


Индикаторы



HG1

DTC20297A


DTC20297A


Индуктивности



L3

CM201212

6.2 nH 5%

L2

CM201212

12 nH 5%

805

L4

CM201212

12 nH 5%

805

L1

CM201212

18 nH 5%

805

L5

CM201212

18 nH 5%

805


Резисторы



R10

R0805

270

805

R9

R0805

56k 1%

805

R9

R0805

56k 1%

805

R4

R0805

100k

805

R5

R0805

100k

805

R6

R0805

100k

805

R7

R0805

100k

805

R8

R0805

100k

805


Кнопки



SB1

TS-A_PS-130


TS-AXPS-130

SB2

TS-A_PS-130


TS-AXPS-130






Светодиоды KPC-3216



VD2




KPC-3216



Разъемы



PLD-12

XP1


PLD-12





Кварцевые резонаторы



ZQ1

PK206


32.768 kHz

PK206

ZQ2

HCX-6SB


26 MHz, 10ppm, Fund, SMD0603

HCX-6SB

Плата бортового контроллера Перечень элементов Таблица 2

 

Обозначение

Тип компонента

Значение

PatternName

 

Конденсаторы

 

C1

C0805

100 pF 5% NPO

805

 

C2

C0805

1.5 pF, *0.25pF NPO

805

 

C3

C0805

33 pF 5% NPO

805

 

C4

C0805

1 pF, *0.25pF NPO

805

 

C5

C0805

100 pF 5% NPO

805

 

C6

C0805

1.8 pF, *0.25pF NPO

805

 

C7

C0805

1.5 pF, *0.25pF NPO

805

 

C8

C0805

27pF 5% NPO

805

 

C9

C0805

4.7nF X7R

805

 

C10

C0805

33 pF 5% NPO

805

 

C11

C0805

27pF 5% NPO

805

 

C12

C0805

100nF X7R

805

 

C13

CASE_B

47uFx6.3V

CASEB3528

 

C14

C0805

0.1uF

805

 

C15

C0805

0.1uF

805

 

C16

C0805

0.1uF

805

 

C17

C0805

10uF

805

 

C18

C0805

0.1uF

805

 

C19

C0805

10nF

805

 

C20

C0805

27pF 5% NPO

805

 

C21

C0805

0.1uF

805

 

C22

C0805

27pF 5% NPO

805

 

C23

C0805

0.1uF

805

 

C24

C0805

0.1uF

805

 

C25

C0805

0.1uF

805

 

C26

C0805

0.1uF

805

 

C27

C0805

0.1uF

805

 

C28

C0805

10nF

805

 

C29

C0805

30pF

805

 

C30

C0805

30pF

805

 

C31

C0805

12pF

805

 

C32

C0805

12pF

805

 

C33

C1206

22uF

1206

 

C34

C0805

100pF

805

 

C35

C0805

33nF

805

 

C36

C1206

10uF

1206

 

C37

C0805

10uF

805

 

C38

C0805

100nF

805

 

C39

C0805

10uF

805

 

C40

C0805

100nF

805

 

C41

C0805

10nF

805

 

C42

C0805

0.33uF

805

 

C43

C0805

0.1uF

805

 

C44

C1206

10uF

1206

 

C45

C0805

0.1uF

805

 

C46

C1206

10uF

1206

 

Резисторы

 

R1

R0805

56k 1%

805

 

R2

R0805

430

805

 

R3

R0805

470

805

 

R4

R1206

10

1206

 

R5

R0805

430

805

 

R6

R0805

270

805

 

R7

R0805

430

805

 

R8

R0805

10k

805

 

R9

R0805

1k

805

 

R10

R0805

10

805

 

R11

R0805

10k

805

 

R12

R0805

5k

805

 

R13

R0805

5k

805

 

R14

R0805

10

805

 

R15

R0805

5k

805

 

R16

R0805

1.5k

805

 

R17

R0805

5k

805

 

R18

R0805

5k

805

 

R19

R0805

3k

805

 

R20

R0805

3k

805

 

R21

R0805

100k

805

 

R22

R0805

5k

 

R23

R0805

3k

805

 

R24

R0805

100k

805

 

R25

R0805

430

805

 

R26

R0805

430

805

 

R27

R0805

2.2k

805

 

R28

R0805

10k

805

 

R29

R0805

100k

805

 

R30

R0805

56k

805

 

R31

R0805

100k

805

 

R32

R0805

430

805

 

R33

R0805

430

805

 

R34

R1206

10

1206

 

R35

R0805

270

805

 

R36

R0805

100k

805

 

R37

R0805

470k

805

 

R38

R0805

470k

805

 

R39

R0805

10k

805

 

R40

R0805

270

805

 

R41

R1206

10

1206

 

R42

R0805

430

805

 

R43

R1206

10

1206

 

Индуктивности

 

L1

CM201212

18 nH 5%

805

 

L2

CM201212

12 nH 5%

805

 

L3

CM201212

6.2 nH 5%

805

 

L4

CM201212

18 nH 5%

805

 

L5

CM201212

12 nH 5%

805

 

L6

DO1608C

DO1608C-333ML 33uH

L_6_6X4_5

 

L7

SDR1005

2.2uH

SDR1005

 

Микросхемы

 

DA1

CC1100


QLP20

 

DA2

TS3A5017


TS3A5017DR

 

DA3

TS3A5017


TS3A5017DR

 

DD1

ADM202


SO16

 

DD2

MSP430F147IPMR


PQFP-G64_10X10P05

 

U6

FT8U232AM


FT8U245AM

 

U12

M93C46

{Value}

M93C46

 

U20

TPS6100X

TPS61006DGS

MSOP-10_W120P05

 

U24

TPS6120X

{Value}

DRC(S-PVSON-N10)

 

U25

78L33


78L33

 

Кнопки

 

SB1

TS-A_PS-130


TS-AXPS-130

 

SB2

TS-A_PS-130


TS-AXPS-130

 

Светодиоды

 

VD1

KPC-3216


KPC-3216

 

VD3

KPC-3216


KPC-3216

 

VD4

KPC-3216


KPC-3216

 

VD6

KPC-3216


KPC-3216

 

VD7

KPC-3216


KPC-3216

 

VD8

KPC-3216


KPC-3216

 

VD9

KPC-3216


KPC-3216

 

VD11

KPC-3216


KPC-3216

 

Диоды

 

D1

MBRM120LT3


DO-216AA

 

VD2

MBRM120LT3


DO-216AA

 

VD5

MBRM120LT3


DO-216AA

 

VD10

MBRM120LT3


DO-216AA

 

Транзисторы

 

VT1

BC847


SOT-23

 

VT2

BC847


SOT-23

 

VT3

BC847


SOT-23

 

VT4

BC847


SOT-23

 

VT5

BC847


SOT-23

 

Разъемы

 

XS1

DRB-9MA


DRB-9MA

 

XS2

UBAR-04-S


UBAR-04-S

 

XS3

DRB-9MA


DRB-9MA

 

Кварцевые резонаторы и генераторы

 

ZQ1

FTX26-M20SM7

26MHz

FTX26-M20SM7

 

ZQ2

HC-49U

8MHz

HC-49U

 

ZQ3

PK206

32k

PK206

 


Листинг 1

#include "main.h"

#include "LCD.h"

#include "ADC.h"

#include "CoupleProto.h"

#include "RF_coreMod.h"int buttonCnt = 0;int buttonPressed = 0;int ButtonSet = 0;int lastDisp = 0;char flagfinInt = 0;char slip = 0;char idself[10] = {0};char msg[8] = {' ',' ',' ',' ',' ',' ',' ',' '};char* data = 0;main( void )

{= WDTPW + WDTHOLD;(3);();();();();();();h =6;(h--)[h] = 0;(idself);(1)

{= 1;

__bis_SR_register( LPM3_bits + GIE );

__no_operation();(!initSys)

{(ButtonSet)

{1:();;7:();;:=0;;

}

}(initSys)

{(chReceiving())

{(data, 6);();

}

{(ButtonSet)

{1:();;2:();();;7:();;:=0;;

}

}

}

}InitButtonLeds(void)

{SEL |= 0xc0;

// Set up the button as interruptibleDIR &= ~(0x07);REN |= 0x07;IES |= 0x07;IFG = 0;OUT |= 0x07;IE |= 0x07;

// Initialize Port J= 0x00;= 0xFF;

// Set up LEDsDIR |= BIT6 + BIT7;OUT |= BIT6 + BIT7;

}InitTimer(void)

{SEL |= 0x03; // Set xtal pins_Start(XT1DRIVE_0);CTL = TASSEL__ACLK + TACLR; // ACLK source

}InitRadio(void)

{_H = 0xA5;_L |= PMMHPMRE_L;_H = 0x00;(&rfSettings);(PATABLE_VAL);

}Wait(void)

{CTL &= ~(MC_3);CCR2 = 3277;CCTL2 |= CCIE;CTL |= MC_2 + TACLR;

}WaitDisp(unsigned int Time, unsigned char* action)

{_LCD();= Time * 10;_LCD_Memory(action);();

}ChButton (void)

{CCTL2 &= ~(CCIE);char n = (P2IFG & 0x07);(!(flagfinInt & n))

{(!(P2IN & n))++;

{= 0;= n;

}((buttonCnt == 30)&&(buttonPressed))

{= 0;= 8 + n;|= n;

}

}

{IES &= 1;&= ~n;= 0;

}

}

#pragma vector=TIMER0_A1_VECTOR

__interrupt void TIMER0_A1_ISR(void)

{(__even_in_range(TA0IV,14))

{0: break;2:(chReceiving())

{CCR1 += RX_TIMER_PERIOD; // 16 cycles * 1/32768 = ~500 us(int i=0; i<8; i++)[i]=' ';[0]='P';[1]='t';[2]='r';(5, msg);();(chPacketReceived())

__bic_SR_register_on_exit(LPM3_bits);

}if(chTransmitting())

{CCR1 += TX_TIMER_PERIOD; // 16 cycles * 1/32768 = ~500 us(int i=0; i<8; i++)[i]=' ';[0]='P';[1]='t';[2]='t';(5, msg);();(chPacketTransmit())

__bic_SR_register_on_exit(LPM3_bits);

}if (chCProtoFlagWait() == 1)

{(1);

__bic_SR_register_on_exit(LPM3_bits);

};4:CTL &= ~(MC_3);(buttonPressed)

{();(!buttonPressed)

{IFG = 0;IE |= 0x07;(slip)

{

__bic_SR_register_on_exit(LPM3_bits);= 0;

}

}();

}(lastDisp)

{-;();(!lastDisp)

{();&= ~LCDON;OUT |= BIT6 + BIT7;

}

};6: break; // Reserved not used8: break; // Reserved not used10: break; // Reserved not used12: break; // Reserved not used14: break; // Overflow not used

}

}

#pragma vector=PORT2_VECTOR

__interrupt void PORT2_ISR(void)

{(__even_in_range(P2IV, 16))

{0: break;2: // P2.0 IFG

__delay_cycles(100);= 1;IE &= ~BIT0;IFG |= 0x01;= 0;();;4: // P2.1 IFG

__delay_cycles(100);=1;IE &= ~BIT1;IFG |= 0x02;= 0;();;6: // P2.2 IFG

__delay_cycles(100);=1;IE &= ~BIT2;IFG |= 0x04;= 0;CTL0 |= ADC12SC;();;8: break; // P2.3 IFG10: break; // P2.4 IFG12: break; // P2.5 IFG14: break; // P2.6 IFG16: break; // P2.7 IFG

}

}

//------------------------------------------------------------------------------

#pragma vector=ADC12_VECTOR

__interrupt void ADC12ISR (void)

{(__even_in_range(ADC12IV,34))

{0: break; // Vector 0: No interrupt2: break; // Vector 2: ADC overflow4: break; // Vector 4: ADC timing overflow6: // Vector 6: ADC12IFG0(msg);(5, msg);;8: break; // Vector 8: ADC12IFG110: break; // Vector 10: ADC12IFG212: break; // Vector 12: ADC12IFG314: break; // Vector 14: ADC12IFG416: break; // Vector 16: ADC12IFG518: break; // Vector 18: ADC12IFG620: break; // Vector 20: ADC12IFG722: break; // Vector 22: ADC12IFG824: break; // Vector 24: ADC12IFG926: break; // Vector 26: ADC12IFG1028: break; // Vector 28: ADC12IFG1130: break; // Vector 30: ADC12IFG1232: break; // Vector 32: ADC12IFG1334: break; // Vector 34: ADC12IFG14: break;

}}

#pragma vector=CC1101_VECTOR

__interrupt void CC1101_ISR(void)

{(__even_in_range(RF1AIV,32)) // Prioritizing Radio Core Interrupt

{0: break; // No RF core interrupt pending2: break; // RFIFG04: break; // RFIFG16: break; // RFIFG28: break; // RFIFG310: break; // RFIFG412: break; // RFIFG514: break; // RFIFG616: break; // RFIFG718: break; // RFIFG820: // RFIFG9(!(RF1AIES & BIT9)) // RX sync word received

{(int i=0; i<8; i++)[i]=' ';[0]='I';[1]='n';[2]='t';(5, msg);(1);

__bic_SR_register_on_exit(LPM3_bits); // Exit active

};22: break; // RFIFG1024: break; // RFIFG1126: break; // RFIFG1228: break; // RFIFG1330: break; // RFIFG1432: break; // RFIFG15

}

#ifndef MAIN_H_

#define MAIN_H_

#include "cc430F6137.h"

#include "RF_1_fun.h"InitButtonLeds(void);InitRadio(void);InitTimer(void);WaitDisp(unsigned int Time, unsigned char* action);ChButton(void);Wait(void);get(unsigned char* id);

#define PATABLE_VAL (0x51)_SETTINGS rfSettings = {

x08, // FSCTRL1 Frequency synthesizer control.

x00, // FSCTRL0 Frequency synthesizer control.

x23, // FREQ2 Frequency control word, high byte.

x31, // FREQ1 Frequency control word, middle byte.

x3B, // FREQ0 Frequency control word, low byte.

xCA, // MDMCFG4 Modem configuration.

x83, // MDMCFG3 Modem configuration.

x93, // MDMCFG2 Modem configuration.

x22, // MDMCFG1 Modem configuration.

xF8, // MDMCFG0 Modem configuration.

x00, // CHANNR Channel number.

x34, // DEVIATN Modem deviation setting (when FSK modulation is enabled).

x56, // FREND1 Front end RX configuration.

x10, // FREND0 Front end TX configuration.

x18, // MCSM0 Main Radio Control State Machine configuration.

x16, // FOCCFG Frequency Offset Compensation Configuration.

x6C, // BSCFG Bit synchronization Configuration.

x43, // AGCCTRL2 AGC control.

x40, // AGCCTRL1 AGC control.

xE9, // FSCAL3 Frequency synthesizer calibration.

x2A, // FSCAL2 Frequency synthesizer calibration.

x00, // FSCAL1 Frequency synthesizer calibration.

x1F, // FSCAL0 Frequency synthesizer calibration.

x59, // FSTEST Frequency synthesizer calibration.

x81, // TEST2 Various test settings.

x35, // TEST1 Various test settings.

x09, // TEST0 Various test settings.

x47, // FIFOTHR RXFIFO and TXFIFO thresholds.

x29, // IOCFG2 GDO2 output pin configuration.

x06, // IOCFG0 GDO0 output pin configuration. Refer to SmartRF® Studio User Manual for detailed pseudo register explanation.

x04, // PKTCTRL1 Packet automation control.

x04, // PKTCTRL0 Packet automation control.

x00, // ADDR Device address.

x64 // PKTLEN Packet length.

};

#endif

#include "CoupleProto.h"

#include "RF_1_fun.h"

#include "cc430F6137.h"

#include "crc16.h"char CProtoFlagOK = 0;char CProtoIdSelf[10] = {0};char CProtoIdPar[10] = {0};char CProtoPos = 0;char CProtoFlags = 0;char CProtoFlagFail = 0;char* CProtoGlobData;int CProtoGlobDataLength = 0;char RxBuffer[PACKET_LEN+2] = {0};char TxBuffer[PACKET_LEN]= {0};char CProtoTransmitting = 0;char CProtoReceiving = 0;char txBytesLeft = PACKET_LEN; // +1 for length bytechar txPosition = 0;char rxBytesLeft = PACKET_LEN+2; // +2 for status byteschar rxPosition = 0;char lengthByteRead = 0;short CProtoLastTime = 0;int CProtoTimeLoop = 0;char CProtoTimeOut = 0;char CProtoFlagWait = 0;char packetReceived = 0;char packetTransmit = 0;char transmitting = 0;char receiving = 0;ClientInit(void)

{initSys = 0;= 0;();= INIT_FLAG;();();();();((!initSys))&&(!ButtonSet))

{

__bis_SR_register( LPM3_bits + GIE );

__no_operation();(receiving)

{();();(CProtoFlagOK)

{();= 1;();();

}();

}

}();(initSys);

}ServerInit(void)

{initSys = 0;msgCnt = 0;= 0;();((!initSys))&&(!ButtonSet))

{(3);(receiving)

{();();(CProtoFlagOK)

{= 0;();();();();((!initSys)&&(msgCnt<3))

{();();();= 0;((!initSys)&&(!CProtoTimeOut))

{(1);(receiving)

{();( );(CProtoFlagOK)= 1;();

}(CProtoTimeOut)++;

}

}();

}= 0;

}

}();();(initSys);

}TransDataProto(unsigned char* Data_Buffer, int Data_Length)

{= Data_Buffer;= Data_Length;msgCnt = 0;= 0;= 0;++;();((!CProtoFlagOK)&&(msgCnt<3))

{();();();= 0;((!CProtoFlagOK)&&(!CProtoTimeOut))

{(3);(receiving)

{();();();

}(CProtoTimeOut)++;

}

}();(CProtoFlagOK);

}RecDataProto(unsigned char* Data_Buffer, int Data_Length)

{= Data_Length;= 0;();();(!CProtoFlagOK)

{= Data_Buffer;();();();

}(CProtoFlagOK);

}ReceiveOn(void)

{AIES &= ~BIT9;AIFG = 0;AIE |= BIT9;( RF_SRX );

__no_operation();

}ReceiveOff(void)

{AIE &= ~BIT9;AIFG &= ~BIT9;AIES &= ~BIT9;(RF_SIDLE);(RF_SFRX);

}GetSelfId(void) //Вытаскивает_id_микроконтроллера-------------------

{char *idadr;= 0x0000;= idadr + 0x0ff0;(int h=0; h<10; h++)[h] = *(idadr + h);

}GetParId(void)

{(int h=0; h<10; h++)[h] = RxBuffer[h+10];

}GetData(void)

{h = 0;(h < CProtoGlobDataLength)

{[CProtoGlobDataLength] = RxBuffer[22+h];++;

}

}FormMsg(void)

{crc;(int h=0; h<10; h++)

{[h] = CProtoIdPar[h];[h + 10] = CProtoIdSelf[h];

}[20] = CProtoFlags;[21] = CProtoPos;h=0;(h < CProtoGlobDataLength)

{[22+h] = CProtoGlobData[CProtoGlobDataLength];++;

}= CRC16(TxBuffer, 22 + CProtoGlobDataLength);[23 + CProtoGlobDataLength] = crc;[22 + CProtoGlobDataLength] = crc>>8;

}ChRecData(void)

{crc, crcIn = 0;= 0;= 0;(int h=0; h<10; h++)

{((CProtoIdSelf[h] != RxBuffer[h])||(CProtoIdPar[h] != RxBuffer[h + 10]))

{= 1;;

}

}(!CProtoFlagFail)

{= CRC16(RxBuffer, PACKET_LEN + CProtoGlobDataLength - 2);= RxBuffer[22 + CProtoGlobDataLength];= crcIn<<8;|= RxBuffer[23 + CProtoGlobDataLength];(crc != crcIn)

{[21] = ERR_FLAG;();();();= 1;

}

{(RxBuffer[20] & 0x30)

{0x00:((RxBuffer[20] == (CProtoPos + 1)) || (RxBuffer[20] == CProtoPos))

{|= ACK_FLAG;(RxBuffer[20] == (CProtoPos + 1))++;= 1;

}

{= 1;

};0x20:(RxBuffer[20] == (CProtoPos - 1))

{();();();= 1;

}if (RxBuffer[20] == CProtoPos)

{= ACK_FLAG;= 1;

}

{CProtoFlagFail = 1;};0x10:= 1;;:= 1;;

}

}

}

}ChRecDataInit(void)

{crc, crcIn = 0;= 0;= 0;(RxBuffer[20] & 0x80)

{= CRC16(RxBuffer, PACKET_LEN + CProtoGlobDataLength - 2);= RxBuffer[22 + CProtoGlobDataLength];= crcIn<<8;|= RxBuffer[23 + CProtoGlobDataLength];(crc != crcIn)

{CProtoFlagFail = 1;}

{++;= 1;

}

}if ((RxBuffer[21] == (CProtoPos + 1)) || (RxBuffer[21] == CProtoPos))

{(int h=0; h<10; h++)

{(CProtoIdSelf[h] != RxBuffer[h])

{= 1;;

}

}(!CProtoFlagFail)

{= CRC16(RxBuffer, PACKET_LEN + CProtoGlobDataLength - 2);= RxBuffer[22 + CProtoGlobDataLength];= crcIn<<8;|= RxBuffer[23 + CProtoGlobDataLength];(crc != crcIn)

{[21] = ERR_FLAG;();();();= 1;

}

{(RxBuffer[21] == (CProtoPos + 1))++;= ACK_FLAG;

}

}

}

}WaitSec(unsigned int Time)

{(CProtoFlagWait == 2)

{CTL &= ~(MC_3);= 1;CCR1 = CProtoLastTime;(TA0CCR1 < 50)CCR1 = 50;CCTL1 |= CCIE;CTL |= MC_2 + TACLR;

__bis_SR_register(LPM3_bits + GIE);

__no_operation();CCTL2 &= ~(CCIE);

}(!CProtoFlagWait)

{= Time;= 1;= 1;

}((CProtoTimeLoop) && (CProtoTimeOut))

{= 0;-;CTL &= ~(MC_3);CCR1 = 32768;CCTL1 |= CCIE;CTL |= MC_2 + TACLR;

__bis_SR_register(LPM3_bits + GIE);

__no_operation();

CCTL2 &= ~(CCIE);

}(CProtoTimeOut)

{= 0;

}

{= 2;= TA0CCR2;

}

}StopWaitTimer(void)

{CCR2 = 32768;CCTL2 &= ~(CCIE);= 0;= 0;= 0;

}ReceivePacket(void)

{= PACKET_LEN + CProtoGlobDataLength + 2;// Set maximum packet leng + 2 for appended bytes= 0;= 0;

__delay_cycles(2800); // Wait for bytes to fill in RX FIFOCTL &= ~(MC_3);CCR1 = RX_TIMER_PERIOD; // x cycles * 1/32768 = y usCCTL1 |= CCIE;CTL |= MC_2 + TACLR; // Start the timer- continuous mode

__bis_SR_register(LPM3_bits + GIE);

__no_operation();

CCR1 = RX_TIMER_PERIOD;CCTL1 &= ~(CCIE);

//TA0CTL &= ~(MC_3); // Turn off timer

__no_operation();

}TransmitPacket(void)

{OUT |= BIT6; // Pulse LED during Transmit= PACKET_LEN + CProtoGlobDataLength;= 0;= 0;= 1;( RF_STX ); // Strobe STXCTL &= ~(MC_3);CCR1 = TX_TIMER_PERIOD; // x cycles * 1/32768 = y usCCTL1 |= CCIE;CTL |= MC_2 + TACLR; // Start the timer- continuous mode

__bis_SR_register(LPM3_bits + GIE);

__no_operation();CCR1 = TX_TIMER_PERIOD; // x cycles * 1/32768 = y usCCTL1 &= ~(CCIE);

// TA0CTL &= ~(MC_3); // Turn off timerOUT &= ~BIT6; // Turn off LED after Transmit

}pktRxHandler(void) {char RxStatus;char bytesInFifo;= Strobe(RF_SNOP);(RxStatus & CC430_STATE_MASK)

{CC430_STATE_RX:(bytesInFifo = MIN(rxBytesLeft, RxStatus & CC430_FIFO_BYTES_AVAILABLE_MASK))

{-= bytesInFifo;(bytesInFifo--) {[rxPosition] = ReadSingleReg(RXFIFO);++;

}(!rxBytesLeft){= 1;= 0;= 0;();OUT ^= BIT7;

}

};:(!packetReceived)

{= 1;

}= 0;= 0;();;

}

}pktTxHandler(void) {char freeSpaceInFifo;char TxStatus;

= Strobe(RF_SNOP);(TxStatus & CC430_STATE_MASK) {CC430_STATE_TX:(freeSpaceInFifo = MIN(txBytesLeft, TxStatus & CC430_FIFO_BYTES_AVAILABLE_MASK))

{-= freeSpaceInFifo;(freeSpaceInFifo--)

{(TXFIFO, TxBuffer[txPosition]);++;

}(!txBytesLeft)

{AIES |= BIT9; // End-of-packet TX interruptAIFG &= ~BIT9; // clear RFIFG9(!(RF1AIFG & BIT9)); // poll RFIFG9 for TX end-of-packetAIES &= ~BIT9; // End-of-packet TX interruptAIFG &= ~BIT9; // clear RFIFG9= 0;= 1;

}

};CC430_STATE_TX_UNDERFLOW:(RF_SFTX); // Flush the TX FIFO

__no_operation();:(!packetTransmit)= 1;(transmitting) {((TxStatus & CC430_STATE_MASK) == CC430_STATE_IDLE) {= 0;

}

};

}

}char chCProtoFlagWait(void)

{(CProtoFlagWait);

}setCProtoTimeOut(unsigned char flag)

{= flag;

}char chPacketReceived(void)

{(packetReceived);

}char chPacketTransmit(void)

{(packetTransmit);

}char chReceiving(void)

{(receiving);

}char chTransmitting(void)

{(transmitting);

}setReceiving(unsigned char flag)

{= flag;

}setTransmitting(unsigned char flag)

{= flag;

}

#include "cc430f6137.h"

#include "ADC.h"InitAdc(void)

{SEL |= BIT3;CTL0 = ADC12ON+ADC12SHT02; // Turn on ADC12, set sampling timeCTL1 = ADC12SHP; // Use sampling timerMCTL0 = ADC12SREF_1; // Vr+=Vref+ and Vr-=AVss

}TakeVot(int maxVolt)

{CTL0 |= ADC12SC;(!(ADC12IFG & BIT0));Voltage = (int)(((long)ADC12MEM0*maxVolt*100)/4095);(Voltage);

}

#include "crc16.h"unsigned short CRC16_Table[256] = {

x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,

x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,

x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,

x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,

x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,

xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,

x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,

xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,

x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,

xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,

x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,

xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,

x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,

xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,

x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,

xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,

x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,

x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,

x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,

x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,

xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,

x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,

xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,

x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,

xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,

x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,

xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,

x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,

xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,

x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,

xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,

x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0

};short CRC16(unsigned char *BufI, unsigned short LenB)

{short crc, i0;= 0xFFFF;                   i0 = LenB;(i0--)= (crc << 8) ^ CRC16_Table[(crc >> 8) ^ *BufI++];(crc);

}

#include "LCD.h"unsigned int ascii_to_lcd_digit_e [] =

{

,/*DW 0               ; displays "SP" */

,/*DW 0               ; displays "!" */

,/*DW 0               ; displays " " "*/

,/*DW 0               ; displays "#" */

,/*DW 0               ; displays "$" */

,/*DW 0               ; displays "%" */

,/*DW 0               ; displays "&" */

,/*DW 0               ; displays " ' "*/

,/*DW 0               ; displays "(" */

,/*DW 0               ; displays ")" */

,/*DW 0               ; displays "*" */

,/*DW 0               ; displays "+" */

,/*DW 0               ; displays "," */__,/*DW g                ; displays "-" */

,/*DW 0               ; displays "." */

,/*DW 0               ; displays "/" */

/*30*/ a__+b__+c__+d__+e__+f__,/*DW a+b+c+d+e+f      ; displays "0" */__+c__,/*DW b+c             ; displays "1" */__+b__+g__+e__+d__,/*DW a+b+g+e+d     ; displays "2" */__+b__+c__+d__+g__,/*DW a+b+c+d+g       ; displays "3" */__+c__+f__+g__,/*DW b+c+f+g               ; displays "4" */__+c__+d__+f__+g__,/*DW a+c+d+f+g      ; displays "5" */__+c__+d__+e__+f__+g__,/*DW a+c+d+e+f+g      ; displays "6" */__+b__+c__,/*DW a+b+c                   ; displays "7" */__+b__+c__+d__+e__+f__+g__,/*DW a+b+c+d+e+f+g ; displays "8" */__+b__+c__+d__+f__+g__,/*DW a+b+c+d+f+g         ; displays "9" */

,/*DW colon                  ; displays ":" */

,/*DW 0      ; displays ";" */

,/*DW 0 ; displays "<" */

,/*DW 0 ; displays "=" */

,/*DW 0 ; displays ">" */

,/*DW 0 ; displays "?" */

,/*DW 0 ; displays "@" */

/*41*/ a__+b__+c__+e__+f__+g__,/*DW a+b+c+e+f+g ; displays "A" */

,/*DW 0 ; displays "B" */__+d__+e__+f__,/*DW a+d+e+f ; displays "C" */

,/*DW 0 ; displays "D" */__+d__+e__+f__+g__,/*DW a+d+e+f+g ; displays "E" */__+e__+f__+g__,/*DW a+e+f+g ; displays "F" */

,/*DW 0 ; displays "G" */__+c__+e__+f__+g__,/*DW b+c+e+f+g ; displays "H" */__+c__,/*DW b+c      ; displays "I" */__+c__+d__+e__,/*DW 0 ; displays "J" */

,/*DW 0 ; displays "K" */__+e__+f__,/*DW d+e+f ; displays "L" */

,/*DW 0 ; displays "M" */

,/*DW 0 ; displays "N" */__+b__+c__+d__+e__+f__,/*DW a+b+c+d+e+f        ; displays "O" big*/

/*50*/ a__+b__+e__+f__+g__,/*DW a+b+e+f+g ; displays "P" */

,/*DW 0 ; displays "Q" */

,/*DW 0 ; displays "R" */__+c__+d__+f__+g__,/*DW a+c+d+f+g ; displays "S" */

,/*DW 0               ; displays "T" */__+d__+e__+f__+b__,/*DW c+d+e+f+b ; displays "U" */

,/*DW 0               ; displays "V" */

,/*DW 0               ; displays "W" */

,/*DW 0 ; displays "X" */__+d__+f__+g__+b__,/*DW e+f+g+b ; displays "Y" */__+b__+e__+g__+d__,/*DW a+b+e+g+d ; displays "Z" */__+f__+a__+d__,/*DW e+f+a+d ; displays "[" */

,/*DW 0 ; displays "\" */__+d__+b__+c__,/*DW a+d+b+c ; displays "]" */

,/*DW 0 ; displays "^" */__,/*DW d           ; displays "_" */

/*60*/ 0,/*DW 0             ; displays " ' " */

,/*DW 0 ; displays "a" */__+d__+e__+f__+g__,/*DW c+d+e+f+g ; displays "b" */__+d__+e__,/*DW g+d+e ; displays "c" */__+c__+d__+e__+g__,/*DW b+c+d+e+g ; displays "d" */

,/*DW 0 ; displays "e" */

,/*DW 0 ; displays "f" */

,/*DW 0 ; displays "g" */__+e__+f__+g__,/*DW c+e+f+g ; displays "h" */__,/*DW c ; displays "i" */__+c__+d__+e__,/*DW b+c+d+e ; displays "j" */

,/*DW 0 ; displays "k" */__+c__,/*DW b+c ; displays "l" */

,/*DW 0 ; displays "m" */__+c__+g__,/*DW e+c+g ; displays "n" */__+d__+e__+g__,/*DW c+d+e+g              ; displays "o" */

,/*DW 0 ; displays "p" */__+b__+c__+f__+g__,/*DW a+b+c+f+g ; displays "q" */__+g__,/*DW e+g ; displays "r" */

,/*DW 0 ; displays "s" */__+e__+f__+g__,/*DW 0                ; displays "t" */__+d__+e__ //,/*DW c+d+e ; displays "u" */

// 0,/*DW 0           ; displays "v" */

// 0,/*DW 0           ; displays "w" */

// 0,/*DW 0 ; displays "x" */

// 0,/*DW 0 ; displays "y" */

// 0,/*DW 0 ; displays "z" */

//       0,/*DW 0 ; displays "{" */

// e__+f__,/*DW e+f ; displays "|" */

// 0,/*DW 0 ; displays "}" */

// 0/*DW 0 */

};Config_LCD_Driver (void)

{= ~LCDON;= (LCDDIV2 + LCDDIV3) | (LCDPRE0 + LCDPRE1) | LCD4MUX;= 0xFFFF;= 0x00FF;|= LCDON;

}ClearDisplayDriverMemory(void)

{i;*LCD = LCDMEM;(i=0; i<12; i++)

{[i] = 0;

}

}Init_LCD (void)

{_LCD_Driver();();

}Load_LCD_Memory(uchar* Video_Buffer)

{();int temp;*mem;= LCDMEM;(unsigned char i=0; i<8; i++)

{= ascii_to_lcd_digit_e [Video_Buffer[i]-0x20];

*mem = (unsigned char)temp;++;= temp>>8;

*mem = (unsigned char)temp;++;= ascii_to_lcd_digit_e [Video_Buffer[i]-0x20];= temp<<4;

*mem |= (unsigned char)temp;++;= temp>>8;

*mem |= (unsigned char)temp;++;

}

}

#include "msp430.h"

#include "RF_coreMod.h"

#define _HAL_PMM_DISABLE_SVML_

#define _HAL_PMM_DISABLE_SVSL_

#define _HAL_PMM_DISABLE_FULL_PERFORMANCE_

#ifdef _HAL_PMM_DISABLE_SVML_

#define _HAL_PMM_SVMLE SVMLE

#else

#define _HAL_PMM_SVMLE 0

#endif

#ifdef _HAL_PMM_DISABLE_SVSL_

#define _HAL_PMM_SVSLE SVSLE

#else

#define _HAL_PMM_SVSLE 0

#endif

#ifdef _HAL_PMM_DISABLE_FULL_PERFORMANCE_

#define _HAL_PMM_SVSFP SVSLFP

#else

#define _HAL_PMM_SVSFP 0

#endifint SetVCore (unsigned char level)

{int actlevel;int status = 0;&= PMMCOREV_3; // Set Mask for Max. level= (PMMCTL0 & PMMCOREV_3); // Get actual VCore(((level != actlevel) && (status == 0)) || (level < actlevel))

{(level > actlevel)= SetVCoreUp(++actlevel);= SetVCoreDown(--actlevel);

}status;

}int SetVCoreUp (unsigned char level)

{int PMMRIE_backup,SVSMHCTL_backup;_H = 0xA5;_backup = PMMRIE;&= ~(SVSMHDLYIE | SVSMLDLYIE | SVMLVLRIE | SVMHVLRIE | SVMHVLRPE);_backup = SVSMHCTL;&= ~(SVMHIFG | SVSMHDLYIFG);= SVMHE | SVMHFP | (SVSMHRRL0 * level);((PMMIFG & SVSMHDLYIFG) == 0);&= ~_HAL_PMM_SVSFP ;((PMMIFG & SVMHIFG) == SVMHIFG){                      //-> Vcc is to low for a Vcore increase&= ~SVSMHDLYIFG;= SVSMHCTL_backup;((PMMIFG & SVSMHDLYIFG) == 0);&= ~(SVMHVLRIFG | SVMHIFG | SVSMHDLYIFG | SVMLVLRIFG | SVMLIFG | SVSMLDLYIFG);= PMMRIE_backup;_H = 0x00;PMM_STATUS_ERROR; // return: voltage not set

}a Vcore increase|= SVSHE | (SVSHRVL0 * level);= SVMLE | SVMLFP | (SVSMLRRL0 * level);((PMMIFG & SVSMLDLYIFG) == 0);&= ~(SVMLVLRIFG | SVMLIFG);_L = PMMCOREV0 * level;(PMMIFG & SVMLIFG)((PMMIFG & SVMLVLRIFG) == 0);&= ~SVSMLDLYIFG;|= SVSLE | (SVSLRVL0 * level);((PMMIFG & SVSMLDLYIFG) == 0);&= ~(_HAL_PMM_DISABLE_SVSLHAL_PMM_DISABLE_SVMLHAL_PMM_SVSFP );&= ~(SVMHVLRIFG | SVMHIFG | SVSMHDLYIFG | SVMLVLRIFG | SVMLIFG | SVSMLDLYIFG);= PMMRIE_backup;_H = 0x00;PMM_STATUS_OK; // return: OK

}int SetVCoreDown (unsigned char level)

{int PMMRIE_backup;_H = 0xA5;_backup = PMMRIE;&= ~(SVSMHDLYIE | SVSMLDLYIE | SVMLVLRIE | SVMHVLRIE | SVMHVLRPE);&= ~(SVMHIFG | SVSMHDLYIFG | SVMLIFG | SVSMLDLYIFG);= SVMHE | SVMHFP | (SVSMHRRL0 * level);= SVMLE | SVMLFP | (SVSMLRRL0 * level);((PMMIFG & SVSMHDLYIFG) == 0 || (PMMIFG & SVSMLDLYIFG) == 0);_L = PMMCOREV0 * level;&= ~(SVSHIFG | SVSMHDLYIFG | SVSLIFG | SVSMLDLYIFG);|= SVSHE | SVSHFP | (SVSHRVL0 * level);|= SVSLE | SVSLFP | (SVSLRVL0 * level);((PMMIFG & SVSMHDLYIFG) == 0 || (PMMIFG & SVSMLDLYIFG) == 0);&= ~_HAL_PMM_SVSFP;&= ~ (_HAL_PMM_DISABLE_SVSLHAL_PMM_DISABLE_SVMLHAL_PMM_SVSFP );&= ~(SVMHVLRIFG | SVMHIFG | SVSMHDLYIFG | SVMLVLRIFG | SVMLIFG | SVSMLDLYIFG);= PMMRIE_backup;_H = 0x00;((PMMIFG & SVMHIFG) == SVMHIFG)PMM_STATUS_ERROR;                                                    // Highside is still to low for the adjusted VCore Levelreturn PMM_STATUS_OK;                                                       // Return: OK}

#include "RF_1_fun.h"

#include "cc430F6137.h"char Strobe(unsigned char strobe)

{char statusByte = 0;int gdo_state;((strobe == 0xBD) || ((strobe >= RF_SRES) && (strobe <= RF_SNOP)))

{AIFCTL1 &= ~(RFSTATIFG);( !(RF1AIFCTL1 & RFINSTRIFG));((strobe > RF_SRES) && (strobe < RF_SNOP))

{_state = ReadSingleReg(IOCFG2); // buffer IOCFG2 state(IOCFG2, 0x29); // chip-ready to GDO2AINSTRB = strobe;( (RF1AIN&0x04)== 0x04 ) // chip at sleep mode

{( (strobe == RF_SXOFF) || (strobe == RF_SPWD) || (strobe == RF_SWOR) ) { }

{((RF1AIN&0x04)== 0x04); // chip-ready ?

// Delay for ~810usec at 1.05MHz CPU clock, see erratum RF1A7

__delay_cycles(850);

}

}(IOCFG2, gdo_state); // restore IOCFG2 setting( !(RF1AIFCTL1 & RFSTATIFG) );

}                 // chip active mode (SRES)

{AINSTRB = strobe;

}= RF1ASTATB;

}statusByte;

}char ReadSingleReg(unsigned char addr)

{char data_out;((addr <= 0x2E) || (addr == 0x3E))AINSTR1B = (addr | RF_SNGLREGRD);AINSTR1B = (addr | RF_STATREGRD);(!(RF1AIFCTL1 & RFDOUTIFG) );_out = RF1ADOUTB; // Read data and clears the RFDOUTIFGdata_out;

{(!(RF1AIFCTL1 & RFINSTRIFG)); // Wait for the Radio to be ready for next instructionAINSTRB = (addr | RF_SNGLREGWR);      // Send address + InstructionADINB = value;                             // Write data in

__no_operation();

}ReadBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)

{int i;(count > 0)

{(!(RF1AIFCTL1 & RFINSTRIFG));AINSTR1B = (addr | RF_REGRD); for (i = 0; i < (count-1); i++)

{(!(RFDOUTIFG&RF1AIFCTL1));[i] = RF1ADOUT1B;

}[count-1] = RF1ADOUT0B;

}

}WriteBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)

{char i;(count > 0)

{(!(RF1AIFCTL1 & RFINSTRIFG));AINSTRW = ((addr | RF_REGWR)<<8 ) + buffer[0];(i = 1; i < count; i++)

{ADINB = buffer[i];(!(RFDINIFG & RF1AIFCTL1));

}= RF1ADOUTB;

}

}ResetRadioCore (void)

{(RF_SRES);(RF_SNOP);

}WriteRfSettings(RF_SETTINGS *pRfSettings) {(FSCTRL1, pRfSettings->fsctrl1);(FSCTRL0, pRfSettings->fsctrl0);(FREQ2, pRfSettings->freq2);(FREQ1, pRfSettings->freq1);(FREQ0, pRfSettings->freq0);(MDMCFG4, pRfSettings->mdmcfg4);(MDMCFG3, pRfSettings->mdmcfg3);(MDMCFG2, pRfSettings->mdmcfg2);(MDMCFG1, pRfSettings->mdmcfg1);(MDMCFG0, pRfSettings->mdmcfg0);(CHANNR, pRfSettings->channr);(DEVIATN, pRfSettings->deviatn);(FREND1, pRfSettings->frend1);(FREND0, pRfSettings->frend0);(MCSM0 , pRfSettings->mcsm0);(FOCCFG, pRfSettings->foccfg);(BSCFG, pRfSettings->bscfg);(AGCCTRL2, pRfSettings->agcctrl2);(AGCCTRL1, pRfSettings->agcctrl1);(AGCCTRL0, pRfSettings->agcctrl0);(FSCAL3, pRfSettings->fscal3);(FSCAL2, pRfSettings->fscal2);(FSCAL1, pRfSettings->fscal1);(FSCAL0, pRfSettings->fscal0);(FSTEST, pRfSettings->fstest);(TEST2, pRfSettings->test2);(TEST1, pRfSettings->test1);(TEST0, pRfSettings->test0);(FIFOTHR, pRfSettings->fifothr);(IOCFG2, pRfSettings->iocfg2);(IOCFG0, pRfSettings->iocfg0);(PKTCTRL1, pRfSettings->pktctrl1);(PKTCTRL0, pRfSettings->pktctrl0);(ADDR, pRfSettings->addr);(PKTLEN, pRfSettings->pktlen);

}WriteSinglePATable(unsigned char value)

{( !(RF1AIFCTL1 & RFINSTRIFG));AINSTRW = 0x3E00 + value;( !(RF1AIFCTL1 & RFINSTRIFG));AINSTRB = RF_SNOP;WriteBurstPATable(unsigned char *buffer, unsigned char count)

{char i = 0;( !(RF1AIFCTL1 & RFINSTRIFG));AINSTRW = 0x7E00 + buffer[i];(i = 1; i < count; i++)

{ADINB = buffer[i];(!(RFDINIFG & RF1AIFCTL1));

}= RF1ADOUTB;( !(RF1AIFCTL1 & RFINSTRIFG));AINSTRB = RF_SNOP; }LFXT_Start(uint16_t xtdrive)

{_L |= XT1DRIVE1_L+XT1DRIVE0_L; startup(SFRIFG1 & OFIFG) {&= ~(DCOFFG+XT1LFOFFG+XT1HFOFFG+XT2OFFG);&= ~OFIFG; }= (UCSCTL6 & ~(XT1DRIVE_3)) |(xtdrive); }

Похожие работы на - Разработка автономного аппаратно-программного комплекса средств для подсистемы управления 'Роботом-дозиметристом'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!