2003年初版
2010.03.23 一部改定

自作ハードで、高品位な表示をしたい!

出来たっ!!読みやすい!?




フォント大好き

私は、フォントに結構興味があり、たくさんのWindows用のTrueTypeフォントやOTFフォントを買いました。
とにかくWindowsが普及してからというもの、PCでもプロポーショナルフォントがかなり一般化してきて、 英文字はとにかく読みやすく、より印刷物に近い表示が出来るようになり、僕も文書作成が楽しくなった事を覚えています。

電子工作も趣味であることから、組み込みハードで、自在にプロポーショナルなフォントを表示できたらいいなあ、と思うんですが、どこに表示するか(例えばテレビとか?)といった事が課題になりました。

テレビに出力するなら、OSDC(On Screen Display Controller)というICが既に存在していて、便利です。このICを使って遊んでみたものの、ビットマップじゃないので表示の自由度に欠け、会社でちょっと見せびらかした後、お蔵入りしました^^;

もちろん、グラフィカルな表示を実現するOSDCもあります


数時間で飽きたOSDC(4線シリアル制御→NTSC出力)
これは過去にPCのパラレルポートやAVRマイコンから制御してみたのです。



マイコン・電子工作で綺麗な表示を実現したい

カラー液晶は、秋葉や日本橋に行けばいくらでも購入できます。
でも、大抵コンポジットビデオ入力か、ビデオ入力の周波数でアナログデータを突っ込むタイプのRGBモニタです(よくあるパチンコが外した液晶ですね)。
タイミングがシビアで、マイコンには、荷が重いなあ。。。
なーんて思ってたら秋月電子通商ではデジタルRGB入力タイプのモニターを売ってました!

と思って購入したのが、2年以上前なのです…その間にも、無駄にディスプレイデバイスをたくさん買いました…(苦笑
注意:2010年3月23日時点で、秋月電子のサイトでの取り扱いはありませんでした。 aitendoさんあたりに似たようなものがあるかもしれません。

この液晶はシャープ製のLM32C041といい、320×240ドット512色同時発色のSTNカラー液晶パネルです。



電源の製作

なんとなく、電源を作ってみました。液晶駆動用に30V(5mA程度)が必要なのです。
昇圧回路をウェブで見てたら、「コッククロフト回路」というものを見つけました。
で、これを繋いで、一応電源完成!(バックライト昇圧用回路は秋月のものを使用)

というわけで、外部からは12Vを与えると、3端子レギで5Vを生成(液晶のロジック電源)、30Vをコッククロフト回路で生成(液晶駆動用)、12Vをそのまま使用(コッククロフト回路そのものの電源と、H8ボードの電源(UNREG))と、いろんなタイプの電圧が混在しています。

電源完成!(もちろんマイコンなんてつけてない)

映らないのはわかっていますが、まずは一旦電源を入れたくなり、試しに投入してみると…
ノイズっぽい点が出た出たぁ!!!

鮮やかに表示されたノイズの近接撮影

多分、無信号だから液晶の初期状態のゴミ(ノイズ)が映っているだけでしょう。

マイコン制御で表示してみたい

本当は、マイコン制御で文字列表示が出来れば、きっとおもしろいと思うのですが、まず手始めにはとりあえずカラーバーもどき(?)でも表示してみることにしました。

マイコンは、定番の日立さんのH8/300HシリーズのH8/3048F。
たまたま手元にあったからこれにしてみました。
コンパイラは、フリーのgcc-h8300を使用させていただきました。
マイコンから液晶へと制御の信号を(VD、HD、DCK、RGBデータ)を渡してみました。 なんか出た!!!

だけど、リセット解除後数回に一回しか表示しない。
オシロで見てみたら、信号タイミングが間違ってました。→即修正。

フォント製作

フォント、ここはやはり、16*16ドットの日本語フォントを入れたい…けどROMにそんなに入るかなあ。
これは次にやるとして、まずは英数字や記号などの1バイト系文字を表示できるようにしたい!!

やっぱりプロポーショナルフォント、しかも小さい文字で。

8×8ドット、プロポーショナルフォントがフリーで存在しているかはわかっていません。
しかし、この程度の規模であれば、フォントそのものをデザインする作業も手軽で楽しいのではと思います。 (ライセンスの心配をする必要もないしね!)

コラム:プロポーショナルフォントとは…
プロポーショナルフォントは、主に英数字において、フォントの幅を文字そのもののもつ一番美しく表現できる幅でそれぞれ表現するものです。
具体的には、例えば小文字のLや、小文字のIなど、幅の狭いフォントは表示上も狭く、そして主に大文字のフォントなど幅を要するものはちゃんと必要分の幅を確保して表示するというものです。


#一口コラム:このThe Quick...は、英語における"いろはにほへと..."に相当するようなもので、全てのアルファベットが使用されたセンテンスなのだそうです。
上はプロポーショナルフォント、そして下はプロポーショナルでないfixedフォント(等幅フォント)です。
シアンカラーのグリッドで比較していただければ、それぞれの幅の差がわかりやすいと思います。

フォントエディタの準備

専用のすばらしいソフトウェアは、世の中にたくさんあると思いますが、今回は、 お手軽に表計算ソフトのエクセルを使用しました。もしかするとその為に不必要な手間がかかっているかもしれませんが^^;
そして、エクセルのワークシート関数で16進データを吐かせます。
(以下のファイル、閲覧時にはエクセルのプラグインの「分析ツール」が必要)

8x8ドットプロポーショナルフォントデータ[ISHII-GOTHIC-P-FONT8](エクセル形式)
これを最終的にCのソースに落とし込む時に、Muleキーマクロsedを使用しました。
この辺の解説も後ほどやりますね。

プロポーショナルフォントのビットマップ展開

フォントドライバのデザインは初めてです。
そこで、いきなりマイコンに組み込むより、デバッグ性の面から一旦Cygwin上のgccで作ってみることにしました。

gcc用フォント展開プログラム(C言語)
実行して、文字列入力すると、その表示イメージをbitmap.mapというファイルに吐きます。

フォントをマイコンに実装  かな?

Cygwinのg++用に作ったソースは、そのままH8用gccでも動きましたので、
そのまま文字列データを液晶パネル用データに変換しながら表示させてみます。
よいかも。(ピントぼけたけど)

ぱっと見チープですが、やっぱり映ったときはうれしいものがあります。

画面いっぱいにテキスト表示!!

縮小したらモアレが…。

表示用になんか英文が欲しかったので、とりあえずCNNニュースのSCIENCEからコピペしたものを
表示させてみました。


カラー化

フォアグラウンドカラー・バックグラウンドカラーに対応してみました。

一旦完成!

これは見やすい!
(けど、デジカメではモアレが出てうまく撮れない。。


資料集(ソースと回路図など)

Cygwin gcc用フォント展開プログラム(C言語)/Font display sample for Cygwin-based gcc
まずフォントをビットマップに展開する部分を試しに作ったgcc用のソースです。
実行して、文字列入力すると、その表示イメージをbitmap.mapというファイルに吐きます。 実行方法(To execute on Cygwin bash):(Cygwin bash上で) bash$g++ pro.cpp;./a;cat bitmap.map

ポート表や回路図は、ありません…。
ソースから拾い上げて整理しないといけないですね。
H8-GCC用全ソースファイル(C言語)/Whole source code set for H8 gcc
makefile等は作りませんでした。
なお、H8/3048Fレジスタ定義のヘッダファイル3048S.Hは、
日立のサイトからダウンロードしたものです。


今後の課題

・マイコン一個で制御してみたわけですが、アルゴリズムの最適化をしていないとはいえ、一画面更新にかかる時間が予想以上に長いです。
また、より実用性を高めるために、FPGAまたは、CPLDからとDPRAM等を接続し、マイコンはメモリー空間にビットマップを配置するだけでOKなどといった 制御をしたいところです。

ご注意

・この液晶はRGBそれぞれ3ビット入力の9ビットカラーです(512色)。
ただし、VRAMをCPU内に持ったときのデータ構造の簡便さを考えて、青だけ最下位ビットをH固定にしています。
(1pixel=1byteにしたかったので)
表現力に大差はないかもしれませんが、少なくともLCDの表現力を生かしきっていません。


参考文献

以下の文献を参考にさせていただきました。

・H8のGCCクロス環境のセットアップをする際に参考にさせていただいたサイトです。
豊橋技科大の村中さんのサイト


Author: Project C3 (projectc3@gmail.com)
Last modified: Mon Jan 10 14:11:24 JST 2005
inserted by FC2 system