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