lbed

2014/02/11からのアクセス回数 4119

LPC810

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

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

  • DigitalIn
  • DigitalOut
  • Wait API
  • I2C

開発環境のインストール

NXPの開発環境LPCXpressoのインストール方法は、nxpfanさんの 「LPC810 (= DIP8_ARMマイコン) + LPCXpresso」で,Lチカ (LED点滅)プログラムを動かしてみる を参考にしてください。

lbedライブラリを使うには、以下のライブラリをインポートしてください。

  • ライブラリ:lpcxpresso/Examples/NXP/LPC800/LPC8xx_Libraries.zip

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

lbedのインストール

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

LBED_LPC810のインポート

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

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

サンプルプログラムの実行

サンプルプログラムとして、src/examplesに以下の3つが入っています。

  • Blink.cpp: LEDを1秒間隔で点滅するプログラム
  • ButtonSwitch.cpp: タクトスイッチを押すとLEDが点灯するプログラム
  • I2cLCD: 秋月のI2C LCD (AQCM0802)を使った表示プログラム

examples.png

LEDチカチカ

最初にLEDを1秒間隔で点滅するBlinkを動かしてみます。

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

LBED_pin.png

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

Blink_bread.png

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

Blink_setting.png

Blinkの実行

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

/*
  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アイコン(右向きの緑の三角)をクリックします。

debug_icons.png

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

ボタンで点灯

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

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

ButtonSwitch_bread.png

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

ButtonSwitch_setting.png

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

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

ButtonSwitch.cppのソース

/*
  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につなぐ

最後に秋月から販売されているI2C接続のLCD(AQCM0802)を使った例を示します。*1

配線は、以下の通りです。

  • LPCの8番をAQCM0802の4番SDAに接続
  • LPCの2番をAQCM0802の3番SCLに接続

AQCM0802の結線は、

  • 1番, 2番をVCCに接続
  • 5番をGNDに接続

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

I2cLCD_setting.png

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

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

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

/*
  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 ;
}

おわりに

こんな感じで、mbedと同じように使えますので、LPC810版のmbedがでるまでlbedで遊んでみてください。

コメント

選択肢 投票
おもしろかった 11  
そうでもない 0  
わかりずらい 0  

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


(Input image string)


*1 AQCM0802は、プルアップ抵抗のハンダを付けてください

添付ファイル: fileLBED_LPC810.zip 359件 [詳細] fileLBED_pin.png 400件 [詳細] fileI2cLCD_setting.png 400件 [詳細] fileexamples.png 384件 [詳細] filedebug_icons.png 347件 [詳細] fileButtonSwitch_setting.png 412件 [詳細] fileButtonSwitch_bread.png 396件 [詳細] fileBlink_setting.png 410件 [詳細] fileBlink_bread.png 383件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-06-04 (土) 14:45:34 (291d)
SmartDoc