MSP-EXP430G2 представляет собой плату разработки (также известную как LaunchPad) от компании Texas Instruments, предназначенную для изучения и программирования всей линейки микроконтроллеров MSP430.
Ранее на нашем сайте мы уже рассматривали начало работы с платой MSP430G2 с помощью Energia IDE, являющейся фактически клоном Arduino IDE, в этой же статье мы рассмотрим основы работы с платой MSP430G2 с помощью Code Composer Studio и напишем с ее использованием программу мигания светодиодом. Никаких дополнительных компонентов нам для этого проекта больше не понадобится – только плата MSP430G2 и компьютер.
Плата разработки MSP-EXP430G2
С помощью отладочной платы (платы разработки) «великолепного» красного цвета MSP-EXP430G2 можно программировать всю линейку микроконтроллеров MSP430. Основная цель данной платы – загрузка кода программы из компьютера в микроконтроллер и считывание последовательных данных от микроконтроллера в целях отладки. Также плата содержит два светодиода и кнопку сброса, что упрощает процесс отладки программ. На следующем рисунке представлен внешний вид модификации данной платы MSP_EXP430G2 Rev1.5.
Наибольшим функционалом среди плат данного семейства обладает плата MSP430G2553 (именно ее мы и будем использовать в данной статье), которая содержит модуль последовательного порта (UART), что значительно упрощает процесс отладки программ с помощью Code Composer Studio.
Подача питания на плату и проверка ее работоспособности
Прежде чем начинать процесс разработки программ с помощью платы MSP430G2 на нее необходимо подать питание. Сделать это можно с помощью разъема mini USB. После подачи питания на плату вы должны заметить как последовательно зажгутся светодиоды красного и зеленого цвета. Вы можете нажать кнопку, подключенную к контакту P1.3 платы чтобы проверить работает ли встроенный в плату датчик температуры. Если вы прикоснетесь к нему пальцами, то он должен зафиксировать повышение температуры и, соответственно, должен загореться светодиод красного цвета, что будет свидетельствовать о повышении температуры.
Инструменты программирования для MSP430 LaunchPad
Компания Texas Instruments предоставляет для программирования своих микроконтроллеров широкий набор инструментов. Официальным среди них является Code Composer Studio, также известный как CCS. Оно бесплатно, но ее использование требует некоторых знаний о микроконтроллерах. Но мы в статье постараемся объяснить работу с ней максимально доступным языком, чтобы даже у начинающих в микроконтроллерах не возникли сложности с ее освоением.
Также популярной средой программирования для MSP430 LaunchPad является Energia IDE, основы работы с которой мы рассматривали в этой статье.
Energia IDE против Code Composer Studio: что лучше
Energia IDE является максимально простым инструментом для программирования микроконтроллеров от компании Texas Instruments. Фактически, Energia IDE является почти полным аналогом Arduino IDE, поэтому те, кто ранее работал с платформой Arduino, скорее всего для работы с платой MSP430G2 выберут именно Energia IDE.
Code Composer Studio (CCS) является более универсальным профессиональным инструментом с большим функционалом и более широкими возможностями по использованию архитектуры микроконтроллеров. Она содержит встроенный набор функций для отладки программ, с помощью которых можно достаточно просто находить ошибки в программу и производить отладку программ последовательно, запуская одну строчку программы за другой. Для работы с CCS вам потребуется более детальное представление об архитектуре используемого вами микроконтроллера чем если бы использовали Energia IDE. Скорее всего, вам необходимо будет заглядывать и в даташит на используемый вами микроконтроллер.
Если вы планируете заниматься написанием программ для микроконтроллеров компании Texas Instruments в промышленных целях, то в этом случае вам определенно больше понадобятся навыки работы именно в Code Composer Studio, а не в Arduino iDE или Energia IDE.
Скачивание и установка Code Composer Studio
Code Composer Studio доступно на веб-сайте компании Texas Instruments совершенно бесплатно. Вы можете скачать ее на официальном сайте www.ti.com (доступ к нему сейчас из РФ, к сожалению, закрыт, но можно попробовать через VPN или скачать ее через торрент). В нашей статье мы рассмотрим использование Code Composer Studio V7, но вы можете использовать и более свежие версии – основные принципы работы с данным программным обеспечением останутся такими же.
Вы можете скачать версию CCS либо для онлайн установки (то есть в процессе ее установки будет необходимо подключение к сети интернет), либо ее версию для офлайн установки – она будет весить достаточно много, около 1 Гб.
После запуска установочного файла на исполнение, вам, как обычно, необходимо будет согласиться с правилами установки и выбрать каталог для установки. Затем вам необходимо выбрать платы, для которых вы хотите скачать необходимые файлы. В нашем случае мы будем использовать MSP430 MCU. Вы можете скачать необходимые файлы более чем для одной платы.
В следующем окне необходимо будет выбрать опции отладки программ. По умолчанию, в этом окне можно будет выбрать одну опцию, можете выбрать ее и нажать на finish.
В конце процесса установки программа попросит указать вас каталог для работы – в этом каталоге будут сохраняться ваши рабочие файлы.
После установки и первого запуска окно программы Code Composer Studio будет выглядеть следующим образом.
Вы увидите очень простой интерфейс, в котором будет выбран пункт меню Getting started, из которого вы можете начать делать свой проект. Следующим пунктом меню будет пункт Resource Explorer – с его помощью вы можете найти всю необходимую документацию по продуктам компании Texas Instruments: даташиты и прочее. То есть нет необходимости искать нужный даташит в сети интернет – достаточно для этого использовать пункт меню Resource Explorer.
Создание проекта мигания светодиодом с помощью Code Composer Studio
Для создания проекта в CCS выполните следующую последовательность шагов.
Шаг 1. Выберите пункт меню File -> New -> CCS project как показано на следующем рисунке.
Шаг 2. Выберите используемую вами плату MSP. В нашем случае мы используем плату MSP430G2553.
Шаг 3. Введите имя для своего проекта и нажмите на finish. После этого откроется новое окно в нем уже будет написано несколько строк программы.
Написание кода программы в CCS
Давайте посмотрим на структуру кода программы, который выводится в окно по умолчанию. Первой строкой в нем идет подключение заголовочного файла, он будет зависеть от того какую плату мы будем использовать. В нашем случае, для платы MSP430G2553 мы переименовали этот файл следующим образом:
1 |
#include<msp430g2553.h> |
В следующей строке идет объявление главной функции программы main. Внутри этой функции мы видим инициализацию сторожевого таймера (Watchdog timer). Микроконтроллер MSP430 и другие микроконтроллеры от компании Texas Instruments содержат данный специальный таймер. Принцип работы данного таймера состоит в сбросе микроконтроллера при его зависании или некорректной работе. В нашем проекте мы не будем использовать сторожевой таймер поскольку наш проект предназначен для начинающих. По умолчанию при подаче питания на микроконтроллер сторожевой таймер автоматически включается в работу (ON), поэтому мы его отключаем (переводим в состояние OFF) с помощью следующей команды:
1 |
WDTCTL = WDTPW | WDTHOLD; |
После этого нам необходимо написать код программы мигания встроенным светодиодом платы, который подключен к контакту P1.0. Также на плате есть и другой встроенный светодиод, подключенный к контакту P1.6. Но мы будем использовать только первый светодиод.
Первым делом нам необходимо задать режим работы используемого контакта – на ввод (INPUT) или вывод данных (OUTPUT).
В микроконтроллерах присутствуют различные виды регистров, с помощью которых можно управлять состоянием портов (PORTS) микроконтроллера. В нашем проекте для задания режима работы порта на ввод или вывод данных мы будем использовать регистр PXDIR (Data Direction Register), где X – это номер порта. Если PXDIR равен 1, то порт работает на вывод данных (OUTPUT), а если 0 – то на ввод данных (INPUT). Используемый нами светодиод подключен к порту № 1, поэтому для управления им мы будем использовать регистр P1DIR.
Нам необходимо сконфигурировать контакт PIN 0, к которому подключен наш светодиод, для работы на вывод данных (OUTPUT). Каждый порт содержит 8 контактов (8 бит), а нам необходимо установить Bit0 в состояние HIGH чтобы задать режим работы на вывод данных. Поэтому мы присвоим регистру P1DIR следующее значение:
1 2 |
P1DIR = 0b00000001; it is in binary , we can also write it in Hexadecimal i.e. P1DIR = 0x01; |
Затем нам необходимо установить отдельный контакт порта в состояние high или low. Для этой цели мы будем использовать регистр P1OUT, 1 – для установки контакта в состояние high, 0 – для установки в состояние low. В начале работы включим светодиод (LED ON), установив BIT0 в 1, в остальные биты регистра запишем нули.
1 2 |
P1OUT=0b00000001; P1OUT = 0x01; //in hexadecimal |
Поскольку в микроконтроллерах MSP430 нет никакой собственной функции для организации задержек, то для этой цели мы будем использовать цикл. Поэтому на следующем шаге объявим переменную ‘i’, которую затем будем использовать в цикле для организации задержек.
1 |
Unsigned int i; |
Сначала мы подадим на PIN0 уровень HIGH, затем после некоторой задержки, организованной с помощью цикла, мы подадим на этот контакт уровень LOW. Таким образом, мы получим эффект мигания светодиода.
1 2 3 4 5 6 7 |
P1OUT=0X01; //make bit0 HIGH for(i=0;i<20000;i++){ // delay till you make LED HIGH } P1OUT=0X00; //make bit0 LOW for(i=0;i<20000;i++){ // delay till you make LED LOW } |
Этот фрагмент кода можно записать и по другому. Для уменьшения объема кода можно использовать оператор BITWISE. Доступны следующие побитовые (bitwise) операторы – OR, AND и XOR. Вы можете использовать оператор XOR (^) – исключающее ИЛИ. Результатом операции XOR является 0 когда оба бита равны, например, 1 и 1, или 0 и 0. В программе мы можем записать этот оператор следующим образом:
1 |
P1OUT ^= 0x01; |
что будет означать команду P1OUT = P1OUT xor 0b00000001;
То есть если вначале мы инициализируем P1OUT значением 0b00000001, и затем применим операцию xor со значением 0b00000001, то в результате мы получим 0b00000000, что будет означать что светодиод будет в состоянии OFF (выключен). И после этого мы запишем цикл для организации задержки.
1 2 3 4 5 6 7 |
while(1) { P1OUT ^=0X01; //toggle the bits for(i=0;i<20000;i++){ // delay till you make LED LOW HIGH } } |
Загрузка кода программы в MSP430
Полный код нашей программы мигания светодиодом приведен в конце статьи. Для загрузки кода программы в микроконтроллер MSP430 нам необходимо подключить нашу плату MSP430G2 к компьютеру с помощью кабеля USB.
Теперь нам необходимо скомпилировать и скомпоновать наш проект (compile/build), для этого выберите пункт меню Project -> Build All. Посмотрите отчет о результатах компиляции в нижнем углу окна консоли. Там должна появиться надпись “Build Finished”.
Теперь можно загружать программу в микроконтроллер. Нажмите на Click on Run -> Debug. После этого у вас появится окно с предупреждением об энергосбережении, нажмите в нем на proceed. В опциях отладки (debug option) выберите пункт Run->Resume. Если у вас в опциях все установлено правильно, то поводов для беспокойства нет, выберите пункт View->Debug и затем снова Run->Resume.
После того как ваша программа будет проверена на наличие ошибок (debugged) она будет загружена в микроконтроллер MSP. Более простым способом осуществить данные операции является нажатие кнопок play/pause в верхней панели инструментов. Экран отладки при этом будет выглядеть следующим образом:
Если светодиод не мигает нажмите кнопку сброса (Reset) на плате или заново подключите кабель USB.
Исходный код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <msp430g2553.h> // заголовочный файл, который будет зависеть от типа используемой вами платы /* * main.c */ int main(void) { WDTCTL = WDTPW | WDTHOLD; // останавливаем работу сторожевого таймера P1DIR = 0X01; // задаем режим работы контакта PIN0 порта PORT 1 на вывод данных (OUTPUT) P1OUT = 0X01; // первоначально устанавливаем на контакте PIN0 состояние HIGH unsigned int i; //переменная для организации задержек while(1) { P1OUT ^=0X01; ////переключаем состояние бита for(i=0;i<20000;i++){ // организация задержки } } return 0; } |