2014/02/11からのアクセス回数 7741
トラ技2014年2月号、3月号には、8ピンのDIPマイコンLPC810とARMデバッガが付録として付いてきました。
この機会にmbedライクなクラスライブラリlbedをLPC810に移植してみます。今回移植したのは以下の4つです。
NXPの開発環境LPCXpressoのインストール方法は、nxpfanさんの 「LPC810 (= DIP8_ARMマイコン) + LPCXpresso」で,Lチカ (LED点滅)プログラムを動かしてみる を参考にしてください。
lbedライブラリを使うには、以下のライブラリをインポートしてください。
インポートしたら、最初にlpc800_driver_libをビルドしてください。
以下のZIPファイルをダウンロードし、解凍したフォルダーをLPCXpressoのworkspaceのディレクトリに入れてください。
ファイルメニューからimport…→General→Existing Projects into Workspaceを選択し、Browse…ボタンを押して、 先ほどコピーしたLBED_LPC810を選択します。
LBED_LPC810がProjectに現れたら完了です。
サンプルプログラムとして、src/examplesに以下の3つが入っています。
最初にLEDを1秒間隔で点滅するBlinkを動かしてみます。
LBEDで使用できるピン番号は、P1-P5, P8の6本です。
ブレッドボードの配線は、以下の様にします。トラ技3月号のARMデバッガは、ARM Debuggerのピンに 右につめて差します。
以下は、ARM Debuggerの代わりにLPC-Link2を付けているところです。
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アイコン(右向きの緑の三角)をクリックします。
LEDが1秒間隔で点滅すれば成功です。
次に、タクトスイッチを押したときにLEDが点灯する例題ButtonSwitchを動かしてみましょう。
以下の様にBlinkにタクトスイッチを追加します。
実際の配線は、以下の様にしました。
プログラムは、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(AQCM0802)を使った例を示します。*1
配線は、以下の通りです。
AQCM0802の結線は、
また、LEDをP5に変更します。
プログラムは、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で遊んでみてください。
皆様のご意見、ご希望をお待ちしております。