[lang:ja] mbed LPC1114でMARY基板とOLED基板を使ってみる

つかいかた

CQ出版の「組み合わせ自在!超小型ARMマイコン基板」の附属基板であるところのMARYもLPC1114なので、数人の人が遊んでみてくれています。
一応OLEDはカンタンに使う事ができます。
NXPさんの公開している、次のプログラムをimportし、

Import programMARMEX_OB_oled__HelloWorld

A class library for OLED on MARMEX_OB board. MARY拡張のMARMEX_OB基板のOLEDをmbed+MAPLE基板で動かすためのライブラリです.このサンプルではMAPLEに用意されているMARMEXスロットの1番に搭載したOLEDを制御するようになっています.詳細はCode&APIからソースやAPI詳細をご覧ください

main.cpp

MARMEX_OB_oled   oled1( P0_9, P0_6, P0_2, P1_8, P1_4 );

と言った具合にピンの指定を変更してやれば動きます。
あとはimportしたあとにmbedライブラリのリビジョンを新しくして、ターゲットをLPC1114としてコンパイルするだけでした。
余談ですが、LPC1114FN28以外のLPC1114で使うときには、Pほげほげ記法で書くと楽です。

実は、mbedライブラリ rev.66、つまりLPC1114に対応した時点のバージョンではクロックがPLLで逓倍されたものではなく、IRCのままを使ってしまっていました。
このコードをmbedライブラリ rev.66と共にコンパイルするとOLEDの表示にはとても長い時間を要してしまいます。
試しにSCLKにオシロを当ててみると、このような波形が出力されています。LPC1114のコアクロックよりも速いSCLKを出力させようとして、意図しない結果になってしまっていました。

rev.67

クロックなどの問題を修正したrev.67がリリースされましたが、このrev.67では今まで動いていたOLEDが動かないという報告をいただきました。
OLEDとの通信はMARMEX_OB_oled.hで次の様に定義されています。

MARMEX_OB_oled.h

SPI_FREQUENCY = 20000000

つまりSCLKを20MHzとしようとしているのですが、オシロを当てると

といった具合に20MHz以上でSCLKが出ています。20MHzはOLEDの定格ギリギリですので、これをもう少し小さい値にしてやると動くはずです。

私は5MHzや10MHzにしてみたところ、無事に動作しました。

5MHzにしてみたところ、このような波形が出力されていました。


参考資料


Please log in to post comments.