- •1 Ответы на контрольные вопросы заданий и их краткое содержание
- •Тема 1.1. Что такое микроконтроллер.
- •Тема 1.2.Схемотехника современных микроконтроллеров
- •Тема 1.3.Обзор языков программирования для микроконтроллеров
- •Тема 1.4.Среды программирования
- •Тема 1.5. Отладка и запуск программы для мк
- •Тема 2.1.Виды команд в процессоре. Ортогональная архитектура.
- •Тема 2.2.Адресное пространство мк msp430
- •Тема 2.3. Внутренняя структура mk msp430
- •Тема 3.1.Битовые операции
- •Тема 3.2. Аналогово-цифровой преобразователь
- •2 Описание выполнения учебного проекта
- •Программная часть
- •3 Результат выполнения учебного проекта
Тема 3.1.Битовые операции
Регистр PxDIR (P1DIR, P2DIR..). Каждый бит этого регистра отвечает за режим работы соответствующего вывода микроконтроллера. Если в регистре бит равен 0, то ножка контроллера является входом, если бит равен 1 — выходом.
Регистр PxREN. А этот регистр отвечает за включение/отключение подтяжки вверх/вниз. Тут больше и сказать то нечего.
Регистр PxOUT. Если вывод у нас работает в режиме выхода, то биты этого регистра отвечают за уровень сигнала на ножке контроллера. Пусть у нас P1.3 работает как выход. Если мы выставим четвертый бит регистра P1OUT в 1, то на выводе P1.3 появится сигнал высокого уровня (логическая единица), если 4-ый бит P1OUT равен 0, то и сигнал на ножке контроллера низкого уровня. Другое дело, если пин работает как вход. В этом случае биты этого регистра отвечают за подтяжку вывода
Следующий регистр — PxIN. Тут все просто — биты этого регистра соответствуют уровню сигнала на соответствующих пинах микроконтроллера. На входе — 1, в регистре — 1, на входе 0, и в регистре — 0. Каждому выводу, например, порта 1 (P1.0, P1.1…) соответствует свой бит регистра P1IN.
Регистры PxSEL и PxSEL2 отвечают за альтернативные функции выводов при использовании какой-либо периферии микроконтроллера.
Кроме всего вышеперечисленного, каждый пин портов 1 и 2 может работать в режиме внешнего прерывания. То есть при изменении сигнала на каком-либо выводе программа ускачет на обработку прерывания. Но мы пока не будем на этом останавливаться, а перейдем уже наконец-то к написанию кода программы. Осталось лишь разобраться, что куда подключено на нашей отладочной плате:
Рисунок 3.1.Отладочная плата
Требования и особенности ввода-вывода для МК.
1. Гибкость. В отличии от старших братьев, для МК нет и не может быть стандартного устройства ввода-вывода. В каждой системе будет что-то своё, с уникальными требованиями и особенностями. В одной системе будет вывод в USART, во второй — на ЖК дисплей, в третей — в файл на SD карточке, в четвёртой — всё сразу. Значит система форматированного ввода-вывода должна быть достаточно гибкой, настраиваемой и независимой от аппаратных особенностей целевой платформы. 2. Требования к ресурсам. В МК ресурсов бывает мало и очень мало. В идеале, в прошивку МК должна попасть только та функциональность, которая реально используется. Скорость и размер кода имеют значение, под час решающее. Если мы не используем вывод типов с плавающей точкой, то и в полученной прошивке не должно быть кода, который его осуществляет. 3. Стойкость к ошибкам кодирования. В идеале, хорошо было-бы если ошибка кодирования приводила бы сразу к ошибке компиляции, ну или по крайней мере к предупреждению. Чтоб не надо было заливать программу в железо и ходить отладчиком вылавливать место, где там, в функцию предался неправильный аргумент. 4. Доступность. Библиотека ввода-вывода должна быть в наличии для целевой платформы. 5. Функциональность часто ставится на последнее место в угоду скорости и компактности.
Тема 3.2. Аналогово-цифровой преобразователь
АЦП в MSP430 может работать в одном из четырех режимов:
однократное преобразование сигнала с одного из каналов
однократное преобразование сигналов с нескольких входов
повторяющиеся преобразования сигнала с одного из входов
и повторяющиеся преобразования с нескольких каналов.
Режим нужно выбирать в соответствии с имеющейся задачей. Обсудим какие регистры отвечают за работу АЦП.
Регистр ADC10CTL0.
Регистр контроля и управления. Здесь необходимо произвести настройку и выбор источника опорного напряжения. Включение модуля ADC10, запуск преобразования, разрешение прерываний — все это также производится в этом регистре. Кроме того, в регистре ADC10CTL0 можно задать продолжительность выборки — 4, 8, 16 или 64 тактов ADC10. Зачем это менять? А все просто, чем больше продолжительность выборки, тем измерение точнее. Но вместе с этим увеличивается вероятность того, что сигнал на входе изменится за время измерения.
Регистр ADC10CTL1.
Тут мы выбираем канал, с которого будем брать сигнал, задаем источник тактирования для модуля ADC10 и предделитель частоты. Кроме того, при помощи битов этого регистра мы выбираем один из четырех режимов работы преобразователя.
Регистры ADC10AE0 и ADC10AE1 позволяет включить/отключить любой из внешних каналов АЦП. Нулевой бит регистра ADC10AE0 соответствует входу A0, первый — A1 ну и так далее =)
Ну и тут еще надо упомянуть регистр ADC10MEM — из него мы будем забирать результат преобразования.
Рисунок 3.2.Аналоговый сигнал
Аналоговый сигнал, это то, с чем мы обычно встречаемся в окружающем нас физическом мире. Слишком мощная лампочка, может быть подключена к схеме, где вращая ручку, мы плавно изменяем яркость. В электроплите на кухне, можно плавно настраивать температуру между 50 и 300⁰С. Музыка, которую вы слушаете, создаётся пульсированием мембраны динамика, что приводит к появлению волн переменного давления воздуха, которое интерпретируется нашими ушами как звук. Большая часть существующей вселенной, аналоговая, это означает, что любые измерения, приведут к получению любого результата, в промежутке плавно изменяющихся значений.
Цифровой сигнал, существует только во вселенной компьютеров и электроники. Ключевое отличие цифрового сигнала от аналогового, это наличие только дискретных значений. Это как разрешить существование только значений 1, 2 и 3, и запретить 1.3 или 2.14 и подобных. Пример дискретной версии синусоиды, можно увидеть на этом рисунке.
Рисунок 3.3.Цифровоепредставление аналогового сигнала
Красные линии показывают цифровые значения, приближенные к линии синуса (голубой цвет). Возможно, этот пример не очень хорошо смотрится, но он позволяет представить себе, что случится, если у нас будет больше 9 возможных значений, доступных здесь. Можно понять, что чем больше значений дискретизации, тем лучше приближение к графику аналоговой функции. Самый простой периферийный модуль АЦП в MSP430, 10-битный, что даёт 2ˆ10 (или 1024) значений. Аппроксимированный график синусоиды выглядит гораздо лучше с таким набором значений:
Рисунок 3.4. 10-битная цифровая апроксимация аналогового сигнала
Понятно, что чем больше бит, тем лучше будет результат, но это усложняет схему и замедляет скорость работы АЦП. Это станет очевидно, если понять, откуда АЦП получает значения.
АЦП последовательного приближения работает по тому же принципу. В двоичном представлении, 1 со всеми последующими нолями, это всегда половина максимально возможного числа (например, 0b1000 это8, тогда как максимальное число 0b1111 или 15). Если мы возьмем всего один компаратор, и используем половинное опорное напряжение, мы получим наш первый бит, если сигнал выше 1/2 Vref, этот бит 1, если ниже, то 0. Затем, мы устанавливаем опорное напряжение на 1/4 или 3/4, в зависимости от предыдущего результата, и сравниваем вновь, получая следующий бит. Используя такой метод, вы можете получить цифровое значение, любого размера, в зависимости от того, сколько измерений вы сделали. В случае 10-битного АЦП в MSP430, это 10 измерений.
Модуль 10-битного АЦП (ADC10), как и модуль компаратора (Comparator_A+), имеет большое число рабочих режимов и настроек. Он может так же, объединятся с другими периферийными модулями (такими как таймер (Timer_A)), что делает его мощным измерительным инструментом.
