[[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(おもしろかった[11],そうでもない[0],わかりずらい[0]) #vote(おもしろかった[12],そうでもない[0],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha