Лабораторная работа № 2. Изучение микроконтроллера MSP430. Аналоговый ввод-вывод и коммуникация

advertisement
Лабораторная работа № 2.
Изучение микроконтроллера MSP430. Аналоговый ввод-вывод и
коммуникация
1. Цель работы
Изучение основных средств микроконтроллера MSP430 для ввода-вывода
аналоговых сигналов. Изучение средств микроконтроллера MSP430 для обмена
данными по последовательному интерфейсу. Изучение основных приемов
программирования микроконтроллера MSP430 для операций ввода-вывода
аналоговых сигналов и обмена данными по последовательному интерфейсу.
2. Задачи
Создание простых программ управления аналоговыми линиями порта
ввода-вывода для отладочного модуля MSP430 LaunchPad с помощью среды
программирования Energia. Создание программ обмена данными между
отладочным модулем MSP430 LaunchPad и персональным компьютером по
последовательному интерфейсу. Прошивка микроконтроллера и проверка работы
программ.
3. Теоретическая часть
3.1. Модули ввода-вывода аналоговых сигналов в микроконтроллерах
MSP430
В микроконтроллерах MSP430 для ввода и вывода аналоговых сигналов
используются следующие функциональные модули [3]: таймер, модуль
операционного усилителя, модуль аналогового компаратора, модуль аналогоцифрового преобразователя (АЦП), модуль цифро-аналогового преобразователя
(ЦАП).
3.1.1. Таймер.
Микроконтроллер MSP430 может иметь в своем составе один или два
таймера. Они обозначаются как Таймер A и Таймер B. Таймер А реализован во
всех микроконтроллерах семейства MSP430x2xx.
Таймер A представляет собой 16-битный таймер/счётчик с тремя
регистрами захвата/сравнения. Этот таймер может обеспечить несколько каналов
захвата/сравнения, генерации сигналов с ШИМ и формирования временных
интервалов. Кроме того, Таймер А имеет развитую поддержку прерываний.
Прерывания могут генерироваться как регистром счётчика таймера (при его
переполнении), так и каждым из регистров захвата/сравнения. Таймер А имеет
следующие особенности:
 асинхронный 16-битный таймер/счётчик, имеющий четыре режима работы;
 возможность выбора и конфигурирования источника тактового сигнала;
 два или три конфигурируемых регистра захвата/сравнения;
 конфигурируемые выходы с возможностью генерации ШИМ-сигналов;
 асинхронное защёлкивание входных и выходных сигналов;
 регистр вектора прерывания для быстрого декодирования всех прерываний
таймера.
Регистр 16-битного таймера/счётчика TAR инкрементируется или
декрементируется (в зависимости от режима работы) по нарастающему фронту
импульсов тактового сигнала. Регистр TAR доступен как для чтения, так и для
записи. Кроме того, при переполнении этого регистра таймер может генерировать
прерывание. Для тактирования таймера могут использоваться системные
тактовые сигналы ACLK и SMCLK или же внешние сигналы. Источник тактового
сигнала задаётся двумя битами регистра управления таймера TACTL. Выбранный
сигнал поступает на таймер через делитель, коэффициент деления которого (1, 2,
4 или 8) также настраивается определенными битами регистра TACTL.
Таймер имеет четыре режима работы:
 останов – таймер остановлен;
 прямой счёт – таймер циклически считает импульсы тактового сигнала от
нуля до значения, записанного в регистре TACCR0 (регистр
захвата/сравнения 0 Таймера A);
 непрерывный счёт - таймер циклически считает от нуля до значения
0FFFFh;
 реверсивный счёт - таймер циклически считает от нуля до значения,
записанного в регистре TACCR0, а затем в обратном направлении до нуля.
Режим прямого счёта используется в том случае, если период таймера
должен быть отличным от 0FFFFh. В этом режиме таймер циклически считает в
прямом направлении до тех пор, пока его значение не станет равным
содержимому регистра сравнения TACCR0, определяющего период счёта, как
показано на рис. 2.1. Величина периода в тактах равна TACCR0 + 1. Когда
значение таймера достигает величины, записанной в регистре TACCR0, таймер
сбрасывается и счёт начинается с нуля.
Рис. 2.1. Режим прямого счета
Флаг
прерывания
CCIFG,
соответствующий
регистру
TACCR0,
устанавливается при достижении таймером в процессе счёта значения,
записанного в этом регистре. Флаг прерывания TAIFG устанавливается при счёте
таймера от значения, содержащегося в регистре TACCR0, до нуля (рис. 2.2).
Рис. 2.2. Установка флагов прерываний в режиме прямого счета
В режиме непрерывного счёта таймер циклически считает в прямом
направлении от нуля до значения 0FFFFh, как показано на рис. 2.3.
Рис. 2.3. Режим непрерывного счета
Флаг прерывания TAIFG устанавливается при счёте таймера от значения
0FFFFh до нуля (рис. 2.4).
Рис. 2.4. Установка флага прерывания в режиме непрерывного счета
Режим реверсивного счёта используется в случае, если период таймера
должен быть отличным от 0FFFFh и если необходимо генерировать
симметричные импульсы. В данном режиме таймер циклически считает в прямом
направлении до тех пор, пока его значение не станет равным содержимому
регистра сравнения TACCR0, а затем в обратном направлении до нуля, как
показано на рис. 2.5. При этом период равен удвоенному значению TACCR0.
Рис. 2.5. Режим реверсивного счета
Направление счёта фиксируется, что позволяет после останова таймера и
последующего его запуска продолжать счёт в том же направлении, что и до
останова.
В режиме реверсивного счёта флаг прерываний CCIFG для регистра
TACCR0 и флаг TAIFG устанавливаются только один раз за период, причём
интервал между установкой этих флагов составляет 1/2 периода таймера. Флаг
CCIFG устанавливается при счёте таймера от значения (TACCR0 – 1) до TACCR0,
а флаг TAIFG — при счёте с 0001h до 0000h (рис. 2.6).
Рис. 2.6. Установка флагов прерываний в режиме реверсивного счета
В Таймере A в зависимости от модели микроконтроллера имеется два или
три идентичных блока захвата/сравнения. Любой из блоков может использоваться
для захвата значения таймера и формирования временных интервалов. Режим
захвата используется для регистрации временных событий. Он может быть
использован для вычисления скорости или измерения временных параметров.
Входы захвата CCIxA и CCIxB подключены к выводам микроконтроллера или же к
его внутренним шинам. При выполнении операциизахвата:
 значение таймера копируется в соответствующий регистр TACCRx;
 устанавливается флаг прерывания CCIFG.
На входы CCIxA и CCIxB могут поступать различные сигналы, в
зависимости от модели микроконтроллера.
Сигнал захвата может быть асинхронным по отношению к тактовому сигналу
таймера, что приведёт к возникновению «гонок». Для устранения этого эффекта
возможна синхронизация операции захвата с тактовым сигналом таймера.
Синхронизация сигнала захвата показана на рис. 2.7.
Рис. 2.7. Формирование сигнала захвата
Режим сравнения используется для генерации сигналов с широтноимпульсной модуляцией или для формирования прерываний с заданной
периодичностью. При достижении таймером в процессе счёта значения,
записанного в регистре TACCRx:
 устанавливается флаг прерывания CCIFG;
 формируется внутренний сигнал EQUx = 1;
 сигнал EQUx воздействует на выход в соответствии с режимом работы
модуля вывода;
 значение входного сигнала CCI защёлкивается в бите SCCI.
Каждый блок захвата/сравнения содержит модуль вывода. Этот модуль
используется для генерации различных сигналов, в том числе сигналов с ШИМ.
Каждый модуль вывода имеет восемь режимов работы, которые используются
для формирования различных сигналов в соответствии с внутренними сигналами
EQU0 и EQUx. Формирование выходного сигнала OUTx модуля вывода зависит от
режима работы таймера. Например, если таймер работает в режиме
непрерывного счета, то Сигнал OUTx изменяется при достижении таймером в
процессе счёта значений, записанных в регистрах TACCRx и TACCR0. На рис. 2.8
показано формирование выходного сигнала в различных режимах работы модуля
вывода с использованием регистров захвата/сравнения TACCR0 и TACCR1.
Рис. 2.8. Формирование выходного сигнала – таймер в режиме
непрерывного счета
Таймер B представляет собой 16-битный таймер/счётчик с тремя или семью
регистрами захвата/сравнения. Этот таймер может обеспечить несколько каналов
захвата/сравнения, генерации сигналов с ШИМ и формирования временных
интервалов. Кроме того, Таймер B имеет развитую поддержку прерываний.
Прерывания могут генерироваться как регистром счётчика таймера (при его
переполнении), так и каждым из регистров захвата/сравнения. Таймер B имеет
следующие особенности:
 асинхронный 16-битный таймер/счётчик изменяемой разрядности (8, 10, 12
или 16 бит), имеющий четыре режима работы;





возможность выбора и конфигурирования источника тактового сигнала;
три или семь конфигурируемых регистров захвата/сравнения;
конфигурируемые выходы с возможностью генерации ШИМ-сигналов;
регистры-защёлки сравнения с двойной буферизацией и синхронизуемой
загрузкой;
регистр вектора прерывания для быстрого декодирования всех прерываний
таймера.
3.1.2. Модуль операционного усилителя.
Модуль операционного усилителя OA представляет собой операционный
усилитель общего назначения и предназначен для обработки внешнего
аналогового сигнала для последующего аналого-цифрового преобразования.
Микроконтроллеры MSP430 могут иметь в своем составе несколько
модулей ОА. Конфигурация модуля ОА определяется установкой битов регистра
OAxCTL0, где x – порядковый номер модуля.
Модуль OA имеет следующие особенности:
 однополярное питание, малый потребляемый ток;
 выходной сигнал с размахом, равным напряжению питания (выход rail-torail);
 программируемое соотношение между временем установления и
потреблением;
 программное конфигурирование;
 программно-конфигурируемый резистивный делитель в цепи обратной
связи для реализации усилителей с программируемым коэффициентом
усиления (PGA).
Конфигурирование
модуля
OA
осуществляется
пользовательской
программой. Он может быть сконфигурирован как инвертирующий или
неинвертирующий усилитель, а также соединён с другими модулями OA для
реализации различных вариантов дифференциальных усилителей. Модуль OA
может использоваться для реализации следующих восьми различных вариантов
дифференциальных усилителей.
Операционный усилитель общего назначения. В этом режиме внутренний
делитель обратной связи отключён от ОУ. Входные сигналы поступают на
инвертирующий и неинвертирующий входы ОУ. Выход ОУ подключается к одному
из входов модуля 12-разрядного АЦП ADC12.
Буфер с единичным усилением для дифференциального усилителя. В этом
режиме выход ОУ соединён с его инвертирующим входом, обеспечивая
коэффициент усиления, равный единице. Входной сигнал подается на
неинвертирующий вход. Подача внешних сигналов на инвертирующий вход
невозможна. Выход ОУ подключается к одному из выводов внутренней
резистивной цепочки. Этот режим используется только при реализации
дифференциального усилителя на трёх ОУ.
Компаратор. В этом режиме выход ОУ отключён от резистивной цепочки.
Резистивная цепочка используется для подачи на инвертирующий вход ОУ
порогового напряжения. При этом образуется компаратор с программируемым
порогом. Входной сигнал подается на неинвертирующий вход ОУ. Можно ввести в
схему гистерезис, добавив внешний резистор положительной обратной связи.
Подача внешних сигналов на инвертирующий вход невозможна. Выход ОУ
подключается к одному из входов модуля ADC12.
Неинвертирующий усилитель. В этом режиме выход ОУ через
резистивную цепочку подключён к инвертирующему входу ОУ, образуя
неинвертирующий усилитель с коэффициентом усиления [1 + Ko]. Коэффициент
Ko программируется. Входной сигнал подается на неинвертирующий вход. Подача
внешних сигналов на инвертирующий вход невозможна. Выход ОУ подключается к
одному из входов модуля ADC12.
Многокаскадный неинвертирующий усилитель. В этом режиме
допускается последовательное соединение двух или трёх модулей OA,
работающих как неинвертирующие усилители. Выходы ОУ модулей
подключаются к входам модуля ADC12.
Инвертирующий усилитель. В этом режиме резистивная цепочка
включается между источником входного сигнала, инвертирующим входом ОУ и
выходом ОУ. Так образуется неинвертирующий усилитель с коэффициентом
усиления минус Ko. Коэффициент Ko программируется. Выход ОУ подключается к
одному из входов модуля ADC12.
Дифференциальный
усилитель.
В
этом
режиме
модули
OA
микроконтроллера соединяются друг с другом, образуя дифференциальный
усилитель на двух или трёх ОУ. Выход ОУ подключается к одному из входов
модуля ADC12.
3.1.3. Модуль аналогового компаратора.
Модуль Comparator_A+ представляет собой аналоговый компаратор
напряжения. Он обеспечивает выполнение точных аналого-цифровых
преобразований методом прямого интегрирования, контроль напряжения питания
и мониторинг внешних аналоговых сигналов.
Модуль Comparator_A+ имеет следующие особенности:
 мультиплексоры на обоих (инвертирующем и неинвертирующем) входах
модуля;
 программно подключаемый RC-фильтр на выходе компаратора;
 возможность подключения выхода компаратора к входу захвата Таймера A;
 программное управление входным буфером порта;
 поддержка прерываний;
 конфигурируемый генератор опорного напряжения;
 возможность выключения компаратора и генератора опорного напряжения;
 входной мультиплексор компаратора.
Конфигурирование
модуля
Comparator_A+
осуществляется
пользовательской программой.
Компаратор сравнивает аналоговые напряжения на неинвертирующем (+) и
инвертирующем (–) входах. Если напряжение на неинвертирующем входе
больше, чем на инвертирующем, то на выходе компаратора CAOUT появляется
сигнал ВЫСОКОГО уровня. Компаратор может быть включен или выключен
посредством определенного управляющего бита. При выключенном компараторе
на выходе CAOUT постоянно присутствует НИЗКИЙ уровень.
Входные аналоговые ключи используются для подключения или
отключения входов модуля к/от соответствующих выводов микроконтроллера.
Оба входа компаратора конфигурируются независимо друг от друга. Возможно:
 подавать внешние сигналы на неинвертирующий и инвертирующий входы
компаратора;
 выводить напряжение от внутреннего генератора опорного напряжения на
соответствующий вывод микроконтроллера.
Если необходимо, то к выходу компаратора может быть подключён
внутренний фильтр. Если разница напряжений на входах компаратора достаточно
мала, то на его выходе всегда начинают генерироваться колебания. Эта
генерация (рис. 2.9) вызывается внутренними и внешними паразитными связями,
а также перекрёстными помехами между сигнальными линиями, линиями питания
и другими элементами системы. Колебания на выходе компаратора снижают
точность и разрешающую способность результата сравнения. Использование
фильтра может уменьшить ошибки, вызванные генерацией на выходе
компаратора.
Рис. 2.9. Влияние RC-фильтра на выходной сигнал компаратора
На любой из входов компаратора может быть подан сигнал от генератора
опорного напряжения. Величина выходного напряжения генератора задаётся
программно. Также программируется вывод компаратора, на который поступает
опорное напряжение от генератора. Если на оба входа компаратора подаются
внешние сигналы, то внутренний генератор опорного напряжения следует
выключать для уменьшения тока, потребляемого модулем. Генератор может
формировать напряжение, равное четверти или половине напряжения питания
VCC, или же фиксированное напряжение, равное пороговому напряжению
транзистора (~0.55 В).
3.1.4. Модуль 10-битного АЦП.
Модуль 10-битного АЦП ADC10 представляет собой быстродействующий
10-битный аналого-цифровой преобразователь. Модуль ADC10 обеспечивает
быстрое выполнение 10-битных аналого-цифровых преобразований. В составе
модуля имеется 10-битное ядро с регистром последовательного приближения,
блок управления выборкой, генератор опорного напряжения и контроллер
пересылки данных (DTC).
Контроллер DTC позволяет модулю сохранять результаты преобразований
в пределах всего адресного пространства без использования ЦПУ. Модуль может
конфигурироваться пользовательской программой в соответствии с требованиями
различных приложений.
Модуль ADC10 имеет следующие особенности:
 максимальная скорость преобразования — более 200 тыс. выборок/с;
 10-битный преобразователь с монотонной характеристикой без пропуска
кодов;
 устройство выборки/хранения с программируемым временем выборки;
 запуск преобразования производится программно или по сигналу от
Таймера B;
 программно конфигурируемый внутренний генератор опорного напряжения
(1.5 В или 2.5 В);
 внешний или внутренний источник опорного напряжения (ИОН) выбирается программно;
 восемь каналов преобразования внешних сигналов (12 в моделях
MSP430x22x);

каналы преобразования для внутреннего датчика температуры, напряжения
VCC и внешних опорных напряжений;
 конфигурируемый источник тактового сигнала;
 четыре
режима
преобразования:
одноканальный,
многократный
одноканальный, последовательный и многократный последовательный;
 ядро АЦП и ИОН могут выключаться независимо друг от друга;
 контроллер пересылки данных для автоматического сохранения
результатов преобразований.
Конфигурирование модуля ADC10 осуществляется пользовательской
программой.
Ядро АЦП преобразует аналоговый сигнал в 10-битный цифровой код и
сохраняет результат в регистре ADC10MEM. Верхний и нижний пределы
преобразования определяются двумя программируемыми уровнями напряжения
(VR+ и VR–). Результат преобразования равен максимальному значению (03FFh),
если уровень входного сигнала Vin больше или равен VR+, и нулю, если уровень
входного сигнала меньше или равен VR–. Входной канал и уровни опорных
напряжений (VR+ и VR–) задаются регистрами управления модуля. Результат
преобразования может быть представлен в обычном виде или в дополнительном
коде. При использовании обычного двоичного кода результат аналого-цифрового
преобразования определяется выражением:
N = 1023x(Vin – VR-)/(VR+ – VR-).
Конфигурирование ядра АЦП осуществляется двумя регистрами
управления ADC10CTL0 и ADC10CTL1.
Входной
аналоговый
мультиплексор
позволяет
выбирать
для
преобразования один из 8 внешних и 4 внутренних аналоговых сигналов. Внешние
входы модуля ADC10 мультиплексированы с линиями портов ввода/вывода,
которые представляют собой цифровые схемы на КМОП-элементах. Модуль
ADC10
разработан
для
использования
в
приложениях
с
низким
энергопотреблением. Поэтому ядро автоматически отключается в те периоды
времени, когда модуль не выполняет преобразований, и автоматически
включается при необходимости.
Модуль ADC10 поддерживает четыре режима работы:
Однократный одноканальный режим преобразования. В этом режиме
выполняется однократное преобразование выбранного канала. Результат
преобразования заносится в регистр ADC10MEM.
Однократный последовательный режим преобразования. В этом режиме
выполняется цикл преобразований нескольких последовательно расположенных
каналов, по одному преобразованию на канал. Первый канал последовательности
задаётся программно, а последним является канал A0. Результат каждого
преобразования заносится в регистр ADC10MEM.
Циклический одноканальный режим преобразования. В этом режиме
периодически выполняется преобразование выбранного канала. Результат
преобразования заносится в регистр ADC10MEM.
Циклический последовательный режим преобразования. В этом режиме
периодически выполняется цикл преобразований нескольких последовательно
расположенных каналов, по одному преобразованию на канал. Первый канал
последовательности задаётся программно, а последним является канал A0.
Результат каждого преобразования заносится в регистр ADC10MEM. Цикл
завершается преобразованием канала A0, а повторный запуск цикла
производится по следующему сигналу запуска.
В составе модуля ADC10 имеется контроллер передачи данных (DTC), пред
назначенный для автоматической пересылки результатов преобразования из
регистра ADC10MEM в другие ячейки внутренней памяти. Контроллер DTC
включается при записи в регистр ADC10DTC1 ненулевого значения.
При включённом контроллере пересылка данных производится каждый раз,
когда модуль завершает преобразование и загружает результат в регистр
ADC10MEM. Со стороны программы не требуется никаких действий по
управлению модулем до тех пор, пока не будет передано заданное число
отсчётов.
3.1.5. Модуль 12-битного ЦАП.
Модуль 12-битного ЦАП DAC12 представляет собой цифро-аналоговый
преобразователь с потенциальным выходом. Модуль DAC12 может работать в 8или 12-битном режимах. Модуль DAC12 имеет следующие особенности:
 монотонная характеристика в пределах 12-битного диапазона;
 потенциальный выход с разрешением 8 или 12 бит;
 программируемое соотношение между временем установления и
потреблением;
 внешний или внутренний источник опорного напряжения;
 использует данные в натуральном двоичном коде или в дополнительном
коде;
 возможность самокалибровки для коррекции напряжения смещения;
 возможность синхронного обновления выходов нескольких модулей DAC12.
Конфигурирование модуля DAC12 осуществляется пользовательской
программой.
Модуль DAC12 может быть сконфигурирован для работы в 8- или 12-битном
режиме. Максимальный уровень выходного сигнала (однократное или трёхкратное
значение выбранного опорного напряжения) программно устанавливается. Это
позволяет пользователю управлять динамическим диапазоном ЦАП. Формат
входных натуральный двоичный код или дополнительный код - также
устанавливается программно.
В 8_битном режиме наибольшее используемое значение регистра входного
кода DAC12_xDAT составляет 0FFh, а в 12_битном режиме — 0FFFh. Значения,
превышающие указанные величины, могут быть записаны в регистр, однако все
неиспользуемые старшие биты будут проигнорированы.
Выходы модулей DAC12 мультиплексированы с выводами порта P6,
аналоговыми входами модуля ADC12, а также с выводами внешнего опорного
напряжения.
Модуль DAC12 поддерживает два формата представления данных:
натуральный двоичный код и обратный код. При использовании данных,
представленных в натуральном коде, максимальному выходному сигналу в 12битном режиме соответствует значение 0FFFh (0FFh в 8-битном режиме), как
показано на рис. 2.10.
При использовании данных, представленных в дополнительном коде,
диапазон сдвигается таким образом, чтобы при значении 0800h регистра
DAC12_xDAT (0080h в 8-битном режиме) выходное напряжение ЦАП было равно
нулю, при 0000h — половине от максимального значения, а при 07FFh (007Fh в 8битном режиме) — максимальному значению, как показано на рис. 2.11.
Рис.2.10. Зависимость выходного напряжения модуля DAC12 от входных данных,
представленных в натуральном двоичном коде (12-битный режим).
Рис.2.11. Зависимость выходного напряжения модуля DAC12 от входных данных,
представленных в дополнительном двоичном коде (12-битный режим).
3.2. Последовательный интерфейс
В микроконтроллерах MSP430 последовательный интерфейс реализован в
виде модулей двух типов.
В микроконтроллерах MSP430x20xx реализован модуль универсального
последовательного интерфейса USI. Он позволяет организовать обмен данными с
внешними устройствами по интерфейсам SPI и I2C. SPI (англ. Serial Peripheral
Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) —
последовательный синхронный стандарт передачи данных в режиме полного
дуплекса [9]. I²C (англ. Inter-Integrated Circuit)— последовательная шина данных
для связи интегральных схем, использующая две двунаправленные линии связи.
Используется для соединения низкоскоростных периферийных компонентов с
материнской платой, встраиваемыми системами и мобильными телефонами [10].
Другой разновидностью реализации последовательного интерфейса
является модуль универсального последовательного коммуникационного
интерфейса (USCI). Модули USCI поддерживают несколько режимов передачи
данных по последовательному каналу, при этом разные модули USCI
поддерживают различные режимы. Модули USCI имеют уникальное обозначение.
Так, модуль USCI_A отличается от модуля USCI_B и т.д. Если в конкретном
устройстве имеется более одного модуля USCI с идентичными функциями, то в
обозначение таких модулей добавляется порядковый номер. Например, если в
устройстве содержится два модуля USCI_A, то они имеют обозначения USCI_A0 и
USCI_A1.
Модули USCI_A поддерживают:
 режим UART;
 формирование импульсов для обмена по протоколу IrDA;
 автоматическое определение скорости обмена для поддержки протокола
LIN;
 режим SPI.
Модули USCI_B поддерживают:
 режим I2C;
 режим SPI.
IrDA (англ. Infrared Data Association — Инфракрасный порт, ИК-порт) —
группа стандартов, описывающая протоколы физического и логического уровня
передачи данных с использованием инфракрасного диапазона световых волн в
качестве среды передачи [11].
UART (англ. Universal Asynchronous Receiver-Transmitter — Универсальный
асинхронный приёмопередатчик, УАПП) — узел вычислительных устройств,
предназначенный для связи с другими цифровыми устройствами. Преобразует
заданный набор данных в последовательный вид так, чтобы было возможно
передать их по однопроводной цифровой линии другому аналогичному
устройству. Метод преобразования хорошо стандартизован и широко
применяется в системах на базе компьютеров, микроконтроллеров,
программируемых логических контроллеров.
В режиме UART модули USCI_Ax позволяют подключать микроконтроллеры
семейства MSP430 к внешним устройствам с помощью выводов RXD (вход
приемника) и TXD (выход передатчика). UART – полнодуплексный интерфейс. Это
значит, что приемник и передатчик работают независимо друг от друга. Более
того, передатчик или приемник можно отдельно отключить, освободив ножку
контроллера для других нужд.
Режим UART имеет следующие особенности:
 7- или 8-битные данные с контролем чётности, нечётности или без
контроля;
 независимые сдвиговые регистры передачи и приёма;
 раздельные буферные регистры передачи и приёма;
 изменяемый порядок передачи и приёма битов;
 встроенная поддержка коммуникационных протоколов idle_line (неактивная
линия) и address_bit (адресный бит) для многопроцессорных систем;
 обнаружение приёмником фронта старт-бита для автоматического выхода
из режимов пониженного энергопотребления;
 программируемая скорость обмена с использованием модуляции для
поддержки дробных значений скорости;
 флаги обнаружения и игнорирования ошибок;
 флаг обнаружения адреса;

независимые прерывания передачи и приёма.
Передача (соответственно и прием) сообщений осуществляется
фиксированными пакетами битов (такой пакет называют символом или кадром).
Передача символа в UART осуществляется по одному биту в равные промежутки
времени. Этот временной промежуток определяется заданной скоростью UART и
для конкретного соединения указывается в бодах (что в данном случае
соответствует битам в секунду). В режиме UART модуль USCI передаёт и
принимает данные с заданной скоростью асинхронно по отношению к другому
устройству. Синхронизация приёма/передачи каждого символа осуществляется на
основе выбранной скорости обмена модуля. Блоки передачи и приёма должны
использовать одно и то же значение скорости обмена. Типовыми скоростями
обмена при тактовой частоте микропроцессора 16 МГц являются 9600, 19200,
38400, 57600, 115200, 230400 и 460800 бод.
Как показано на рис. 2.12, символ, передаваемый UART, содержит стартбит, семь или восемь битов данных, бит чётности, бит адреса (в соответствующем
режиме), а также один или два стоп-бита. Порядок передачи битов данных
программируется. При использовании UART данные обычно передаются начиная
с младшего значащего бита.
Рис. 2.12. Формат символа
Помимо собственно информационного потока UART автоматически
вставляет в поток синхронизирующие метки, так называемые стартовый и
стоповый биты, а также биты проверки на четность/нечетность. При приёме эти
лишние биты удаляются из потока. Обычно полезная информация передается
байтами (8 бит), однако возможно передавать по 7 бит. Могут вставляться два
стоповых бита вместо одного, что делается для уменьшения вероятности
рассинхронизации приёмника и передатчика при плотном трафике. Приёмник
игнорирует второй стоповый бит, воспринимая его как короткую паузу на линии.
Если посылка содержит более одного байта, каждый следующий байт
передается отдельным кадром. Условием правильной передачи и приема данных
является задание одинаковых параметров, как для приемника, так и для
передатчика (скорость, количество бит данных, бит четности, количество стопбитов).
Принято соглашение, что пассивным (в отсутствие потока данных)
состоянием входа и выхода UART является логическая 1. Стартовый бит всегда
логический 0, поэтому приёмник UART ждёт перепада из 1 в 0 и отсчитывает от
него временной промежуток в половину длительности бита (середина передачи
стартового бита). Если в этот момент на входе всё ещё 0, то запускается процесс
приёма минимальной посылки. Для этого приёмник отсчитывает 9 битовых
длительностей подряд (для 8-бит данных) и в каждый момент фиксирует
состояние входа. Первые 8 значений являются принятыми данными, последнее
значение проверочное (стоп-бит). Значение стоп-бита всегда 1, если реально
принятое значение иное, UART фиксирует ошибку.
3.2. Программирование аналогового ввода-вывода,
временем и обмена по последовательному интерфейсу
работы
со
Среда разработки Energia и язык Arduino предоставляют следующие
функции для программирования аналогового ввода и вывода.
Функция int analogRead().
Описание. Читает значение определенного аналогового вывода.
Микроконтроллеры MSP430, входящие в комплект отладочного модуля
LaunchPad, имеют 10-битный АЦП. Это означает, что входные напряжения в
диапазоне между 0В и +5В переводятся в цифровые значения от 0 до 1023.
Дискретность преобразования в таком случае составляет 5/1024 = 0,0049В.
Выполнение преобразования занимает порядка 100мкс, т.е. максимальная
скорость считывания составляет 10 000 раз в секунду.
Синтаксис: analogRead(pin).
Параметры: pin - номер контакта микроконтроллера, с которого следует
прочесть значение входного аналогового сигнала (обычно от 0В до +5В).
Доступные контакты для аналогового ввода показаны на рис. 1.9 и 1.10.
Возвращает: значение целого типа в диапазоне от 0 до 1023.
Примечание: если аналоговый вход ни к чему не подключен, то
возвращаемое значение будет зависеть от различных факторов, в том числе от
уровней напряжения на соседних выводах и заканчивая расстоянием от рук до
вывода.
Функция analogWrite().
Описание: Пишет аналоговое значение (заполнение ШИМ) в порт. Может
использоваться, например, для установки различной яркости свечения
светодиодов, регулирования скорости двигателей. После вызова этой функции на
выводе будет присутсвовать меандр с определенным коэффициентом
заполнения импульсов до нового вызова этой или другой функции в применении к
этому порту. Частота сигнала ШИМ состовляет примерно 490Гц.
Синтаксис: analogWrite(pin, value).
Параметры:
pin - номер контакта микроконтроллера, на который нужно выдать
аналоговый сигнал. Доступные контакты для аналогового ввода показаны на рис.
1.9 и 1.10.;
value - коэффициент заполнения ШИМ-сигнала: между 0 (всегда низкий
уровень) и 255 (всегда высокий уровень).
Примечание: функция analogWrite не имеет никакого отношения к портам
АЦП и функции analogRead. Перед использованием функции analogWrite() не
нужно вызывать pinMode() для установки вывода как выходного.
Для работы со временем используются следующие функции.
Функция millis().
Описание: Возвращает количество миллисекунд, прошедшее с момента
запуска платформой данной программы. Это число переполнится (и счет снова
начнется от нуля) примерно через 50 дней.
Синтаксис: unsigned long millis().
Параметры: входные параметры отсутствуют.
Возвращает: значение типа unsigned long. Могут возникать ошибки, если
программист попытается совершить математическими операции с переменными
других типов.
Функция micros().
Описание: Возвращает количество микросекунд, прошедшее с момента
запуска платформой данной программы. Это число переполнится (и счет снова
начнется от нуля) примерно через 70 минут. На платформах с тактовой частотой
16МГц эта функция выполняется за 4 микросекунды и возвращаемый результат
идет с поправкой плюс 4 микросекунды.
Синтаксис: unsigned long micros().
Параметры: входные параметры отсутствуют.
Возвращает: значение типа unsigned long. Могут возникать ошибки, если
программист попытается совершить математическими операции с переменными
других типов.
Функция delay().
Описание: останавливает выполнение программы на заданное время.
Синтаксис: delay(unsigned long ms).
Параметры:
ms – время задержки выполнения программы в миллисекундах.
Примечание: во время задержки микроконтроллер засыпает, более не
выполняя никакую работу. Более совершенным способом контроля времени
является использование функции millis().
Функция delayMicroseconds().
Описание: приостанавливает выполнение программы на определенное
время задержки в микросекундах. Максимальное время задержки - 16383мкс. Для
более длительных задержек следует использовать функцию delay() вместо нее.
Синтаксис: delayMicroseconds(unsigned long us).
Параметры:
us: время задержки выполнения программы в микросекундах.
Примечание: данная функция корректно работает при задержках от 3мкс и
более. Следует использовать эту функцию только для очень коротких задержек.
Для работы с последовательным коммуникационным интерфейсом
используются следующие функции.
Функция Serial.begin().
Описание: устанавливает скорость обмена данными в бит в секунду (бод).
Для связи с компьютером определены следующие скорости: 300, 1200, 2400,
4800, 9600, 14400, 19200, 28800, 38400, 57600, или 115200. Для связи с
устройствами можно установить любую скорость обмена данными.
Синтаксис: Serial.begin(long datarate).
Параметр:
datarate – скорость обмена в бит в секунду (бод).
Примечание: при работе с последовательным портом нельзя использовать
выводы TXD и RXD для других нужд.
Функция Serial.end().
Описание: отключает работу последовательного порта, разрешая
использование выводов RXD и TXD для других нужд. Для повторного включения
последовательного порта используется команда Serial.begin().
Синтаксис: Serial.end().
Функция Serial.available().
Описание: возвращает число байт (символов), доступных для чтения.
Синтаксис: int Serial.available().
Возвращает:
число
байт,
доступных
для
чтения
в
буфере
последовательного порта или 0, если буфер пустой. Если пришли любые данные,
Serial.available() будет больше 0. Емкость буфера до 128 байт.
Функция Serial.read().
Описание: читает пришедшие данные из буфера последовательного порта.
Синтаксис: int Serial.read().
Возвращает: Первый байт из имеющейся очереди (или -1 если данных
нет).
Функция Serial.flush().
Описание: очищает очередь данных. Любой вызов Serial.read() или
Serial.available() будет возвращать только данные, полученные после применения
Serial.flush().
Синтаксис: Serial.flush().
Функция Serial.print().
Описание: печатает данные в последовательный порт.
Синтаксис: Serial.print(data); Serial.print(data, format).
Параметры:
data – данные для печати. Поддерживаются целочисленные переменные, а
также переменные типов char, string и float;
format – формат вывода данных.
Для примера:
int b = 78;
Serial.print(b) без форматирования, напечатает b как номер символа из
таблицы ASCII (т.е. 78).
Serial.print("Hello World!") напечатает строку "Hello World!".
Команда с форматированием может принимать множество форм.
Подробное описание можно найти в [5,6]. Второй параметр может указывать
количество знаков в дробной части числа для вывода, либо тип выводимых
данных, к примеру:
Serial.print(78, BYTE) выведет "N";
Serial.print(78, BIN) выведет "1001110";
Serial.print(78, OCT) выведет "116";
Serial.print(78, DEC) выведет "78";
Serial.print(78, HEX) выведет "4E";
Serial.print(1.23456, 0) выведет "1";
Serial.print(1.23456, 2) выведет "1.23";
Serial.print(1.23456, 4) выведет "1.2346".
Функция Serial.print().
Описание: печатает данные в последовательный порт, завершая их
символом возврата каретки (ASCII 13, или '\r') и переноса строки (ASCII 10, или
'\n'). Эта команда имеет те же формы что и Serial.print().
Примеры:
Serial.println(b) печатает b как номер символа таблицы ASCII, завершая
символом конца строки и возврата каретки.
Serial.println(b, DEC) печатает b как десятичное исло - номер символа
таблицы ASCII, завершая символом конца строки и возврата каретки.
Serial.println(b, HEX) печатает b как шестнадцатеричное число - номер
символа таблицы ASCII, завершая символом конца строки и возврата каретки.
Serial.println(b, OCT) печатает b как восьмеричное число - номер символа
таблицы ASCII, завершая символом конца строки и возврата каретки.
Serial.println(b, BIN) печатает b как двоичное число - номер символа
таблицы ASCII, завершая символом конца строки и возврата каретки.
Serial.println(str) печатает массив символов.
Serial.println() просто переводит строку и возвращает каретку.
Функция Serial.write().
Описание: пишет бинарные данные в последовательный порт. Эти данные
будут посланы как байт или серия байт.
Синтаксис:
Serial.write(val);
Serial.write(str);
Serial.write(buf, len).
Параметры:
val - посылаемое значение одиночного байта (символа);
str - посылаемая строка как последовательность байт;
buf - посылаемый массив как последовательность байт;
len - длина буфера.
Примеры:
Serial.write(‘N’) запишет в последовательный порт значение байта – номера
символа таблицы ASCII (78).
Serial.write(78) запишет в последовательный порт значение байта 78.
Serial.write(“STOP”) запишет в последовательный порт пять байт,
представляющих собой номера ASCII-символов строки “STOP”.
4. Меры безопасности
Во время выполнения лабораторной работы необходимо:
 соблюдать правила включения и выключения вычислительной техники;
 не подключать кабели, разъемы и другую аппаратуру к компьютеру, не
относящиеся к лабораторной установке;
 при включенном напряжении сети не отключать, не подключать и не
трогать кабели, соединяющие различные устройства компьютера;
 в случае обнаруженной неисправности в работе оборудования или
нарушения правил техники безопасности сообщить руководителю
лабораторной работы;
 не пытаться самостоятельно устранить неисправности в работе
аппаратуры;
 по окончании работы привести в порядок рабочее место.
ВНИМАНИЕ! При работе за компьютером необходимо помнить: к каждому
рабочему месту подведено опасное для жизни напряжение. Поэтому во время
работы надо быть предельно внимательным и соблюдать все требования техники
безопасности!
5. Описание лабораторной установки
Лабораторная установка состоит из:
 платы отладочного модуля MSP430 LaunchPad (MSP-EXP430G2),
 платы расширения с набором внешних устройств.
Плата LaunchPad подключается к порту USB компьютера с помощью
прилагаемого кабеля.
Плата расширения подключается к разъему платы LaunchPad (выводы 11…
20). Питание +5В на плату расширения подается от другого свободного порта USB
компьютера с помощью кабеля. Питание на плату расширения следует подавать
после того, как она подключена к плате LaunchPad. Принципиальная
электрическая схема платы расширения приведена на рис. 2.13.
+15 В
R6
10к
VD1
R3
200 R4
R1
10к
X1
11
P2.3
14
P1.6
15
P1.7
20
11
GND
VT1 2к
R2
3к
R5
X2
1
+5В
4
0В
R7
510
30к
C1
200мкФ
Рис. 2.13. Принципиальная электрическая схема платы расширения
Разъем X1 подключается к плате LaunchPad. Разъем X2, распаянный на
кабеле, подключается к свободному USB-порту компьютера. Инвертор на
транзисторе VT1, выполненный по схеме с общим эмиттером, получает входной
сигнал с вывода 11 микроконтроллера (линия порта P2.3). Светодиод VD1 в цепи
коллектора транзистора служит для индикации состояния инвертора. Выходное
напряжение инвертора, снимаемое с коллектора транзистора VT1, подается на
вход фильтра низкой частоты – интегрирующей цепочки R4C1. Выходное
напряжение фильтра, снимаемое с конденсатора C1, подается на вывод 15
микроконтроллера (линия порта P1.7, аналоговый вход A7). Напряжение с движка
потенциометра R6 подается на вывод 14 микроконтроллера (линия порта P1.6,
аналоговый вход A6). Резисторы R5 и R7 предназначены для защиты линий
портов. На плате LaunchPad к линии порта P1.6 подключены зеленый светодиод и
балластный резистор, они образуют вместе с резисторами R6, R7 делитель
напряжения, из-за чего максимальное напряжение на линии P1.6 будет
отличаться от напряжения питания 5В. Для устранения влияния цепи зеленого
светодиода следует удалить его перемычку J5-1, рис. 1.9, оставив ее на одном
контакте.
6. Описание используемых программных комплексов
Для программирования отладочного модуля MSP430 LaunchPad (MSPEXP430G2) в лабораторной работе используется среда разработки Energia. Для
поддержки операций с последовательным интерфейсом в составе среды Energia
имеется специализированный модуль Serial Monitor. Вызов окна Serial Monitor
производится либо из меню Tools/Serial Monitor, либо с помощью кнопки Serial
Monitor на панели инструментов. Вид окна Serial Monitor показан на рис. 2.14.
Рис. 2.14. Окно Serial Monitor
Строка ввода в верхней части окна предназначена для записи байтов
(представляемых в виде ASCII-символов) или строк символов для передачи по
последовательному интерфейсу в модуль LaunchPad. Кнопка Send запускает
передачу. Текстовый бокс со скроллингом в центральной части окна предназначен
для отображения данных, передаваемых по последовательному интерфейсу из
модуля LaunchPad в компьютер. В текстовом боксе можно делать выделения
левой кнопкой мыши и копировать выделенный фрагмент текста комбинацией
клавиш Ctrl-C. В нижней части окна находятся визуальные компоненты
управления, позволяющие настроить режим отображения данных и скорость
работы последовательного порта.
7. Задание
7.1. Подключить отладочный модуль MSP430 LaunchPad с установленным в
DIP-гнездо микроконтроллером MSP430G2452 при помощи кабеля к разъему
порта USB компьютера. Запустить среду разработки Energia. Произвести
настройку связи среды разработки Energia с отладочным модулем LaunchPad.
7.2. Написать, отладить и протестировать программу управления яркостью
свечения зеленого светодиода. Переключение яркости на следующий уровень
должно происходить при нажатии кнопки. Количество уровней яркости – не менее
четырех. Для каждой градации яркости с помощью вольтметра измерить
напряжение на соответствующем выводе микроконтроллера. Результаты
измерений свести в таблицу.
7.3. Подключить плату расширения к плате LaunchPad. Подключить плату
расширения к свободному порту USB компьютера.
7.4. Написать, отладить и протестировать программу управления частотой
мигания красного светодиода. Управление осуществить с помощью
потенциометра R6 (рис. 2.13): положение движка потенциометра должно
управлять частотой мигания.
7.5. Написать, отладить и протестировать программу приема одного
символа из последовательного порта. Для каждого принятого символа записывать
в последовательный порт:
 количество принятых байт в буфере приемника,
 принятый символ,
 десятичный ASCII-код символа,
 шестнадцатиричный ASCII-код символа.
Передаваемая в порт информация должна сопровождаться поясняющими
надписями.
7.6. Написать, отладить и протестировать программу чтения значения
аналогового сигнала с движка потенциометра R6. Интервал времени между двумя
последовательными чтениями:
 вариант 1 – 200 мс,
 вариант 2 – 300 мс,
 вариант 3 – 400 мс,
 вариант 4 – 500 мс.
Считанное значение сигнала должно передаваться в последовательный
порт в двух видах:
 в виде значения выходного кода АЦП,
 в виде значения напряжения, с двумя знаками в дробной части числа,
единица измерения - В.
7.7. Написать, отладить и протестировать программу измерения
меняющегося во времени аналогового сигнала и передачи измеренных значений в
последовательный порт. Измеряемый сигнал – выходной сигнал фильтра низкой
частоты R4C1 (рис. 2.13). Период измерения сигнала – 50 мс. Входной сигнал для
фильтра формировать последовательностью импульсов, подаваемых на вход
инвертора на транзисторе VT1. Параметры импульсов:
 вариант 1 – период 5с, коэффициент заполнения 0.5, количество
импульсов 5;
 вариант 2 – период 6с, коэффициент заполнения 0.3, количество
импульсов 4;
 вариант 2 – период 7с, коэффициент заполнения 0.7, количество
импульсов 3;
 вариант 2 – период 8с, коэффициент заполнения 0.4, количество
импульсов 5.
В последовательный порт передавать значения:
 время от момента старта программы, единица измерения –
миллисекунда;
 напряжение на выходе фильтра, 2 знака в дробной части числа,
единица измерения – В.
После
отработки
заданного
количества
импульсов
остановить
последовательный порт. Скопировать таблицу значений из окна Serial Monitor,
вставить скопированные данные в лист Microsoft Excel и средствами Microsoft
Excel построить график изменения выходного напряжения фильтра во времени.
8. Методика выполнения задания
8.1. Настройку программной среды Energia производить в соответствии с
указаниями раздела 5 Лабораторной работы № 1.
8.2. Изучить примеры Examples/Basics/Fade, Examples/Analog/Fading.
Прошить примеры в микроконтроллер и проверить их работу. Для управления
уровнем выходного сигнала использовать функцию analogWrite().
8.3. Плата расширения подключается к разъему J2 платы LaunchPad.
Вывод 20 (GND) разъема J2 должен совпасть с широкой общей шиной на плате
расширения.
8.4. Изучить пример Examples/Analog/AnalogInput. Для чтения значения
аналогового сигнала с движка потенциометра использовать функцию
analogRead(), аналоговый вход A6.
8.5. Изучить пример Examples/Communication/ASCIITable. Прошить его в
микроконтроллер и проверить работу, использую окно Serial Monitor. Для чтения
данных из последовательного порта использовать функцию Serial.read().
Установить, сколько всего байт читается из порта функцией Serial.read(),
анализировать только первый байт, остальные просто извлекать из буфера для
его очистки. Для вывода информации в последовательный порт использовать
функции Serial.write(), Serial.print(),Serial.println().
8.6.
Изучить
примеры
Examples/Basics/AnalogReadSerial,
Examples/Basics/ReadAnalogVoltage.
Использовать
функции
analogRead(),
Serial.print(), Serial.println(). Аналоговый вход A6. Для вычисления значения
напряжения измерить вольтметром напряжение питания платы расширения.
Снятия показаний АЦП делать:
 при удаленной перемычке J5 зеленого светодиода LED2;
 при установленной перемычке.
8.7. Цифровой выход 11. Длительность импульса и паузы рассчитать по
варианту задания. Для управления длительностью импульса и паузы
использовать функцию millis(). Аналоговый вход A7. Для выдачи импульсного
сигнала в плату расширения, чтения аналогового сигнала и передачи данных в
последовательный порт использовать функции digitalWrite(), analogRead(),
Serial.print(), Serial.println().
9. Требования к содержанию и оформлению отчета
Отчет по лабораторной работе должен содержать:
 краткие теоретические сведения;
 формулировку задания на лабораторную работу;
 описание последовательности выполнения работы;
 изображения рабочих окон с текстами программ;
 тексты программ, не помещающихся в рабочем окне;
 выводы по лабораторной работе.
10. Контрольные вопросы
10.1. Какие модули микроконтроллеров MSP430 используются для ввода и вывода
аналоговых сигналов?
10.2. Для чего предназначены таймеры микроконтроллеров MSP430?
10.3. Какие режимы работы имеют таймеры микроконтроллеров MSP430?
10.4. Каково назначение и режимы работы модуля операционного усилителя в
микроконтроллерах MSP430?
10.5. Каково назначение модуля аналогового компаратора в микроконтроллерах
MSP430?
10.6. Каково назначение и режимы работы модулей аналого-цифровых
преобразователей в микроконтроллерах MSP430?
10.7. Каково назначение и режимы работы модулей цифро-аналоговых
преобразователей в микроконтроллерах MSP430?
10.8. Каково назначение и режимы работы модуля последовательного
интерфейса в микроконтроллерах MSP430?
10.9. Как осуществляется асинхронный режим работы последовательного порта?
10.10. Как осуществляется программирование операций аналогового вводавывода для микроконтроллеров MSP430?
10.11. Как осуществляется программирование операций со временем для
микроконтроллеров MSP430?
10.12. Как осуществляется программирование обмена по последовательному
интерфейсу для микроконтроллеров MSP430?
11. Критерии оценки выполнения лабораторной работы
Лабораторная работа считается выполненной в том случае, если:
 студент выполнил все задания в соответствии с представленной
методикой;
 результаты выполнения работы, представленные в виде отчета,
соответствуют предъявленным к ним требованиям;
 студент правильно ответил на все контрольные вопросы и может
интерпретировать полученные результаты.
Download