[[lbed]]

#contents

2014/02/11からのアクセス回数 &counter;


** LPC810 [#j2f668a7]
トラ技2014年2月号、3月号には、8ピンのDIPマイコンLPC810とARMデバッガが付録として付いてきました。

この機会にmbedライクなクラスライブラリlbedをLPC810に移植してみます。今回移植したのは以下の4つです。
- DigitalIn
- DigitalOut
- Wait API
- I2C

*** 開発環境のインストール [#y5d3dc0e]
NXPの開発環境LPCXpressoのインストール方法は、nxpfanさんの
[[「LPC810 (= DIP8_ARMマイコン) + LPCXpresso」で,Lチカ (LED点滅)プログラムを動かしてみる>https://www.facebook.com/notes/nxpfan/298643523596741]]
を参考にしてください。

lbedライブラリを使うには、以下のライブラリをインポートしてください。
- ライブラリ:lpcxpresso/Examples/NXP/LPC800/LPC8xx_Libraries.zip



インポートしたら、最初にlpc800_driver_libをビルドしてください。


** lbedのインストール [#jb945b4b]
以下のZIPファイルをダウンロードし、解凍したフォルダーをLPCXpressoのworkspaceのディレクトリに入れてください。

- &ref(LBED_LPC810.zip);

*** LBED_LPC810のインポート [#s8ad1dd9]
ファイルメニューからimport…→General→Existing Projects into Workspaceを選択し、Browse…ボタンを押して、
先ほどコピーしたLBED_LPC810を選択します。


LBED_LPC810がProjectに現れたら完了です。

** サンプルプログラムの実行 [#n3883b18]
サンプルプログラムとして、src/examplesに以下の3つが入っています。
- Blink.cpp: LEDを1秒間隔で点滅するプログラム
- ButtonSwitch.cpp: タクトスイッチを押すとLEDが点灯するプログラム
- I2cLCD: 秋月のI2C LCD (AQCM0802)を使った表示プログラム


&ref(examples.png);



** LEDチカチカ [#rc6528a3]
最初にLEDを1秒間隔で点滅するBlinkを動かしてみます。

LBEDで使用できるピン番号は、P1-P5, P8の6本です。

&ref(LBED_pin.png);



ブレッドボードの配線は、以下の様にします。トラ技3月号のARMデバッガは、ARM Debuggerのピンに
右につめて差します。

&ref(Blink_bread.png);


以下は、ARM Debuggerの代わりにLPC-Link2を付けているところです。

&ref(Blink_setting.png);



*** Blinkの実行 [#j9c1f238]
Blink.cppは、以下の様なプログラムです。
lbed.hをインクルードして、lbed_setupを呼ぶところがmbedと異なりますが、
他は同じようにプログラムできます。

#pre{{
/*
  Blink
  1秒間LEDを点灯し、1秒間消灯を繰り返す
 */

#ifdef __USE_CMSIS
#include "LPC8xx.h"
#endif

#include <cr_section_macros.h>

#include "lbed.h"

int main(void) {
     // lbedライブラリの初期化
     lbed_setup();
     // 8番ピンにLEDを接続
     DigitalOut     led(P8);
     while(1) {
          led = !led;          // LEDを反転する
          wait_ms(1000);     // 1秒待つ
     }
    return 0 ;
}
}}

Quickstart PanelからDebugをクリックするとコンパイルとLPC810への書き込みが自動的に行われ、
デバッガが起動して、main関数で止まります。

デバッグアイコンからResumeアイコン(右向きの緑の三角)をクリックします。

&ref(debug_icons.png);



LEDが1秒間隔で点滅すれば成功です。


*** ボタンで点灯 [#ga739826]
次に、タクトスイッチを押したときにLEDが点灯する例題ButtonSwitchを動かしてみましょう。

以下の様にBlinkにタクトスイッチを追加します。

&ref(ButtonSwitch_bread.png);


実際の配線は、以下の様にしました。

&ref(ButtonSwitch_setting.png);




プログラムは、Blink.cppをexamplesに戻し、代わりにButtonSwitch.cppをsrcに移して、デバッグアイコンを実行します。
デバッガがmainで止まったらresumeボタンを押します。

タクトボタンを押すとLEDが点灯することを試してみて下さい。

ButtonSwitch.cppのソース
#pre{{
/*
  ButtonSwitch
  スイッチを押すとLEDを点灯する
 */

#ifdef __USE_CMSIS
#include "LPC8xx.h"
#endif

#include <cr_section_macros.h>

#include "lbed.h"

int main(void) {
     // lbedライブラリの初期化
     lbed_setup();
     // 8番ピンにLEDを接続
     DigitalOut     led(P8);
     // 5番ピンにSWを接続
     DigitalIn     sw(P5);
     while(1) {
          led = !sw;          // SWは、アクティブローなので、!を付けて反転
          wait_ms(200);     // 0.2秒待つ
     }
    return 0 ;
}
}}


*** I2C LCDにつなぐ [#rb69330b]
最後に秋月から販売されているI2C接続のLCD(AQCM0802)を使った例を示します。((AQCM0802は、プルアップ抵抗のハンダを付けてください))

配線は、以下の通りです。
- LPCの8番をAQCM0802の4番SDAに接続
- LPCの2番をAQCM0802の3番SCLに接続

AQCM0802の結線は、
- 1番, 2番をVCCに接続
- 5番をGNDに接続

また、LEDをP5に変更します。

&ref(I2cLCD_setting.png);

プログラムは、ButtonSwitch.cppをexamplesに戻し、代わりにI2cLCD.cppをsrcに移して、デバッグアイコンを実行します。
デバッガがmainで止まったらresumeボタンを押します。

原因は不明ですが、デバッグをするとI2Cのプログラムが途中で止まってしまいます。(要調査ですね!)

I2cLCD.cppは、以下のとおりです。

#pre{{
/*
  I2cLCD
  秋月AQCM0802を使ったI2cLCDの例題
 */

#ifdef __USE_CMSIS
#include "LPC8xx.h"
#endif

#include <cr_section_macros.h>

#include "lbed.h"
#include "AQCM0802.h"

int main(void) {
     // lbedライブラリの初期化
     lbed_setup();
     /* I2C用スイッチマトリックスの設定 */
     I2C_SwitchMatrix_Init();
     // 5番ピンにLEDを接続
     DigitalOut     led(P5);
     // 8番ピンSDA, 2番ピンSCL
     AQCM0802     lcd(P8, P2);
     // カウンター
     int     counter = 0;
     lcd.print("Hello");
     while(1) {
          led = !led;
          lcd.locate(0, 1);
          lcd.print("cnt=");
          lcd.print(counter++);
          wait_ms(1000);
     }
    return 0 ;
}
}}


** おわりに [#yfaf83b1]
こんな感じで、mbedと同じように使えますので、LPC810版のmbedがでるまでlbedで遊んでみてください。

** コメント [#g802089b]
#vote(おもしろかった[9],そうでもない[0],わかりずらい[0])

皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc