TI LaunchPad MSP430
Микроконтроллерные платформы TI LaunchPad представляют собой вполне удачную попытку крупной компании разработать свой собственный аналог Arduino. Всего линейка Texas Instruments LaunchPad насчитывает три устройства:MSP430 - на базе 16-битных микроконтроллеров семейства MSP430G2x с тактовой частотой 16МГц;
C2000 - использует 32-битные микроконтроллеры C2000 Piccolo 28x с тактовой частотой 60МГц;
Stellaris - на основе 32-битных Stellaris LM4F с архитектурой ARM Cortex MF4 и частотой 80МГц.
Данная статья посвящена самой младшей модели 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 включает в себя следующие элементы.
Макетную плату с установленным MSP430G2553.
Микроконтроллер MSP430G2452.
Внешний кварцевый резонатор на 32КГц.
Два 10-контактных переходника мама-папа.
Провод USB-miniUSB.
Инструкцию.
Два стикера с логотипом LaunchPad.
Размеры устройства - 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 раза, я рекомендую внимательно рассмотреть данную платформу как основу небольших проектов в робототехнике и домашней автоматике.