lynxeyedの電音鍵盤

MBDとFPGAと車載で使うデバイスの備忘録

mbedからOLEDに日本語表示しましたよ

Arduino並みの手軽さと高性能32bitを手に入れたプロトタイピングキットと皆さんがレビューされていたにも拘らず
何となくPrimer2の自由度の低さがトラウマになっていて「プロトうんちゃら」に触手が伸びなかったのですが、Twitterのフォロワーの皆様のブログなりつぶやきをみてて買ってしまいました。@秋月
f:id:Lynx-EyED:20100710195901j:image
LPC1768搭載のmbedです。ARM社によれば

mbed ライブラリは、低レベルのARM® CortexTMマイクロコントローラ・ ソフトウェア・
インタフェース規格(CMSIS)を発展させたもので、ベンダに依存しないCortex-Mプロセッサ・
シリーズ向けのハードウェア抽象化レイヤです。

とのこと。(参照元はこちら)

そのうちPSoC5バージョンなども出してくれると嬉しいです。で、詳しいレビューは他の方に任せるとして(マタソノ手カヨ。 オイ

せっかくOLEDあるんだし、使ってみようという事で使ってみました。
基本的なOLED制御用コードは前回OLEDをPSoCで制御したときのプログラムと変わりません。

ただし、mbedの特徴を生かす事にしました*1
mbedはテキストデータを内蔵ストレージに保存し、fopenで参照する事ができるので、これを活かし2バイト文字を参照する事にしました。
非漢字607種を含むJIS第1水準・第2水準で6962文字必要ですが面倒くさいなーと思っていたところ、sim様がmbedで既に日本語表示を華麗な手法で実現されていたので、ごっそり頂いてしまいました。畏れ多く、二度とsim様の方角に足を向けて寝る事ができません。お住まいはどちらなのでしょうか…。

フォントデータのテーブルは大人の事情で一部とびとびの値を持っているため、決めうちで*2フォントデータの配列にジャンプさせる事ができません。
こちらのフォントデータアクセス用テーブルもsim様のプログラムを頂戴しました。


ごめんなさい。ほぼ全パクりですorz


テキストデータを用意します。たとえば次の内容を改行無しでtest.txtという名前で保存します。エンコードはShift JISです。

吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た

mbedに保存します。
普通にUSBフラッシュと同じ手法です。ただのドラッグ&ドロップで保存。

この内容をmbedで参照するにはこのようにするそうです。(参考元はこちら)

   LocalFileSystem local( "local" );
    char            s[ 256 ];
    FILE            *fp;

    printf( "\r\nreading a message file.\r\n" );

    if ( NULL == (fp = fopen( "/local/test.txt", "r" )) ) {
        printf( "\r\nError: The message file cannot be accessed\r\n" );
        return -1;
    }

    fgets( s, 256, fp );
    fclose( fp );

printfはTeraTermやターミナルなどシリアルコンソールから覗く事ができます。
mac osxではターミナルで

$	screen /dev/tty.usbmodemxxx

と入力すると、コンソールからメッセージを見れます。(xxxは数字。)
で、めでたく表示できると
f:id:Lynx-EyED:20100709235042j:image
詳しい事は省略しますがこちらにソースコードを公開していますのでご覧ください。

次回はSDカードを制御しようと思います。

*1:ちなみに現段階では2バイト文字でprintf("日本語");などと書いてもコンパイラーがエラー吐いてしまい埒があかない状態です

*2:フォントの16進表記から一定値を引き算してフォント配列参照すること