Special
» 2013年10月25日 00時00分 UPDATE

宮崎 仁のマイコン基礎の基礎:第13回 無償版ソフトと安価な開発キットで始める、MSP430™ LaunchPadによるハードとソフトの開発

[PR/EDN Japan]
PR

 前回に引き続き、テキサス・インスツルメンツ社(TI)のMSP430™ LaunchPadバリュー・ライン開発キットを用いて、実際のマイコンのハードウェア、ソフトウェアの開発方法を体験しながら学んでいきます。今回は、ボード上のスイッチLEDを利用する簡単なプログラムを書いて、実行してみましょう。

スイッチを押すと2個のLEDが交互に点滅するプログラム


 MSP430 LaunchPadのターゲット回路には、手軽に利用できる入力デバイスとして2個の押しボタン・スイッチ、出力デバイスとして2個のLEDランプが搭載されています(図1)。まず、これらを利用する簡単なプログラムを作成・実行してみましょう。LaunchPadのボードはUSBケーブルでパソコンに接続しておきます。

 プログラムの作成と実行には、無償で提供されている統合開発環境のCode Composer Studio(CCS)を使用します。この記事では、CCSのVer.5.4を使用しています。CCSの入手とインストールの方法は、前回の記事を参照してください。

mm131025ti_miconbasic_fig1.jpg 図1 MSP430 LaunchPadターゲット回路のスイッチとLED

(1) 新しいプロジェクトの作成

 CCSを最初に起動すると、図2の"Welcome"起動画面が表示されます(2回目以降は、通常のCCS画面から起動)。"New Project"をクリックすると図3の"New CCS Project"というウィンドウが開いて、作成するプロジェクトの名前やその他の情報を設定できます。

 図3(1)のProject Nameボックスにプロジェクト名を入力します。ここでは、スイッチでLEDを点滅(blink)させるので、"SW-Blink-LED"としました。その下のOutput Typeは、デフォルトの"Executable"(実行可能プログラム)を選びます。

 図3(2)〜(4)のボックスでは、使用するマイコンを設定します。Familyの(2)はデフォルトの"MSP430"を選び、Variantの(3)は"MSP430Gxxx Family"、(4)は実際に使用するマイコンを選びます。ここでは、開発キットに付属の"MSP430G2553"を選びました。

 すぐ下のConnectionでは、ホストPCと開発キットの接続方法を設定します。ここでは、"TI MSP430 USB1 [Default]"を選びます。

 図3(5)のボックスでは、プロジェクトのひな形(template)またはサンプル(sample)を選択します。新しいプロジェクトの作成には"Empty Project(with main.c)"を選択します。これは、ソース・ファイルmain.cのひな形を含む空のプロジェクトです。

 以上の選択ができたら、一番下の"Finish"ボタンをクリックします。

mm131025ti_miconbasic_fig2.jpg 図2 初回に表示されるCCSの起動画面
mm131025ti_miconbasic_fig3.jpg 図3 新規プロジェクト情報の設定画面(New CCS Project)

(2) main.cのひな形

 空のプロジェクト"Empty Project(with main.c)"の作成を選択すると、ソースを書くためのエディタにmain.cのひな形が表示されます(図4)。

 1行目の「#include 」は、ヘッダ・ファイルの指定です。C言語では、マイコンの機種や使用する関数ライブラリに依存する記述は、通常はヘッダ・ファイルとして取り込みます。ここは、今回使用するマイコンのもの(msp430g2553.h)に変更します。

 6行目の「int main(void) {」と、9行目の「return 0;」は、OSの管理下で実行するプログラムに必要な、main.cの戻り値を定義する記述です。単独に実行するプログラムの場合、6行目は「void main(void) {」に変えてmain.cの戻り値をなくし、9行目は削除する方が良いでしょう。

 7行目の「WDTCTL = WDTPW | WDTHOLD;」は、WDT(ウォッチドッグ・タイマ)をオフにする記述です。WDTはプログラムの暴走を検出してマイコンを停止する機能で、高信頼性が要求されるシステムで使用します。MSP430は起動時に自動的にWDTがオンになるので、プログラムの先頭で必ずWDTをオフにしておきます。

mm131025ti_miconbasic_fig4.jpg 図4 エディタの初期画面(main.cのひな形)

(3) main.cの改造

 図4のひな形を元に、次の仕様のmain.cを作ってみましょう。

(1)電源を投入するとLED2(緑)が点灯する。
(2)スイッチS2を押している間は、LED1(赤)とLED2(緑)が交互に点滅する。
(3)S2を放すと、そのとき点灯していた方のLEDが点灯し続ける。

 LEDを点灯/消灯したり、スイッチの状態を読み込むには、汎用デジタルI/OポートP1(P1.7〜P1.0)を使用します。図1に示したように、P1.0にLED1(赤)、P1.6にLED2(緑)が接続されていて、ポート出力を"H"にすれば点灯し、"L"にすれば消灯します。また、P1.3にスイッチS2が接続されていて、S2を押せばポート入力は"L"になり、放せば"H"になります(ただし、後述のようにプルアップ抵抗の設定が必要)。

 ポートP1にアクセスするには、方向レジスタP1DIR、出力レジスタP1OUT、入力レジスタP1INなどの8ビットレジスタを使用して、ビットごとに操作を行います(図5)。次のようなビット操作用の定数BIT0、BIT3、BIT6を利用できます。定数は16ビット幅ですが、レジスタは8ビット幅なので、上位の00は無視されます。

#define BIT0 (0x0001)
#define BIT3 (0x0008)
#define BIT6 (0x0040)

 仕様に従って作成したプログラム例を図6に示します。7〜12行目で、デジタルI/Oポートの初期設定を行います。その後は、14〜19行目の処理を無限に繰り返します。

 7行目の「P1DIR |= BIT6 | BIT0;」は、他のビットに影響を与えずにP1DIRのBIT6とBIT0に"1"を書き込みます。方向レジスタP1DIRに"1"を書き込んだビットは出力に、"0"を書き込んだビットは入力になります。ここでは、P1.6とP1.0が出力に設定されます。

 8行目の「P1OUT |= BIT6;」は、他のビットに影響を与えずにP1OUTのBIT6に"1"を書き込みます。9行目の「P1OUT &= ~BIT0;」は、他のビットに影響を与えずにP1OUTのBIT0に"0"を書き込みます。これによって、P1.6に"H"、P1.0に"L"が出力され、LED2(緑)だけが点灯します。

 10行目の「P1OUT &= ~BIT3;」は、他のビットに影響を与えずにP1DIRのBIT3に"0"を書き込みます。これによって、P1.3が入力に設定されます。ただし、P1DIRは起動時にすべて"0"に初期化されるので、この10行目は省略してもかまいません。

 11〜12行目の「P1REN |= BIT3;」、「P1OUT |= BIT3;」は、他のビットに影響を与えずにP1RENとP1OUTのBIT3に"1"を書き込みます。これによって、P1.3の内部プルアップ抵抗が有効になります。ターゲット回路のP1.3にはスイッチS2だけが接続されていて、S2を押せば"L"になりますが、放したときの電圧レベルは不定です。内蔵抵抗でDVCCにプルアップすることによって、S2を放したときの電圧レベルが"H"に決まります。

 14行目の「for(;;) {」から19行目までは無限ループで、その内側の処理を無限に繰り返します。

 15行目の「if ((P1IN && BIT3) == 0) {」から18行目までは、P1INのBIT3の値が"0"のとき(すなわちS2が押されたとき)だけ実行されるif文です。

 if文に入ると、16行目の「P1OUT ^= BIT6 | BIT0;」によって、他のビットに影響を与えずにP1OUTのBIT6とBIT0が反転します。初期状態はP1.6が"H"、P1.0が"L"でしたが、この命令を実行するごとに"H"と"L"が入れ替わり、2個のLEDが交互に点滅します。さらに、17行目の「for (i = 0; i < 20000; i++);」は20000回の空ループで、LEDがゆっくり点滅するように時間待ちを行います。

mm131025ti_miconbasic_fig5.jpg 図5 デジタルI/OポートP1のアクセス方法
mm131025ti_miconbasic_fig6.jpg 図6 改造したmain.c

(4) プログラムのビルドとデバッグ

 図6のようにmain.cの記述を書き直したら、ビルドによって実行可能プログラムに変換します。図6の「ビルド」ボタンを押せば、コンパイラ、リンカが起動して、実行可能プログラムが生成されます。

 ビルドが終了すると、図7のように下部のConsoleウィンドウに"Build Finished"のメッセージが出ます。右下のProblemsウィンドウに12個の警告(Warnings)が表示されますが、これはヘッダ・ファイルの定義に関するものなので無視して大丈夫です。ただし、自分が記述した部分に対して警告が出たときは、修正が必要な場合があります。

 Problemsウィンドウにエラー(Errors)が表示されたときは、記述の誤りなので、エラーメッセージを参照して修正しなければなりません。

 図7のようにエラーなしにビルドが終了すれば、「デバッグ」ボタンを押してデバッグを開始します。ここで、図8のようにULP Advisorのメッセージが出ることがあります。これは、記述したプログラムをもっと低消費電力にするためのアドバイスですが、ここでは無視して「続行する」(Proceed)ボタンを押します。すると、デバッガが起動して実行可能プログラムをMSP430 LaunchPadに転送し、CCSは図9のデバッガ画面に変わります。

 図9の「レジューム」ボタンを押せば、転送したプログラムが実行されて、ターゲット回路のLED2(緑)が点灯します。スイッチS2を押せばLED1(赤)とLED2(緑)が交互に点滅し、放せばそのとき点灯していたLEDが点灯し続けます。

 図9の「終了」ボタンを押せば、デバッガが終了して図7の画面に戻ります。なお、転送されたプログラムはMSP430 LaunchPadのフラッシュ・メモリに書き込まれているので、この後CCSを終了しても実行を続けます。

mm131025ti_miconbasic_fig7.jpg 図7 ビルドの完了
mm131025ti_miconbasic_fig8.jpg 図8 ULP Advisorのメッセージ
mm131025ti_miconbasic_fig9.jpg 図9 デバッグ画面

※MSP430はTexas Instruments Incorporatedの商標です。その他すべての商標および登録商標はそれぞれの所有者に帰属します。

TIのマイコン製品の詳細はこちら

宮崎 仁のマイコン基礎の基礎 第14回「MSP430 LaunchPadの表示機能を拡張する〜7セグメントLED回路とプログラミング〜」は11/25(月)の公開を予定しています。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.


提供:日本テキサス・インスツルメンツ株式会社
アイティメディア営業企画/制作:EDN Japan 編集部/掲載内容有効期限:2014年3月31日

設計に役立つヒント集

宮崎 仁のQ&Aでよく分かるマイコン基礎の基礎:
第24回 割り込みっていろいろあるのですか?どんな種類があるか教えてください。

今回は、外部割り込み、内部割り込み、ソフトウェア割り込みについて詳しく解説しています
全文を読む


電源IC選択のヒント集
電源IC 使用時の注意点をわかりやすく説明しているほか、使用時に発生する可能性のあるさまざまなトラブルとその対処法についても紹介しています。ぜひご利用ください。ダウンロードには myTI アカウントが必要です。
Part 1をダウンロード
Part 2をダウンロード


アナログ回路設計式一覧ポケット・ガイド
日本語版 PDF

英語版で高い評価を受けてきたポケット・ガイドの日本語版が完成しました。基板レベルやシステム・レベルの回路設計でよく使われるアナログ設計式を紹介しています。ダウンロードには myTI アカウントが必要です。
ダウンロード



facebook & twitter

製品情報、セミナーや展示会などのイベント情報をお知らせしています。

RSSフィード

EDN 海外ネットワーク

All material on this site Copyright © 2005 - 2017 ITmedia Inc. All rights reserved.
This site contains articles under license from UBM Electronics, a division of United Business Media LLC.