Rcf метр на msp430 и nokia1202

RCF метр на MSP430 и Nokia1202

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

В качестве измерителя выступил микроконтроллер от Техас Инструмент msp430f1132. Экран от Nokia 1202. Генератор на триггере Шмидта 74С132. Изначально планировалось сделать измеритель только для емкостей. Но так как памяти еще немного оставалось то был доделан еще измеритель сопротивлений. Также в качестве бонуса получился частотомер.

Характеристики:
— измеряемые сопротивления от 0 Ом до 10МОм
— измеряемые емкости от 0 пф до 10 мкф
— измеряемые частоты от 0 до 25МГц (по крайней мере у меня нет генератора более 25МГц при этом измеритель показывал 24999200Гц и плавала +-15Гц). Погрешность может объяснятся как точностью кварца в измерителе так и точностью кварца в генераторе.

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

Итак, алгоритм работы измерителя.

Сигнал с генератора подается на вход контроллера, настроенный как счетный вход таймера А. В прерывании по переполнению таймера происходит инкремент переменной подсчета импульсов для расширения разрядности таймера. Временной интервал замера формируется сторожевым таймером WDT, работающем в интервальном режиме. Особенность сторожевого таймера в том что его значение нельзя программно изменить, поэтому для определения частоты за 1 секунду введена программная коррекция измеренного значения. Интервальный таймер тактируется от ACKL с делителем 32768. ACKL в свою очередь тактируется от кварца на 6МГц с делителем 8. Для получения секундного интервала подсчет происходит 25 раз и время измерения составляет чуть более секунды. Для приведения его ровно к одной секунде и используется коэффициент коррекции 1,04475136.

Для возможности использования экрана от Nokia библиотека шрифтов была порезана до необходимого минимума.

В принципе можно использовать любой кварц. Достаточно подобрать число переполнений таймера WDT так что бы интервал замера был как можно ближе к единице и рассчитать программный коэффициент коррекции. Генератор выполнен на микросхеме 74С132 причем как и подобных конструкциях отдельные генераторы на измерение емкости и сопротивления. Точность замера частоты 600кГц составляет порядка 2-5Гц таким образом точность замера емкости и сопротивления будет очень сильно зависит от точности питания и стабильности опорных элементов.

Для повышения точности напряжения был использован источник опорного напряжения LM4040 с напряжением стабилизации 2,5В от техас инструмент (что было то и поставил).

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

Номиналы опорных элементов условны, в первую очередь важна стабильность. У меня используются резисторы на 470 Ом и емкости на 1000пФ что дает частоту при замкнутых щупах в режиме измерения сопротивления и отключенной емкости в режиме измерения емкостей порядка 1200000Гц.

Настройка

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

После этого калибруются отдельно измеритель емкости и измеритель сопротивления. Для этого например включается режим измерения емкости. Отображаемая частота записывается в ячейку массива a[9]. В ячейке массива b[9] записывается соответствующее значение емкости в пф. Затем подключается точно измеренная или известная емкость номиналом например 200 пф. Измеренное значение емкости записывается в ячейку массива a[8] в ячейку массива b[8] записывается 200.0 и так далее пока не заполнится весь массив. Калибровка измерителя сопротивления осуществляется аналогично но измеренная частота записывается в массив c[] а соответствующее ей значение сопротивления в Омах записывается в массив d[]. После этого производится перезапись программы в контроллер.

При работе программы рассчитанное значение емкости или сопротивления получается из линейного закона соответствия измеряемой величины соответствующей частоте с линейно-кусочной аппроксимацией.

Печатка была выполнена на одностороннем текстолите. Самое неудобное для повторения это корпус контроллера типа PW (расстояние между ногами 0,65мм) но в принципе легко повторяемо ЛУТом. Часть соединений выполнено перемычками. На печатке белым цветом. Экран припаивается шлейфом к плате, загибается на противоположную строну и клеиться к ней.

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

Измерительные щупы сделаны в виде пинцета из пластмассы. Контакты из старого разъема, штыри прикреплены к пинцету а ответные части вклеены внутрь корпуса. Для изменения типа измеряемого элемента, пинцет необходимо перекинуть в соседние гнезда.

[07-2015] Микроконтроллеры MSP430. Измеритель RC



Автор продолжает цикл статей о микроконтроллерах MSP430. Он считает, что читатели знакомы со всеми предыдущими статьями цикла [1—6] и имеют достаточно знаний, а за прошедшее время смогли обзавестись и некоторыми умениями. Поэтому, не останавливаясь слишком подробно на особенностях текстов программ, он дал больше информации о прикладном применении отладочной платы MSP-EXP430G2 LaunchPad.

В предлагаемой статье будет рассмотрен ещё один модуль микроконтроллера MSP430G2553, о котором в предыдущих статьях речь не шла. Это аналоговый компаратор Comparator_A+. Вот его особенности:

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

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

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

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

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

Задача, которую предстоит решить в этой статье, формулируется так:

Реализовать на базе отладочной платы MSP-EXP430G2 LaunchPad, используя модули Comparator_A+ и Таймер А микроконтроллера, измеритель постоянной времени RC-цепи. Измеренное значение передавать в компьютер через COM-порт для вычисления неизвестного сопротивления или ёмкости. Производить вычисления и выводить их результаты на экран должна специально разработанная компьютерная программа.

Для начала рассмотрим регистры управления модулем компаратора Comparator_A+, которые будут использованы в программе микроконтроллера. Их всего три.

Регистр CAPD позволяет отключить входные и выходные цифровые буферы от тех выводов микроконтроллера, которые используются для ввода аналоговых сигналов. Это позволяет уменьшить общий ток, потребляемый микроконтроллером. Разряды этого регистра имеют названия CAPDx, где х — цифра от 0 до 7. Запись единиц в эти разряды отключает буферы выводов микроконтроллера, связанных с входами САО— СА7 компаратора. Соответствие между этими входами и физическими выводами приведено в описаниях конкретных микроконтроллеров.

Регистр CACTL1 — первый регистр настройки модуля компаратора.

Его разряд 7 (САЕХ) позволяет поменять местами входы компаратора, при этом выходной сигнал инвертируется.

Разряд 6 (CARSEL) указывает, на какой из входов подано образцовое напряжение от внутреннего источника. При одинаковых значениях разрядов САЕХ и CARSEL образцовое напряжение поступает на неинвертирующий вход, а при разных — на инвертирующий вход.

Разряды 5 и 4 (CAREF1 и CAREF0) задают значение образцового напряжения:

CAREF1=0 и CAREF0=0 — генератор образцового напряжения выключен;

CAREF1=0 и CAREF0=1 — четверть напряжения питания;

CAREF1=1 и CAREF0=0 — половина напряжения питания;

CAREF1 = 1 hCAREF0=1 — около 0,5 В.

Разряд 3 (CAON) включает (CAON=1) или выключает (CAON=0) компаратор. Генератор образцового напряжения включается и выключается независимо от компаратора.

Разряд 2 (CAIES) задаёт перепад уровня на выходе компаратора, при котором генерируется запрос прерывания: CAIES=0 — нарастающий, CAIES=1 — спадающий.

Разряд 1 (CAIE) разрешает (СА1Е=1) или запрещает (СА1Е=0) запросы прерывания от компаратора.

Разряд 0 (CAIFG) — флаг запроса прерывания от компаратора. Снимается автоматически с началом обработки прерывания или может быть снят программно.
Регистр CACTL2 — второй регистр настройки модуля компаратора.

Его разряд 7 (CASHORT) используют для соединения между собой входов компаратора: CASHORT=1 — входы соединены, CASHORT = 0 — входы не соединены.

Разряды 6 и 2 (Р2СА4 и Р2СА0) задают подключение неинвертирующего (при САЕХ=0) или инвертирующего (при САЕХ=1) входа согласно табл. 1.

Читайте также  Магнитная петлевая антенна

Разряды 5, 4, 3 (Р2САЗ, Р2СА2, Р2СА1) задают подключение инвертирующего (при САЕХ=0) или неинвертирующего (при САЕХ=1) входа согласно табл. 2. Соответствие между физическими выводами микроконтроллера и входами САх указано в документации на конкретные микроконтроллеры.

Разряд 1 (CAF) включает (CAF=1) или выключает (CAF=0) выходной фильтр компаратора.

Разряд 0 (CAOUT) отображает состояние выхода компаратора. Запись в этот разряд не имеет смысла и игнорируется.

Для измерения постоянной времени интегрирующей цепи R1C1 подключим её к микроконтроллеру, как показано на рис. 1. На выходе Р2.0 будем программно постоянно поддерживать низкий логический уровень. Применённое подключение обусловлено исключительно близостью выводов Р1.4, Р1.5 и Р2.0 как на корпусе микроконтроллера, так и на разъёме платы LaunchPad. В принципе, вместо вывода Р2.0 нужно было бы использовать общий провод.

В начальный момент времени на выводе Р1.5 устанавливают напряжение высокого логического уровня, в результате чего конденсатор С1 начинает заряжаться через резистор R1. Через некоторое время (около 1,5 с) считают, что конденсатор полностью заряжен до напряжения питания микроконтроллера, и на выходе Р1.5 устанавливают напряжение низкого уровня. Конденсатор С1 начинает разряжаться через резистор R1. Таймер А начинает отсчёт длительности разрядки.

Напряжение с конденсатора С1 поступает на вывод Р1.4, который в рассматриваемом случае служит неинвертирующим входом СА4 компаратора. На инвертирующий вход компаратора подано образцовое напряжение, равное четверти напряжения питания. Когда напряжение на конденсаторе достигает образцового, уровень на выходе компаратора становится низким, что приводит к срабатыванию блока захвата/ сравнения 1 Таймера А. Определив продолжительность разрядки конденсатора, программа вычисляет постоянную времени R1C1.

Конденсатор разряжается по экспоненте

В данном случае t — продолжительность разрядки конденсатора С1 от полного напряжения питания до его четверти. Зная постоянную времени и один из параметров RC-цепи (сопротивление или ёмкость), можно определить другой параметр.

Для измерения неизвестной ёмкости конденсатора С1 необходимо использовать резистор R1 известного с возможно большей точностью сопротивления. Соответственно для измерения сопротивления резистора R1 необходим конденсатор С1 известной ёмкости. Поскольку на зарядку конденсатора отведено около 1,5 с, необходимо выбирать конденсатор и резистор так, чтобы постоянная времени не превышала 0,5 с.

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

Строки 51—53 настраивают модуль компаратора. Отключают цифровой буфер от входа СА4, переключают входы компаратора (теперь СА4 — неинвертирующий вход), включают внутренний источник образцового напряжения 0,251)пи1, включают компаратор и разрешают генерацию запроса прерывания по спадающему перепаду на его выходе, а также включают выходной фильтр.

Цикл измерения запускает компьютерная программа, посылая байт 0x00 на вход RXD модуля UART микроконтроллера. После приёма этого байта строка 9 программы микроконтроллера устанавливает на выходе Р1.5 высокий уровень, а строка 10 выдерживает паузу длительностью около 1,5 с, после чего строка 11 устанавливает на выходе Р1.5 низкий уровень. Далее строка 12 обнуляет счётчик таймера А, строка 13 снимает флаг прерывания по переполнению счётчика, а строка 14 — флаг захвата. В строке 15 обнуляется переменная time, в которой будет подсчитываться время разрядки.

В строках 16—23 реализован цикл ожидания события захвата Таймера А, которое происходит при спадающем перепаде уровня на выходе компаратора. Внутри этого цикла периодически проверяется флаг TAIFG, устанавиваемый при переполнении Таймера А. Поскольку таймер работает с тактовой частотой 1 МГц, то в течение разрядки конденсатора он может переполниться несколько раз. Каждое переполнение увеличивает переменную time на 65536 единиц (строки 18—22).

Когда захват произошёл, строка 24 добавляет к переменной time содержимое счётного регистра таймера А. Затем строка 25 вычисляет постоянную времени по приведённой ранее формуле. Поскольку в используемом микроконтроллере отсутствует аппаратная возможность работать с дробными числами, операция деления на 1,386 заменена умножением на 1000 и последующим делением на 1386.

Затем переменная time, имеющая тип unsigned long длиной 4 байта, разбивается на отдельные байты, которые в строках 26—31 модуль UART поочерёдно передаёт в компьютер.

Компьютерная программа RC-meter собирает принятые четыре байта в 32-разрядное слово, вычисляет значение ёмкости или сопротивления и выводит его на экран.

Для проверки программы был собран макет, показанный на рис. 2. Конденсатор С1 ёмкостью 0,1 мкФ ±5 % и резистор R1 сопротивлением 10 кОм ±5 % подключены к разъёму Л платы LaunchPad съёмными перемычками из её комплекта. Связь модуля UART микроконтроллера с USB-портом компьютера организована с помощью имеющегося на плате LaunchPad преобразователя интерфейса.

Окна программы RC-meter представлены на рис. 3 (измерение сопротивления) и рис. 4 (измерение ёмкости). В первом случае необходимо ввести в соответствующую графу с клавиатуры известную ёмкость конденсатора и нажать на экранную кнопку «Измерить». Через некоторое время в нижней строке появится измеренное значение сопротивления резистора. Аналогично выполняют измерение ёмкости.

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

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

1. Сокол С. Микроконтроллеры MSP430. Первые шаги. — Радио, 2012, № 12, с. 43, 44; 2013, № 1, с. 47-49.

2. Сокол С. Микроконтроллеры MSP430. Снижаем энергопотребление. — Радио, 2013, № 2, с. 49-51; № 3, с. 51,52.

3. Сокол С. Микроконтроллеры MSP430. Необычный термометр. — Радио, 2013, № 5, с. 48—50; №6,с.51-53.

4. Сокол С. Микроконтроллеры MSP430. Сенсорный регулятор яркости светодиода. — Радио, 2013, № 7, с. 49, 50; № 8, с. 53, 54.

5. Сокол С. Микроконтроллеры MSP430. Хранение измеряемых параметров во FLASH-памяти. — Радио, 2014, № 3, с. SI-54.

6. Сокол С. Микроконтроллеры MSP430. Регистратор напряжения. — Радио, 2014, № 4, с. 51—54.

Реализация часов реального времени на MSP430

В данном примере применения описывается создание часов реального времени (RTC) на микроконтроллере MSP430 при помощи встроенного таймера Timer_A или сторожевого таймера. Семейство микроконтроллеров MSP430 производства компании Texas Instruments является семейством 16-разрядных RISC микроконтроллеров со сверхнизким потреблением, усовершенствованной архитектурой и богатым набором периферийных устройств. В примере применения дается краткий обзор микроконтроллеров семейства MSP430 и более подробно обсуждается применение их в качестве часов реального времени. В данном описании приведены примеры схемной реализации, два примера кода прикладной программы и рассмотрены общие вопросы по проблемам обеспечения точности и стабильности.

Семейство микроконтроллеров MSP430 производства компании Texas Instruments является семейством 16-разрядных RISC микроконтроллеров со сверхнизким потреблением, усовершенствованной архитектурой и богатым набором периферийных устройств. Архитектура микропроцессоров реализована на основе новаторской схемы тактирования и передовых конструкторских решений, таких как высоко ортогональная структура, делающая прибор очень мощным и гибким. Микроконтроллеры MSP430x1xx потребляют менее 350 мкА при работе на частоте 1 МГц при 3 В питании и могут пробудиться из режима «сна», в котором потребляют менее 2 мкА, менее чем за 6 мкс. Такие низкое потребление и малое время выхода из режима «сна» позволяют изготавливать на основе этих микроконтроллеров устройства, работающие от автономного источника питания.

Кроме того, микроконтроллеры семейства MSP430 имеет обширный набор встроенных периферийных модулей и большой объем встроенной памяти, что позволяет изготавливать на их основе реальные «системы на кристале». Микроконтроллеры содержат такие периферийные модули как 12- и 14- битные АЦП, градиентные АЦП, мультиплицируемые таймеры (некоторые с регистром захвата/сравнения и способностью формировать ШИМ сигнал), драйвер ЖКИ, встроенный задающий генератор, H/W перемножитель, USART, сторожевой таймер, GPIO и т.д.

Подробное описание микроконтроллеров семейства MSP430 можно найти в интерненте по адресу http://www.ti.com.

1.1 Применение часов реального времени

Часы реального времени (RTC) используются в различных устройствах — от наручных часов до систем регистрации событий. В данном примере применения описывается способ реализации часов реального времени на микроконтроллере MSP430F1121. В некоторых приложениях MSP430, работающий в режиме часов реального времени может заменить аппаратные RTC, что позволит упростить разработку системы и снизить ее стоимость. В данном описании показаны примеры реализации часов реального времени на основе таймера Timer_A и сторожевого таймера; однако, можно использовать и любой другой таймер MSP430.

Все микроконтроллеры семейства MSP430 способны выполнять функции часов реального времени. Дополнительные повышение степени системной интеграции, снижение потребления и стоимости могут быть достигнуты и за счет выполнения микроконтроллером MSP430 функций других периферийных модулей. Например, микроконтроллеры ’33x серии могут выполнять функции часов реального времени, супервизора напряжения питания системы, драйвера ЖКИ и UART, объединяя все эти четыре функции в одном приборе со сверх малым потреблением.

1.2 Задающий генератор MSP430

Встроенный задающий генератор — одна из обычно неправильно истолковываемых пользователями MSP430 тем. Основной причиной заблуждения является непонимание того, как вырабатываются стабильные системные синхроимпульсы. Все микроконтроллеры семейства MSP430 содержат и RC- генератор с цифровым управлением, и кварцевый генератор. RC- генератор обычно используется для синхронизации вычислительного ядра, а кварцевый генератор — для синхронизации периферийных устройств. В описываемых часах реального времени кварцевый генератор используется в качестве генератора тактовых импульсов для таймера/счетчика, который является времязадающим (таймер Timer_A или сторожевой таймер). Поэтому здесь не возникает проблем нестабильности, обычно присущих RC- генераторам.

2 Реализация часов реального времени

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

2.1 Формирование синхроимпульсов

Для формирования синхроимпульсов в RTC используется LFXT1 автогенератор, работающий в режиме LF с 32768 Гц кварцевым резонатором. Выход генератора LFXT1 подключен к формирователю ACLK. В свою очередь ACLK используется в качестве задающего генератора для таймера/счетчика, который является основой часов реального времени.

Читайте также  Проводка от столба к дому

DCO вырабатывает сигнал для синхронизации вычислительного ядра и MCLK. Фактически вычислительное ядро работает асинхронно с периферийным таймером/счетчиком. Точность RTC не изменяется до тех пор, пока вычислительное ядро способно обслуживать каждое прерывание до возникновения следующего. Для более полного ознакомления с основным синхронизирующим модулем обратитесь к руководству пользователя по микроконтроллерам семейства MSP430x1xx (доступному в интернете по адресу http://www.ti.com/sc/msp430) и техническому описанию микроконтроллеров семейства MSP430x11x1.

2.2 Выбор Таймера

Микроконтроллер MPS430F1121 содержит два таймера: сторожевой таймер и таймер Timer_A. В данном примере применения описываются часы реального времени, реализованные на основе обоих таймеров. В обоих случаях таймер настроен таким образом, чтобы работать непрерывно и формировать прерывания точно в 1-секундных интервалах. Так как таймер настроен на работу от ACLK, а генератор тактовых импульсов работает от 32768 Гц кварцевого резонатора, то таймер просто досчитывает до 32767 и обнуляется, вырабатывая при переполнении запрос на прерывания. Для выполнения функции часов реального времени вычислительному ядро необходимо только обработать это прерывание.

Любой таймер, способный вырабатывать 1- секундные прерывания может использоваться с прикладной программой, приведенной в данном примере применения. Кроме того, программа может быть легко переделана для работы с любым другим таймером, формирующим периодические прерывания. Например, если таймер формирует прерывания каждые 0.5 секунды, то вычислительное ядро для формирования 1- секундных прерываний может использовать только каждое второе прерывание, и так далее.

2.3 Внешний интерфейс

Приведенные в приложении прикладные программы RTC не обеспечивают внешнего интерфейса. Если использовать вместо оговоренного любой другой микроконтроллер семейства MSP430, то имеется возможность выбора обслуживаемого интерфейса: I 2 C, параллельный, UART, последовательный и т.д. Для микроконтроллеров семейства MSP430 имеются программные модули, позволяющие реализовать эти интерфейсы. Для изготовления законченных часов реального времени на базе описываемого устройства необходимо просто добавить в приведенный код прикладной программы код программы обслуживания нужного интерфейса. Более детальные обсуждения некоторых из возможных интерфейсов могут быть найдены в MSP430 FamilyApplication Report Book и других примерах применения.

2.4 Описание принципиальной схемы

На рисунке 1 приведена принципиальная схема часов реального времени. Обратите внимание, что единственный требуемый внешний компонент — 32768 Гц кварцевый резонатор.


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

2.5 Потребляемый ток

Типовой ток потребления микроконтроллера MSP430F11x1 при работе в активном режиме на частоте 1 МГц от 3 В источника питания — 300 мкА. Типовой ток потребления в третьем режиме пониженного потребления (режиме сна) — 1.6 мкА при 3 В питании. Микроконтроллер выходит из третьего режима пониженного потребления менее чем за 6 мкс, а подпрограмма синхронизации выполняется примерно за 130 мкс. Учитывая сверхнизкий ток потребления и малое время восстановления работоспособности, микроконтроллер MSP430F11x1, работающий в качестве RTC потребляет очень маленький средний ток, а поэтому способен работать длительное время от автономного источника питания.

2.6 Проблемы обеспечения точности

Точность RTC зависит от точности используемого кварцевого резонатора. Это позволяет выбрать такой кварцевый резонатор, который обеспечит требуемую точность.

2.6.1 Выбор точности кварцевого резонатора

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

Влияние стабильности очевидно: чем выше стабильность резонансной частоты кварцевого резонатора, тем выше будет точность RTC. Например, RTC, использующие кварцевый резонатор со стабильностью резонансной частоты 30 ppm, будут более точными, чем часы, использующие кварцевый резонатор со стабильностью резонансной частоты 200 ppm.

Емкость нагрузки также влияет на точность хода RTC. Емкость нагрузки кристалла — это емкость, требующаяся резонатору, а не собственная емкость резонатора. Для работы на указанной частоте резонатору необходима емкостная нагрузка. 32768 Гц автогенератор всех микроконтроллеров семейства MSP430 содержит встроенные нагрузочные конденсаторы с номинальной емкостью 12 пФ. Так как эти конденсаторы включены последовательно, то суммарная емкость нагрузки получается 6 пФ.

Кроме того, емкость, сформированная автогенератором, увеличивается за счет существующих паразитных емкостей печатной платы и выводов. Например, 2 пФ паразитная емкость не является редкостью на печатной плате. Добавление 2 пФ к 6 пФ увеличивает полную емкостную нагрузку для резонатора до 8 пФ. В некоторых случаях, в зависимости от технических параметров резонатора и паразитных емкостей, в схему должны быть добавлены параллельные конденсаторы для обеспечения требуемой емкостной нагрузки.

MSP430x11x — недорогие микроконтроллеры со сверхмалым потреблением, которые могут идеально заменить аппаратно реализованные часы реального времени. Основным преимуществом от использования MSP430 в качестве RTC является расширяемость функций, выполняемых MSP430 по сравнению с обыкновенными часами реального времени. Все микроконтроллеры MSP430x11x содержат 16-разрядное вычислительное ядро с RISC архитектурой, 16-разрядный сторожевой таймер, 16-разрядный таймер Timer_A (с тремя регистрами захвата/сравнения и аналоговым компаратором), минимум 128 байтное ОЗУ, минимум 2 Кбайтное ПЗУ и минимум 14 линий портов ввода-вывода общего назначения (GPIO). Не все эти функциональные возможности доступны одновременно у одного микроконтроллера, но они позволяют обеспечить устройству большую гибкость, чем дают стандартные аппаратно реализованные RTC.

Кроме того, модуль таймера Timer_A способен выполнять аналого-цифровое преобразование, формировать сигнал с ШИМ и работать в режиме UART с пропускной способностью до 115 200 бод. Сторожевой таймер способен работать как простой таймер, а все выводы GPIO и все периферийные устройства имеют широкие возможности по формированию прерываний.

3 Обсуждение прикладной программы

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

Подпрограмма инициации производит настройку модулей MSP430. Модуль таймера настраивается на непрерывный счет от 0 до 32767 и формирование прерывания при переполнении. Также подпрограмма производит установку необходимых параметров основного модуля синхронизации.

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

Подпрограмма обслуживания прерывания (interrupt service routine — ISR) таймера обрабатывает биты регистра состояния (status register — SR), которые записываются в стек до выполнения подпрограммы обслуживания прерывания. Это позволяет вычислительному ядру находиться в активном режиме, а не в режиме сна, по выходу из подпрограммы обслуживания прерывания.

Подпрограмма расчета временных параметров выполняется каждый раз после 1- секундного прерывания таймера. Она пересчитывает значения секунд, минут и часов в двоично-десятичной форме. В описании встроенных периферийных модулей микроконтроллеров семейства MSP430 можно найти более сложную подпрограмму, которая высчитывает и значения дней, месяцев и лет (учитывая и високосные годы).

Быстрый старт с микроконтроллерами MSP430.

Немного отвлечемся от STM32 и сегодня займемся устройствами от Texas Instruments – микроконтроллерами MSP430. И эта статья будет посвящена так называемому быстрому старту с этими девайсами. Все опыты и эксперименты будут ставиться на недорогой отладочной платке – MSP430 LaunchPad.

Итак, открываем коробку с платой и достаем все, что нам понадобится. На данном этапе нам нужна лишь сама плата и USB-кабель для подключения ее к компьютеру. Смело втыкаем шнур в USB-разъем и ждем пока заботливый Windows установит нам необходимые драйвера. Но тут есть одна неприятность – драйвер MSP430 Application UART надо найти и установить самим. Не вопрос!

Идем на официальный сайт Texas Instruments и качаем IDE (я остановил свой выбор на IAR Embedded Workbench for MSP430). Архив скачан, распаковываем и идем в диспетчер устройств. Там находим наш девайс и указываем вручную пути к файлам драйвера, которые находятся в скачанном архиве в папке Drivers. В случае успеха отладочная плата будет определяться в диспетчере устройств следующим образом:

Первый этап позади, теперь необходимо установить IAR Embedded Workbench. Запускаем IAR и создаем новый проект. Для этого идем в Project->Create New Project. В появившемся окне выбираем следующее:

В результате получаем пустой проект, в который уже включен файл main.c. Теперь мы можем переходить к написанию собственного кода. Давайте по традиции начнем с портов ввода-вывода. На отладочной плате есть пользовательская кнопка и парочка светодиодов – а точнее два, красный и зеленый. Давайте так – если кнопка нажата горит зеленый, иначе красный 🙂 Но перед тем как писать программу, посмотрим, какие же регистры отвечают в MSP430 за порты ввода-вывода. Итак, начинаем!

Регистр PxDIR.

Каждый бит этого регистра отвечает за режим работы соответствующего вывода микроконтроллера. Если в регистре бит равен 0, то ножка контроллера является входом, если бит равен 1 – выходом. Пусть, например, второй бит регистра P1DIR равен 1. Что это значит? А то, что вывод P1.1 работает в режиме выхода.

Регистр PxREN.

А этот регистр отвечает за включение/отключение подтяжки вверх/вниз. Тут больше и сказать то нечего.

Регистр PxOUT.

А вот здесь поинтереснее 🙂 Если вывод у нас работает в режиме выхода, то биты этого регистра отвечают за уровень сигнала на ножке контроллера. Пусть у нас P1.3 работает как выход. Если мы выставим четвертый бит регистра P1OUT в 1, то на выводе P1.3 появится сигнал высокого уровня (логическая единица), если 4-ый бит P1OUT равен 0, то и сигнал на ножке контроллера низкого уровня.

Другое дело, если пин работает как вход. В этом случае биты этого регистра отвечают за подтяжку вывода. Вот небольшой примерчик, чтобы сразу все стало понятно. Пусть P1.0 – вход. Если нулевой бит P1OUT = 1, то подтяжка вверх, если нулевой бит равен 0, подтяжка вниз. Все очень логично!

Регистр PxIN.

Тут все просто – биты этого регистра соответствуют уровню сигнала на соответствующих пинах микроконтроллера. На входе – 1, в регистре – 1, на входе 0, и в регистре – 0. Каждому выводу, например, порта 1 (P1.0, P1.1…) соответствует свой бит регистра P1IN.

Читайте также  Бегущая строка 8x80 с набором текста на клавиатуре

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

Кроме всего вышеперечисленного, каждый пин портов 1 и 2 может работать в режиме внешнего прерывания. То есть при изменении сигнала на каком-либо выводе программа ускачет на обработку прерывания. Но мы пока не будем на этом останавливаться, а перейдем уже наконец-то к написанию кода программы. Осталось лишь разобраться, что и как подключено на нашей отладочной плате:

Видим, что кнопка висит на ножке P1.3, а светодиоды на P1.0 и P1.6.

Осталось совсем немного – а именно настроить наш проект и отладчик. Идем в настройки проекта и выбираем наш контроллер:

В этом же окне идем во вкладку Debugger и выбираем FET Debugger вместо Simulator. Теперь мы готовы прошивать контроллер!

В итоге при нажатии на кнопку мы должны увидеть горящий зеленый светодиод, а если кнопка не нажата, то горит красный. На этом, собственно, и все, с нашим первый проектом для MSP430 мы разобрались!

MSP430, учимся программировать и отлаживать железо


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

Введение

В данной статье будет рассмотрено устройство, в основу которого легла отладочная плата eZ430-RF2500. На плате находится микроконтроллер MSP430F2274 и беспроводной модуль CC2500, который, надо заметить, не будет рассмотрен далее.
Моим коллегой, Соколовым С. А., была изготовлена небольшая надстройка для этого отладочного комплекта, она присоединена ко всем выводам. На надстройке расположен акселерометр LIS331DLH, с которым мы и будем взаимодействовать по SPI.

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

Что нам потребуется

Среда разработки

Для начала нужно скачать и установить среду разработки и компилятор. На сегодняшний день существует три варианта — Code Composer Studio, IAR Embedded Workbench for TI MSP430 и mspgcc.
Я буду использовать Workbench KickStart Edition. KickStart бесплатный, он имеет ограничение по количеству кода, но для изучения этого более чем достаточно.

Средство отладки

Если у вас нет под рукой осциллографа или логического анализатора, то часто возникают сложности, связанные с непониманием того, что же на самом деле происходит в вашем устройстве. Понять причины того, почему же устройство отказывается работать часто помогает Proteus.
В нём можно найти очень многие микроконтроллеры MSP430. К сожалению MSP430F2274 в Proteus не оказалось, но имеется аналог — MSP430F2272, его и будем использовать.

Приступим к написанию кода

Создание проекта

На данном этапе сложностей возникнуть не должно. В качестве языка программирования выбираем C++.

  • Заменяем стандартный #include «io430.h» на #include «msp430f2274.h» (заголовочный файл для нашего микроконтроллера);
  • В свойствах проекта на вкладке Debugger выбираем Driver: FET Debugger;
  • На вкладке General Options в окне Device выбираем MSP430F2274;
  • Для того чтобы убедиться, что всё сделано правильно нажимаем Ctrl+D (Download and Debug). Как только контроллер прошивка загрузится нажимаем F5 для её выполнения.

В случае если нужно скомпилировать файл для Proteus, на вкладке Debugger в окне Driver выбираем Simulator, а на вкладке Linker Output в окне Format ставим Other и Output format выбираем intel-standart, а в окне Output file меняем расширение на hex.

Работа с портами

void main ( void )
<
WDTCTL = WDTPW + WDTHOLD ;

BIT2 ;
P1REN | = BIT2 ;

P1DIR | = BIT1 + BIT0 ;

BIT0 ;
>
else
<
P1OUT | = BIT0 ;
P1OUT & =

PxDIR отвечает за направление порта 1. Когда конкретный бит данного регистра установлен в 0, соответствующий пин работает на вход. И наоборот, если соответствующий бит установлена в 1, то пин работает на выход. В примере фигурируют 3 пина: P1.2 — кнопка, P1.0 — красный светодиод, P1.1 — зеленый светодиод.

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

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

PxSEL выбирает функцию пина. В datasheet на изображении микроконтроллера функции обычно указывают через знак «/».

Например на рисунке P2.7 работает как обычный пин в случае, если P2SEL имеет 0 в соответствующем разряде. По умолчанию, в данном случае, там установлена единица, что означает, что эта лапка предназначена для подключения внешнего часового кварцевого резонатора.

Константы BIT0..BITF содержатся в файле msp430f2274.h и представляют собой 16-ти разрядные слова в заданном разряде которых содержится 1, все остальные разряды содержат 0.

Надо заметить, что файл msp430f2274.h содержит много полезной информации. Там находятся все константы контроллера с комментариями на английском.

В примере используются побитовые операции Си, «|=» установит соответствующий значению справа бит в регистре слева в единицу, а «&=

» напротив установит его в 0.

Работа с SPI

unsigned char spi ( unsigned char data, unsigned char dataEx = 0x00 ) ;

void main ( void )
<
WDTCTL = WDTPW + WDTHOLD ;

P1DIR | = BIT0 + BIT1 ;
P1OUT & =

P3SEL = BIT1 + BIT2 + BIT3 ;
P3DIR | = BIT0 ;
P3OUT | = BIT0 ; // Отключаем CC2500 (устанавливаем 1 на CS)

BIT7 ;
P2DIR | = BIT6 + BIT7 ;
P2OUT | = BIT6 ; // Отключаем датчик температуры (тоже подключен к SPI)
P2OUT | = BIT7 ; // Отключаем акселерометр

// Конфигурируем SPI
UCB0CTL0 | = UCMSB + UCMST + UCSYNC ;
UCB0CTL1 | = UCSSEL_2 ;
UCB0BR0 = 0x02 ;
UCB0BR1 = 0 ;
UCB0CTL1 & =

if ( spi ( 0x8F ) == 0x32 )
<
P1OUT | = BIT1 ; // Красный светодиод
>
P1OUT | = BIT0 ; // Зеленый светодиод
>

unsigned char spi ( unsigned char data, unsigned char dataEx )
<
unsigned char RX ;

BIT7 ; // Включаем акселерометр

while ( ! ( IFG2 & UCB0TXIFG ) ) ; // Ожидаем готовность буфера отправки
UCB0TXBUF = data ;
while ( ! ( IFG2 & UCB0RXIFG ) ) ; // Ожидаем готовность буфера приёма
RX = UCB0RXBUF ;

while ( ! ( IFG2 & UCB0TXIFG ) ) ;
UCB0TXBUF = dataEx ;
while ( ! ( IFG2 & UCB0RXIFG ) ) ;
RX = UCB0RXBUF ;

В примере запрашивается значение регистра по адресу 0x8F, там содержится код, который идентифицирует устройство. Этот код указан в datasheet. Это позволяет убедиться в том, что обмен данными произошел. В случае успеха включаем красный светодиод.
Соответственно все остальные устройства подключенные к SPI необходимо отключить от интерфейса. Для этого CS на них устанавливается в единицу.

Заключение

В следующий раз постараюсь рассказать подробнее про работу с LIS331DLH, добраться до прерываний, поработать со встроенным в программатор мостом USB-UART и рассказать немного про watchdog.

Я надеюсь, что эта статья оказалась полезна тебе, читатель.

Rcf метр на msp430 и nokia1202

интересные РАДИОСХЕМЫ самодельные

  • ELWO
  • 2SHEMI
  • БЛОГ
  • СХЕМЫ
    • РАЗНЫЕ
    • ТЕОРИЯ
    • ВИДЕО
    • LED
    • МЕДТЕХНИКА
    • ЗАМЕРЫ
    • ТЕХНОЛОГИИ
    • СПРАВКА
    • РЕМОНТ
    • ТЕЛЕФОНЫ
    • ПК
    • НАЧИНАЮЩИМ
    • АКБ И ЗУ
    • ОХРАНА
    • АУДИО
    • АВТО
    • БП
    • РАДИО
    • МД
    • ПЕРЕДАТЧИКИ
    • МИКРОСХЕМЫ
  • ФОРУМ
    • ВОПРОС-ОТВЕТ
    • АКУСТИКА
    • АВТОМАТИКА
    • АВТОЭЛЕКТРОНИКА
    • БЛОКИ ПИТАНИЯ
    • ВИДЕОТЕХНИКА
    • ВЫСОКОВОЛЬТНОЕ
    • ЗАРЯДНЫЕ
    • ЭНЕРГИЯ
    • ИЗМЕРЕНИЯ
    • КОМПЬЮТЕРЫ
    • МЕДИЦИНА
    • МИКРОСХЕМЫ
    • МЕТАЛЛОИСКАТЕЛИ
    • ОХРАННЫЕ
    • ПЕСОЧНИЦА
    • ПРЕОБРАЗОВАТЕЛИ
    • ПЕРЕДАТЧИКИ
    • РАДИОБАЗАР
    • ПРИЁМНИКИ
    • ПРОГРАММЫ
    • РАЗНЫЕ ТЕМЫ
    • РЕМОНТ
    • СВЕТОДИОД
    • СООБЩЕСТВА
    • СОТОВЫЕ
    • СПРАВОЧНАЯ
    • ТЕХНОЛОГИИ
    • УСИЛИТЕЛИ

Здравствуйте уважаемые форумчане! Решил я поделится свежими знания по программированию нового микроконтроллера MSP430 для радиолюбителей.

Компания Техас Инструменс разработала для начинающих недорогой отладочный набор MSP-EXP430G2. На сегодняшний день это самое дешевое отладочное средство.
Я купил такой набор всего за 319 рублей. В него входит два микроконтроллера и отладочная плата с программатором с поддержкой внутрисхемной отладки.

Добавлено (24.12.2012, 22:51)
———————————————
На сайте производителя предполагаются две бесплатные среды разработки
Code Composer Studio
IAR Embedded Workbench Kickstart

Вот пример проекта мигание светодиода от таймера
Добавлено (24.12.2012, 23:13)
———————————————
#include

void main(void)
<
WDTCTL = WDTPW + WDTHOLD; // Stop WDT

BCSCTL1 |= DIVA_0; // ACLK/1
BCSCTL3 |= XCAP_3; // 12.5pF cap- setting for 32768Hz crystal
BCSCTL2 = SELS + SELM_2;

CCR0 = 512; // 512 -> 1 sec, 30720 -> 1 min
CCTL0 = CCIE; // CCR0 interrupt enabled
TA0CTL = TASSEL_2 + ID_3 + MC_1; // ACLK, /8, upmode

P1DIR = 0xFF; // All P1.x outputs
P1OUT = 0; // All P1.x reset

P2DIR = 0xFF; // All P2.x outputs
P2OUT = 0; // All P2.x reset

_BIS_SR(GIE); //interrupt Enable

while (1) // mainLoop
<

#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0 (void)
<
P1OUT ^= 0x01; // Toggle P1.0
>

IAR Embedded Workbench Kickstart — 4 кБт
Code Composer Studio — 16 кБт

Добавлено (25.12.2012, 22:50)
———————————————
Выкладываю инициализацию UARTа для связи с компьютером
скорость 9600 бод и подключен кварц 32768 Гц

void init_UART()
<
UCA0CTL1 |= UCSWRST; // Reset on USARTA
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600 = 3.41
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3
UCA0CTL1 &=

UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
>
void init_PORTS()
<
P1DIR = BIT1 + BIT2; // P1.1,2 outputs

P1SEL = BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD
P1SEL2= BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD

P1OUT = 0; // All P1.x reset

P2DIR = 0xFF; // All P2.x outputs
P2OUT = 0; // All P2.x reset
>

Добавлено (25.12.2012, 22:53)
———————————————
И обработчик прерывания
#pragma vector= USCIAB0RX_VECTOR
__interrupt void USCIAB0RX (void)
<
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF+1; // TX -> RXed character
unsigned int b = UCA0RXBUF;