あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先

液晶モジュールの文字コード (2012.12.17)

2種類の液晶を同時表示

インタフェースが異なる2個の液晶モジュールに個別のドライバを用意して同時表示をさせてみました。 それぞれで4つの
Ω/ → Ω_てしっ
を表示させてみようというものです。
  1. I2C液晶/SB1602B/16桁×2行/ストロベリーリナックス/製品ページ
  2. GPIO液晶/SC1602BS/16桁×2行/秋月電子通商/製品ページ

GPIO液晶に「Ω」が表示されない

初めてのGPIO制御でしたから、その辺りで失敗するかと思いきや「Ω」だけが出ません。 色々調べてみるとI2C液晶とGPIO液晶では文字コードというかCGROMの内容が違ってました。 この手の仕様は万国共通だと思い込んでいたのが誤り。 最初のアプリケーションはI2C液晶で「Ω」を表示させているもので文字コードを0x1Eを使い、 それを基に共通のソースで動作させるとGPIO液晶で表示できなかった訳です。 「Ω」の文字コードはI2C液晶=0x1E、GPIO液晶=0xF4、 更にCGROMの0x10はI2C液晶だけで、0xE0と0xF0は定義が異なります。

I2C液晶のドライバをGPIO液晶の仕様で動作するように修正

歴史の面ではGPIO液晶が長いのでI2C液晶のドライバを修正、文字コード0xF4が指定されたら0x1Eを出力するようにしました。 特殊キャラクタは「Ω」しか表示させる気がないのでこれで問題ナッシング。<おい  GPIO液晶のつもりでアプリケーションを作れば、I2C液晶で同様に表示できるという考え方です。 I2C液晶のCGROM特有の文字を使いたくなったらどうしようか…CGRAMにキャラクタパターンを描いて使えばいいのよ(苦笑)。 あたりまえだけどGPIO液晶を使っている方々はI2C液晶特有の文字を使っていないんだよな、コレ。 あと特殊なキャラクタの文字コードをCGROMの空きに割り当てるのは液晶モジュールの仕様上やむを得ないとして、ドライバはきちんとした文字コードを使って受け付けたい。 将来はドライバがUTF-8で受け付けてアプリケーションのソースコードで16進表記しなくても文字リテラル L'Ω' で(遠い目)。

インタフェースとCGROM

私が使っているI2C液晶はストロベリーリナックスから購入した物です。 一方、秋月電子通商が販売しているI2C液晶はGPIO液晶と同一CGROMのように見えますから インタフェースで区別するよりもモジュールに載せているコントローラで区別するほうが良さそうです。 将来I2C液晶が流行すると私のように頭を抱える人が続出しそうです。<「Ω」を使う人なんていませんよ

実際の動作

動作させるとこんな感じ。

今回の鉄ゲタは…

GPIO液晶のドライバを作ってみて誤動作するから色々と疑うこと30分…まさかのCGROM違い。 まあ、どうせ話が通じないと思うので、あとはソース見てください(^^;
yrntrlmnmnt20121217.zip (288,611 バイトをVPSから 00:05 で)