TI LaunchPad MSP430

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

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

Макетная плата TI LaunchPad MSP430 снабжена сокетом DIP-20 и поставляется в наборе с двумя микроконтроллерами серии MSP430G2x. Чипы отличаются друг от друга количеством памяти, числом выводов и набором последовательных портов. Ниже представлена сравнительная таблица этих двух устройств:

Помимо перечисленного в таблице, контроллер имеет в своем составе датчик температуры, сторожевой таймер и компаратор. Встроенные 16-битные таймеры имеют поддержку ШИМ. На плате также размещаются два светодиода на контактах P1.0 и P1.6, кнопка сброса и кнопка в разрыв вывода P1.3.

Покупка

Приобрести данное устройство можно в собственном интернет-магазине TI (estore.ti.com) по чрезвычайно низкой цене - $4.30. Доставка включена в стоимость товара, что достаточно необычно для "неазиатского" магазина. А что самое удивительное, два устройства были доставлены мне всего за одну неделю посредством весьма недешевой почтовой службы FedEx. Подозреваю что стоимость доставки раз в пять превысила стоимость товара. Такое транжирство американцев можно объяснить либо засилием внутрикорпоративной бюрократии в TI, либо попыткой посодействовать популяризации своей платформы. И если это было последнее, то оно сработало - мы заказали еще 4 подобных контроллера, а также два устройства из серии Stellars.

      

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

Стандартная комплектация LaunchPad MSP430 включает в себя следующие элементы.

Размеры устройства - 66мм x 51мм. Расстояние между выводами как и положено 2.54мм (0.1''). Расстояние между рядами - 45мм.

Распиновка

Программирование LaunchPad

Для составления программ TI рекомендует использовать свой родной IDE Code Composer Studio, либо сторонний платный IAR и систему с открытыми исходным кодом MSPGCC. При этом, дабы не открывать платный функционал IDE каждому встречному, CCS имеет особый тип лицензии для MSP430 устройств, имеющий ограничение по размеру программы - 16Кб. Также имеется особая Free лицензия для контроллеров на базе Stellaris (и ряда других).

TI Code Composer Studio

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

На wiki-сайте TI имеется подробная инструкция по установке IDE и по созданию первого проекта для MSP430. Вкратце,  алгоритм программирования устройства выглядит следующим образом.

1. Запускаем CCS и указываем папку для хранения проектов.

2. Создаем новый проект через пункт меню "File / New / CCS Project".

2.1. В появившемся окне заполняем поле "Project name".

2.2. В поле "Family" указываем семейство микроконтроллеров - MSP430.

2.3. В поле "Variant" - "MSP430Gxxx" Family и "MSP430G2553".

2.4. И наконец, в разделе "Project templates and examples" указываем "Empty projects / Empty project".

3. В папке созданного проекта создаем новый файл "File / New / Source File".

4. Пишем в этом файле программу для мигания светодиодом и сохраняем проект.

5. Подключаем LaunchPad к компьютеру через USB.

6. В панели инструментов жмем кнопку "Debug".

7. Если при компиляции программы не возникнет никаких проблем, откроется окно отладчика, где нажмем кнопку "Run".

8. Смотрим как LaunchPad весело мигает светодиодом.

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

Energia

Energia по своей сути является модифицированной версией Arduino IDE, разработанной специально для программирования LaunchPad MSP430. Интерфейс IDE полностью совпадает с прародителем, за исключением цвета. Таким образом, с помощью Energia вы можете легко использовать Arduino-вские скетчи для LaunchPad.

Перед использованием Energia, потребуется установить драйвера для LaunchPad. Драйвера можно скачать со странички Energia на git-hub. Если у вас уже установлен TI CCS, то этот шаг можно опустить.

Затем необходимо скачать сам IDE, который также как и Arduino IDE поставляется в виде zip-архива. В распакованном архиве имеется исполняемый файл energia.exe, который и запускает Energia.

В меню "File / Examples" имеется практически такой же как в Arduino набор примеров простых программ. Готовая программа загружается на LaunchPad также с помощью кнопки "Upload" на панели инструментов. 

Единственным недостатком данного IDE является тот факт, что программировать с помощью него можно только младшую версию LaunchPad - MSP430. Если же возникнет необходимость  работы с LaunchPad C2000 или Stellaris, то потребуется использовать родной TI CCS, в котором кодирование представляется куда более сложным.

Особенности программирования на TI CCS

Как уже говорилось выше, на сайте TI имеется подробная инструкция по программированию LaunchPad для мигания встроенным светодиодом. Программа, разработанная в среде CCS, выглядит следующим образом:

LaunchPad Blink Led

#include <msp430g2553.h>

unsigned int i = 0;

void main( void ) {

    WDTCTL = WDTPW + WDTHOLD;

 

    P1DIR |= 0x01;

    while( 1 ) {

        P1OUT ^= 0x01;

        for( i=0; i<20000; i++);

    }

}

Разберем подробнее код, который поначалу может показаться немного "диким" по сравнению с Arduino или Energia. Итак, первая строчка в функции "main" имеет вид:

WDTCTL = WDTPW + WDTHOLD;

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

P1DIR |= 0x01;

Регистр P1DIR содержит 8 бит, каждый из которых соответствует тому или иному каналу. Чтобы канал порта работал на ввод, нужно записать в соответствующий бит регистра ноль. Для режима вывода, напротив, требуется установить единицу. Располагаются биты в следующем порядке:

P1DIR = <PIN7><PIN6><PIN5><PIN4><PIN3><PIN2><PIN1><PIN0>

Таким образом, чтобы установить режим вывода для канала P1.0 следует записать в нулевой бит регистра P1DIR значение 1, что и было сделано в исходной команде. В Arduino, аналогом данной процедуры является функция pinMode.

В отличие от регистра P1DIR задающего режим ввода/вывода, P1OUT содержит значения, выводимые в соответствующие каналы порта №1. Следовательно, чтобы зажечь встроенный светодиод на ноге P1.0 мы записываем в P1OUT значение 00000001. Чтобы отключить ногу от питания, записываем в указанный регистр значение 00000000. В коде это будет выглядеть так:

P1OUT = 0x01; 

Здесь 0x01 - шестнадцатиричное представление числа 00000001. В Arduino, аналогом этого выражения является функция digitalWrite.

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

if( P1OUT == 0x01 )

    P1OUT = 0x00;

else

    P1OUT = 0x01;

Ну и наконец для обеспечения временной задержки запускается пустой цикл из 20000 итераций.

Гуманизация кода TI CCS

Для человека привычного к Arduino или mbed, работать с таким ненаглядным кодом может быть достаточно неудобно. Именно поэтому добрые люди попробовали упростить разработку программ MSP430 на TI CCS с помощью определения знакомых функций pinMode, digitalWrite и delay. Примером такой гуманизации является вспомогательный файл-заголовок friendly_launchpad.h, от Криса Гилберта (Chris Hulbert).

Итог

В заключении хочется еще раз повторить, что Texas Instruments, в лице LaunchPad MSP430, создали очень удачный в техническом плане аналог Arduino. А благодаря Energia IDE разработка программ для LaunchPad стала такой же простой и понятной как и для Arduino.

Учитывая, что стоимость LaunchPad ниже самой дешевой китайской Ardiuno Nano ($12) почти в 3 раза, я рекомендую внимательно рассмотреть данную платформу как основу небольших проектов в робототехнике и домашней автоматике.

Ресурсы