mbed/LPC824 初心者メモ

mbedをはじめようと思って秋葉原まで買いに行ったはいいが色んな種類があるのね。下調べが足りてなくてどれを買えばよいか分からなかった。欲を出して安かった「mbed LPC824」を買ったら一般的なmbed「mbed LPC1768」と使い方がちょっと違って困ったので、色々調べたり参考になりそうなところをメモしておく。

ちなみにマイコン、プログラミング、電子工作の全てにおいて初心者なので記載内容のレベルは低め。記載内容に間違いとかあったら指摘してもらえると助かります。

外部電源

VINは無いですが、VBUS 5.0V OUTにプラス、GNDにマイナスを繋いでやると動きます。というか単三乾電池2個直列を繋いで動きました。

新規プロジェクト作成時のモジュール読み込み

新規で空のプロジェクトを作成した場合、mbed.hを含むモジュールを読み込まないとコンパイルが通らない。

新規で空のプロジェクト作成

/media/uploads/yasubumi/blank-program.png

左上にあるインポートボタンをクリック。検索窓にmbedと入れて検索。mbed officialの発行しているmbedなるモジュールを選択して、真ん中にあるインポート!ボタンを押す。

/media/uploads/yasubumi/import.png

ダイアログが表示されるので、Updateのところにチェックを入れる。Target Pathが組み込み先のプログラムの名前になっているか確認して、Importボタンを押す。

/media/uploads/yasubumi/import-setting.png

これでモジュールがインポートできるので、main.cppを新規作成しmbed.hをインクルードすればコンパイルが通るようになる。

プログラムの書き込みとその時のmbedの動作

プログラムをコンパイルすると「プログラム名_SSCI824.bin」なるファイルができるので、これをmbedドライブへコピペする。するとドライブが一旦切断されて再接続される。この時点ではまだ書き込んだプログラムは走らない。基板のリセットスイッチを押すと書き込んだプログラムが実行される。

給電LED

LPC824は基板にLEDが無いので、ブレッドボード上に給電したら点灯するLEDを組んでおくとちょっと安心。

/media/uploads/yasubumi/lpc824.jpg

13番PINのV-out(3.3V)とLEDのアノード(長いほう)を繋いで、カソード(短いほう)を330Ωの抵抗を使ってGND(26番PIN)に繋いであげてます。これで給電したときLEDが点灯するようになります。配置がいまいちなので結線の邪魔になるかも。

LPC824でLチカ

ここでいきなりつまずいたぞ。サンプルプログラムのコンパイルは通るけどそもそも基板にLEDが実装されてないので回路組まないといけない。IOピンをどうやってHIGH/LOW設定するのかわからない→これはサンプルプログラムそのまま。どうやってIOピンを出力に指定するのかわからない。→DigitalOut myled(dp21);のようにdp??とPIN番号を指定してやればOK。具体的にはサンプルプログラム「Blinky LED Hello World」を読み込んで、以下のようにDigitalOutの部分を変更してやれば良い。当たり前だがdp21にLEDの+を繋いで回路を組むのを忘れずに。

LED blink for LPC824

#include "mbed.h"

DigitalOut myled(dp21); // LED1をdp21(とか好きなPIN)に変える

int main() {
    while(1) {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}

スイッチマトリックス

スイッチマトリックスってなんか設定する必要あるのかしら?LPC824としてめっちゃフィーチャリングされてるので何か設定しないといけないかと思ったけど今のところはdp??でピン番号を指定して普通に使えてる。もっと使いこなそうと思うと必要になるのかもだけど、レベルにあってないので保留しておく。 →(自己回答)スイッチマトリクスのおかげでピン番号を指定するだけでいろんな用途に使えているってことだと思われ。

無限ループが勝手に止まる

while(1)でループ回してると18~19秒で勝手に処理が止まる。何度リセットしても同じなので内部的にいかれてるっぽい。そういえばTickerが暴走するバグがあって、mbedのRev.144を使わないといけなかったが同じか?現時点の使用リビジョンは最新の172.

ビンゴでした。mbedのリビジョンを144に変更してコンパイルしなおしたら治りました。

リビジョン145にして試したら大丈夫。。。と思ったら1分12秒でストップ。 このタイミングでおかしくなったっぽい。秒数が違うのはあふれるタイミングが変わっただけなんかね? 原因究明して対策したいが今のスキルじゃ無理だな。 mbedのリビジョンが古いと使えないモジュールがあって困る。

デバッグ用表示

mbedをCOMとして認識させてコンソール接続してデバッグ表示させる。Windowserなのでまずはドライバー入れてCOMとして認識するようにしてあげる必要がある。COMとして認識させてもドライブとしても認識するからその点は心配ない。

ドライバを入れたらコンソールで接続する。以下TeraTermでの接続例。

/media/uploads/yasubumi/teraterm.png

コンソールからこんにちは世界。USBさえ繋いでおけば特に他の回路は不要。

Hello World

#include "mbed.h"

Serial pc(USBTX, USBRX); // tx, rx

int main(){
    pc.printf("Hello World! \n\r");
}

プロフィールの画像変更

Chromeだとプロフィールの画像が変更できなかった。どうもFLASHプレーヤー無いとだめらしい。IEで実行したらすんなり変更できた。

参考になりそうなリンク

mbed LPC824で温度を計ってみたよ!

スイッチサイエンス公式のLPC824サンプル。サンプルの割りにいきなりハードル高い。紹介されてるLCDを買ってしまったのでマーケティングとしては優秀なのかも。

mbedで手作りオルゴール

スイッチサイエンス公式ブログからLPC824を使った作成例をもういっこ。

「mbed」で始めるARMマイコン開発入門

今後ベアメタルで使えるようになりたいのでその時参考にさせてもらおう。対象はLPC1114FN28。

「トラ技_mbedライブラリの作成方法の勉強会」資料

ここの資料を参考に開発を行っていきたい。上のLCDのライブラリに署名のあったTedd OKANOさんのNOTE。

「自宅で出来るリフローお試しキット」の紹介VTR

なんとなく見つけた自宅リフローの解説動画。ナレーションがなぜかツンデレ風?解説が無いがステンシルはどうやって作るのかしら??それが分かれば表面実装に汎用的に使えそうなんだが。。


Please log in to post comments.