MARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled)

/media/uploads/nxpfan/img_2810z.jpg

!

This page has been written in Japanese only, sorry.

概要

MARMEX_OB拡張基板に搭載されたOLEDパネルをmbedから利用するためのライブラリです.
MARMEX_OB基板は,CQ出版より販売されている書籍『トランジスタ技術増刊「2枚入り!組み合わせ自在!超小型ARMマイコン基板」』に付属のMARY基板のオプションとして,マルツエレックより販売されておりOLEDと加速度センサを搭載しています.
このライブラリは,このOLEDに描画行うためのルーチンを提供します.
ライブラリ自体はNokiaLCDライブラリを拡張する形で作られており,このライブラリと同じインターフェースを用いて制御できます.

接続

MARMEX_OBとmbedの間はMAPLE基板を介して接続します.
MAPLE基板はmbed,LPCXpresso用のベースボードとして開発された基板で,2個のMARMEX(MARY拡張基板)用のスロットを備えています(これに加えてさらにもう1個のフリースロット(ジャンパ線などで配線する)が用意されています).
MAPLE基板を介してmbedとMARMEX_OBを接続する場合,MAPLE基板のジャンパとDIPスイッチをmbed用に設定する以外は特別な配線/設定は必要ありません.

コード

サンプルコードはMAPLE基板のスロット1と2を想定した接続を前提に書かれています.
このコードは次のURLからインポートしてください.

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詳細をご覧ください

Information

インポートしたプログラムはNokiaLCDライブラリを含んだ形になっています.
MARMEX_OB用ライブラリ「MARMEX_OB_oled,h」はNokiaLCDライブラリを利用しながら動作するようになっています.

/media/uploads/nxpfan/prj_marmex_ob.png

サンプルプロジェクトに含まれる「main.cpp」がこのライブラリを利用する例です.
NokiaLCDライブラリのサンプルと同様な例を載せてあります.

#include "mbed.h"
#include "MARMEX_OB_oled.h"

//  oled1 is for MARMEX_OB_oled board on MAPLE slot 1
//  oled1 is for MARMEX_OB_oled board on MAPLE slot 2

MARMEX_OB_oled   oled1( p5, p7,  p8, p30, p11 ); // mosi, sclk, cs, rst, power_control
//MARMEX_OB_oled   oled2( p5, p7, p26, p21, p17 ); // mosi, sclk, cs, rst, power_control


int main() {
    oled1.background( 0x000000 );
    oled1.cls();

    int colorbar_width  = MARMEX_OB_oled::WIDTH / 8;

    for ( int i = 0; i < 8; i++ )
        oled1.fill( colorbar_width * i, 0, colorbar_width, MARMEX_OB_oled::HEIGHT, ((i & 0x4) ? 0xFF0000 : 0x000000) | ((i & 0x2) ? 0x00FF00 : 0x000000) | ((i & 0x1) ? 0x0000FF : 0x000000) );

    oled1.fill(  50,  50,  64,  64, 0xCCCCCC );;

    oled1.locate( 0, 3 );
    oled1.printf( "Hello World!" );
    oled1.locate( 0, 4 );
    oled1.printf( "SPI = %s", MERMEX_OB_SPI_MODE_STR );

    for (int i = 0; i < MARMEX_OB_oled::WIDTH; i++ ) {
        oled1.pixel( i, 80 + sin( (float)i / 5.0 ) * 10, 0x000000 );
    }
}

動作確認

/media/uploads/nxpfan/img_2803.jpg
mbed,MAPLE,MARMEX_OBを接続すると上の写真のようになります.
サンプルコードを動作させると,このような表示がされます.

Information

この写真では2枚のMARMEX_OB基板をスロット1と2の両方に接続しています.
サンプルコードをそのまま動作させると上記写真のようにスロット1に接続されたOLEDが動作します.
OLEDを1個だけ動作させる場合には,もう片方のスロットが空いている状態で構いません.

Information

基板手前側にジャンパ線やブレッドボード部に部品が載っているのが見えますが,これはこのライブラリに必要な配線や部品ではありません.
(写真が暗いですが,これは節電中のオフィス内でOLED表示に露出を合わせたためこうなってしまいました)

2台のMARMEX_OB動作

/media/uploads/nxpfan/img_2810.jpg
上の写真の例は,2台のMARMEX_OBとキャラクタ液晶を動作させた例です.
キャラクタ液晶の動作のためにTextLCDライブラリをインポートし,次のようなコードで動作を確認しました.
"oled1"がスロット1,"oled2"がスロット2のOLEDとなっています.

#include "mbed.h"
#include "MARMEX_OB_oled.h"
#include "TextLCD.h"

//  oled1 is for MARMEX_OB_oled board on MAPLE slot 1
//  oled2 is for MARMEX_OB_oled board on MAPLE slot 2

MARMEX_OB_oled      oled1( p5, p7,  p8, p30, p11 ); // mosi, sclk, cs, rst, power_control
MARMEX_OB_oled      oled2( p5, p7, p26, p21, p17 ); // mosi, sclk, cs, rst, power_control
TextLCD             lcd(p25, p24, p12, p13, p14, p23); // rs, e, d0-d3


int main() {
    oled1.background( 0x000000 );
    oled1.cls();

    int colorbar_width  = MARMEX_OB_oled::WIDTH / 8;

    for ( int i = 0; i < 8; i++ )
        oled1.fill( colorbar_width * i, 0, colorbar_width, MARMEX_OB_oled::HEIGHT, ((i & 0x4) ? 0xFF0000 : 0x000000) | ((i & 0x2) ? 0x00FF00 : 0x000000) | ((i & 0x1) ? 0x0000FF : 0x000000) );

    oled1.fill(  50,  50,  64,  64, 0xCCCCCC );;

    oled1.locate( 0, 3 );
    oled1.printf( "Hello World!" );
    oled1.locate( 0, 4 );
    oled1.printf( "SPI = %s", MERMEX_OB_SPI_MODE_STR );

    for (int i = 0; i < MARMEX_OB_oled::WIDTH; i++ ) {
        oled1.pixel( i, 80 + sin( (float)i / 5.0 ) * 10, 0x000000 );
    }

    oled2.fill(  0, 0, 128, 128, 0xF1AC41 );
    oled2.fill( 32, 0,  96, 128, 0x867D4C );
    oled2.fill( 48, 0,  80, 128, 0x6BA3C9 );
    oled2.fill( 80, 0,  48, 128, 0x69934D );
    oled2.fill( 96, 0,  32, 128, 0xB8D14D );

    lcd.printf( "MAPLE base board" );
    lcd.printf( "mbed + MARMEX_OB" );
}

その他の情報

この他の詳細な情報は,このライブラリのページを参照してください.
http://mbed.org/users/nxpfan/programs/MARMEX_OB_oled__HelloWorld/lpa199/docs/

謝辞

このサンプルコードの作成にあたって,マルツエレック株式会社さんより,サンプルのハードやソフト,さらに貴重なアドバイスを頂きました.ありがとうございました.

変更履歴

日付更新内容
2011/04/07: MARMEX_OB基板OLEDライブラリ公開
2011/04/08: 公開プログラム0.51版アップデートに伴い,ソース例と詳細情報へのリンクを更新


Report

4 comments on MARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled):

05 Jun 2011

/media/uploads/s_s_s/_scaled_sh380145.jpg

特に工夫はありませんが、やってみたら表示できましたので報告します。 olet2へはolet1と同じモノを出力しました。

MARMEX_OB基板OLEDライブラリの公開に感謝します。

追加です。CANモニターに使用としているのですが、文字が小さくて見にくいです。 何かの機会に、倍角などの表示もできたらもっとありがたいです。

10 Jun 2011

ありがとうございます.お役に立てて何よりです! 文字表示はこのクラスが継承しているNokiaLCDライブラリ(mbed.orgが公開)に内蔵しているものをそのまま使っています.倍角などの表示にはその部分からの変更が必要と思われます.

この"MARMEX_OB_oled.h"ではできるだけ単純な実装を目指したため,NokiaLCDの内部を書き換えることはしませんでした.現状では横方向の表示文字数などに問題があるため,もし可能ならそれを含めて改善したいところなのですが..

..あるいは本格的にMARMEX_OB専用ライブラリを作るのでであれば,日本語を表示できるNokiaLCDライブラリNokiaLCD_With_JapaneseFontをベースさせていただくのが良いかも知れません.

11 Jun 2011

ライブラリの公開ありがとうございます。 簡単なC言語は使っていますが、ライブラリまでは手が出ません。

http://todotani.cocolog-nifty.com/blog/2011/05/lpcxpresso-lpc1.htmlに OLED MARY(LPC11xx)用のドライバを移植 してLPCXpresso LPC1769 でmary-OBの基板を使っているかたがおられます。 LPC1769はMebdのLPC1768のクロックアップ版らしいので、OLED MARY(LPC11xx)用のドライバを改造できないかと コンパイルしてみましたが、途中でメッセージがでてとまり、使うことは出来ませんでした。

01 Feb 2013

/media/uploads/diasea/_scaled_mary_oled.jpg

Haron fooさんのプログラムを元に、こちらのMARMEX_OB基板OLEDライブラリを継承して、日本語対応ライブラリを作成してみました。

MARMEX_OB基板OLED日本語対応ライブラリ(MARMEX_OB基板OLEDライブラリ継承版)

視認性が良く、気に入っています。

Please log in to post comments.