マイコン工作実験日記

Microcontroller を用いての工作、実験記録

Nokia 5110を使ってみる

2008-09-09 00:11:34 | LCD
VoIP GWにつなげたNokia 5110の動作確認デモを作成してみました。このLCDは3.3Vで動作し、SPIでつなげられるので、AT91SAM7のようなマイコンで使うには非常に便利です。aitendoで販売されているものは、LCD自体は中古品ですが、2.54mmピッチのランドを持った基板が用意されているので、工作も容易で助かります。実際に使ってみると、外観に比して表示可能領域がちょっと狭いかなという印象でしたが、値段は安いし表示も見やすいので満足しています。(動画はピンボケになってしまっていますけど)




このNokia 5110は 84 X 48ドットを表示することができます。Nokia 6610のようなカラーLCDでは1ドットを描くにも12bitで色指定をする必要がありましたが、Nokia 5110はモノクロなので、1バイト書き込むだけで(画面縦方向に)8ドットを描画できてしまいます。逆の見方をすれば、1ドットだけを変更する操作はできないので、必要であれば画面表示内容をMCU側で覚えておく必要があります。全画面を覚えるには 84*48/8 =504バイトのRAMが必要となりますが、64KBのRAMを持つAT91SAM7X256にはさほどの負担ではありません。

コントローラであるPCD8544の使い方はいたって簡単なのですが、初期化のパラメータだけはどうすれば良いのかピンときません。Simさんの記事にトラ技2006年12月号の記事にこのコントローラの説明があり、プログラムもダウンロードできるとの記述があったので、そのプログラムの初期化パラメータを拝借しています。

デモではLCDへの描画ルーチンは、RAM上のバッファに描画した内容をDMAを使って全画面分LCDに書き出すというだけの処理しか使っていません。SPIのクロックは最大4MHzなので、全画面を書き換えても1msほどで終了します。スクロールの処理はRAM上の内容を左右あるいは上下にシフトして、全画面をLCDに書き出すことで実現しています。1ドットづつスクロールしていますが、毎回10msの間隔をおいています。

最後に使用しているフォントについて言及しておきます。英文フォントについては、Nokia 6610 LCDの頃から使用しているものを使っています。Sparkfunの同LCDのページで紹介されているJimboのサンプルに含まれていたフォントを使っています。デモでは6x8ドットのフォントを使っています。5110では一度に縦方向8ドットを書き込むわけですから、高さが8の倍数のビットマップが扱いやすいわけです。ただし、6610用のフォントは下の図に示すように横方向にスキャンしたビットマップになっています。そこで、これを5110用に縦方向にスキャンしなおしたものに変換して使用しています。



日本語のフォントについては、以前この記事この記事で書いたようにIPA GUIフォントを使用しています。以前作成したツールを改造して、5110用のビットマップに相当するC言語の配列定義を吐き出すプログラムをLinux上で作成しました。こんな感じで使っています。

% nokiaimg -10 ipagui.ttf "マイコン工作実験日記" > string_data.c

オプションの-10でサイズ(10ポイント)を指定して、TrueTypeフォントのipagui.ttfを使って指定された文字列を描画し、画面サイズ分のビットマップを作成しています。