AITENDOのOLEDで階調表示
Aitendo様がOLEDモジュールの新しいのを出していますね。
乗っているOLEDは今までのと同じ128x64で、インタフェースが3種類から選べる、というもののようですが、使っている写真の富士山の絵はちょっと。。。。はめ込みなのは良いのですが、これ階調表示ですよね。。。しかも8階調くらいはあるような。
ちょうどあちこちで偽装表示が騒がれているこのタイミングで1bppモノクロディスプレイの紹介画像にこれはいかがなものか、と一瞬思いましたが。
1bppでも時分割表示すれば残像で階調は出せるな、と思い直しまして、OLEDでやったらどうなるか、昨日からちょっと試してました。
成果は下の写真です。
こんな感じでなんとか4階調だせました。
しかし正直に言うとデジカメのパラメータを調整したのでそれなりに写っていますが、実はかなりちらついています。
昔モノクロLCDで同じような階調表示を作った時はほとんどちらつきなくできました。今思うとSTN液晶だったので応答速度が遅いのが幸いして残像としてはきれいにみえたのかもしれません。
OLEDは応答速度が速いのがこういう制御では良くない方向にころぶのかな、と思っています。
大まかな原理は以下の通りです。
・仮想フレームメモリを1bppから2bppにする。
・OLEDへの転送をアセンブラ化して速くする。
・画面更新をソフトからの関数コールからタイマー割り込みにする。
・画面更新時に表示フレームごとに表示データにパターンの違うマスクを
かけて、ピクセルの階調ごとにオンオフを制御する。
せっかく作ったのでソースも公開します。
「GS_MAIN.c」をダウンロード :確認用メインです。
「graphics_gs.c」をダウンロード :階調表示対応グラフィックルーチンセットです。
各関数のcolパラメータに0〜3の階調を指定します。
「oled_ctrl_gs.c」をダウンロード :階調表示対応OLED操作ルーチンです。
「oled_trans.s」をダウンロード :OLED転送部の高速(アセンブラ)ルーチンです。
速度重視でとてもベタな書き方になっています。
「font8x8.h」をダウンロード :フォントデータ(変えてません)
「oled.h」をダウンロード :OLED定義(変えてません)
これで一応Aitendo様の写真は決して偽装表示ではない、と証明できた。。。らいいな、と思います。
同じような時分割制御で、もう少し階調を増やして、あとはカメラのシャッター速度さえ遅くしてやれば、あの写真と同じものは実機動作でもきっと撮れます。そこまではやりませんが。
OLEDへの転送速度をもっと早くすればちらつきも低減されるはずですが、今のところこれ以上速くする算段がつきません。多少のちらつきには目をつぶって、この次はこれで一度4階調を使ったソフトを何か作ってみたいと思います。
それではまたです。
最近のコメント