BS21 Lab の製品 - カラー漢字 LCD シールド(完成版)(製品番号:BS21LAB-006)

19/aug/2013 新規
13/feb/2014 更新

65536色のカラー LCD (1.8インチ、160×128画素) に、全角10文字×6行で、日本語を表示する事ができます。
JPG/PNG/GIF/BMP 画像も(制限付きながら)表示できます。 TWI (I2C) 方式専用です。

  1. 概要
  2. 御注意
  3. ギャラリー
  4. ご購入方法
  5. 注意事項
  6. 免責事項
  7. 仕様
  8. Arduino Due での動作
  9. 使用方法(Vio の選択)
  10. ソフトウェア
  11. 添付のサンプル・スケッチ
  12. LCD の向き
  13. 仮想画面
  14. 論理色と絶対色
  15. 表示できる文字
  16. フォント
  17. グラフィック描画機能
  18. 画像読み込み機能
  19. 3種類の電圧について

・概要

従来のキャラ LCD で使用できた半角 157 字に加えて、JIS 拡張漢字(JIS X 0213:2004)規格の第一水準〜第三水準全角 8797 字 +α(47 字)(一覧表) が使用できます。
残念ながら、第四水準漢字はサポートしていませんので、JIS X 0213:2004 完全準拠ではありませんが、2010年版の改定常用漢字表は網羅していますので、Arduino で使うならば十分でしょう。
符号化方式は UTF-8 が選べますので、Arduino のスケッチにそのまま日本語を入力してコンパイルするだけで OK です。(Unicode 追加漢字面に配置された 26文字だけは、特殊な記述をする必要あり)

可読性が高い事で評判の「M+ フォント」を使用しています(不足部分は IPA フォントで補充)ので、携帯電話並みの綺麗な字を表示できます。

また、プログラムメモリ、もしくは SD カードから、JPG/PNG/GIF/BMP 画像を転送する事で、これらを表示する事ができます。 さらに、文字を前景面に、画像を背景面に表示する事で、2画面の重ね合わせも可能です。

※但し、本シールドには SD カード読み取り機能はありませんので、別途、Ether シールド等の SD カード読み取り機能の持ったシールドが必要になります (当然ながら、プログラムメモリだけで画像データが格納しきれる場合は、Ether シールド等は必要有りません)。

※ カラー LCD ですが、残念ながらタッチパネルではありません。その代わりに、タクトSW が4つ付いています。

本製品は完成品となっています。別途、組み立て式の「カラー漢字 LCD シールド(キット版)もございます。
(なお、完成品の組み立ては手作業にて行っておりますので、部品の半田付けの品質にバラツキがあります。御了承ください。)


・御注意

2014/2/13 追記:本シールドのファームウェア v1.01 以降では、EXT2 のA31 ピンを GND に直結させておくと、電源投入直後に表示されるスプラッシュ画面で、 虹色のストライプ背景が非表示となり、文字だけの表示になります。虹色のストライプ背景がうざったいと感じられる場合は、このようにしてください。 なお、begin 関数呼出し後の動作は、これまで通りです。あくまで A31 ピンの設定は、スプラッシュ画面限定です。


・ギャラリー

全体写真:クリックすると拡大します。
View

表示例:この様な使い方を想定しています。(液晶画面にデジカメが映りこんでいますが気にしないで下さい)
表示例1 じゃんけんデモ モナ・リザ ラーメン・タイマー 回転デモ 表示例2

・ご購入方法

本製品は、以下のサイトで取り扱って頂いております。

(株)スイッチサイエンス様


・注意事項

本製品は、基本的には、電源を OFF にした状態で DIP SW, スライド SW の切り替えを行ってください。通電中に SW を切り替えますと、もしかすると IC 等が静電破壊される恐れがあります。
電源を OFF にした状態でも、DIP SW, スライド SW を切り替える時は、静電気を逃がしてから行ってください。

また、本製品は端子等が露出しており、ショートなどで容易に故障しやすくなっておりますので、取り扱いには十分に注意してください。

鋭利な部分も多数有りますので、怪我等に十分に注意してください。


・免責事項

本製品は人命等に関わる装置への利用につきまして、考慮されておりません
また、本製品を使用した事によって発生しました如何なる事象につきまして、弊社は責任を負いかねますので御了承下さい。


・仕様

寸法幅約59.7mm×長さ約71.1mm ※ いわゆる "C基板" (47×72) の幅を、若干延ばした寸法
高さ約20mm ※ ピンソケットから Arduino 用ピン先まで
固定穴φ3.2×4ヶ ※ 穴位置は "C基板" 互換なので、スタックできます

Arduino UNO R3 ピン互換シールド ※ Arduino Mega2560 R3 以前の Mega シリーズで動作させるには、TWI 接続に何らかの工夫が必要と思われます。

駆動電圧+5V 必須 ※ 内部で +3.0V に変換しています。
接続方式TWI (I2C) 方式 ※ スライドSW にて、従来のアナログピン A4〜A5 ピンを使用して接続する方法と、
UNO/Mega2560 R3 より増設された SCL/SDA ピンを使用して接続する方法の、どちらかを選択できます
TWI アドレス7bit表記: 0x3C 〜 0x3F
8bit表記: 0x78+R/W 〜 0x7E+R/W
 ※ DIP SW にて4つの中から選択可能
TWI 通信速度100 kHz 及び
400 kHz
対応
 ※ Arduino 側の対応も必要になります。
TWI 通信の駆動電圧 (Vio)+3.3V もしくは +5V ※ "Vio selector" で切り替え (後述)
LCD 表示領域幅35.04mm×高さ28.03mm 対角 1.8 inch
LCD 表示文字数全角10文字(半角20文字)×6行 ※ std フォントサイズの場合
LCD 表示グラフィック画素数横160画素×縦128画素 
LCD 表示色数65536 色 RGB565 フォーマット
LCD バックライト常時点灯 

※ なお、LCD はタッチパネルではありません。


回路図:
カラー漢字 LCD の回路図
※N.M. は Not Mounted(未実装)の意味です。


<動作確認>
以下の時での動作を確認しています。

・Arduino UNO R3 (Atmel ATmega328P:CLK=16MHz)
・Arduino Leonardo (Atmel ATmega32U4:CLK=16MHz)
Uno1284P 基板 (Atmel ATmega1284P:CLK=16MHz)
・Vio = 5V
・Arduino IDE 1.0.5
・Windows 7 Home Premium SP1 (64 bit)


・Arduino Due での動作

現在の Arduino IDE 1.5.3 の Wire ライブラリのバグにより、全然、動作しません。 Wire ライブラリのバグが解消された時に対応を講じる予定です。


・使用方法(Vio の選択)

◎ お買い上げ直後は、LCD 表面に保護シートが貼り付いていますので、御使用前に剥がして下さい。

★☆★☆★☆★☆★☆★☆
☆★☆ Vio の選択 ★☆★ (最重要事項)
★☆★☆★☆★☆★☆★☆
本シールドの裏面("B-side" とシルク印刷されている面)に "Vio selector" とシルク印刷されている箇所があります。
御使用の Arduino の Vio 電圧に合わせて、ここのジャンパーピンを、以下の3つのいずれかに設定する必要があります。
御注意!! ここの設定を間違えた場合、ホスト側の TWI 通信機能を破壊する恐れがあります。十分に注意して下さい。

Vio 電圧ジャンパーピンの位置コメント
@+5V 決め打ち左端のVio−5VTWI 通信を 5V で行う必要があるタイプArduino Duemilanove, Arduino Uno(初代,R2,R3), AE-ATmega 等
A+3.3V 決め打ち3V3−4番目のVioTWI 通信を 3.3V で行う必要があるタイプArduino Pro(3.3V仕様), Arduino Due
BIOREF に依存4番目のVio−IORIOREF ピンの電圧値(3.3V or 5V のどちらか)を参照すれば良いタイプ
※通常はこの設定を選んでおくのが無難です
Arduino Uno R3, Leonardo や Due 等の IOREF ピンが存在するタイプ

※ ジャンパーピンを 5V−3V3 の位置に設定しないで下さい。ホスト側の電源系が壊れる恐れがあります。(左端のVioピンと5Vピンの位置関係を逆転させて設計すべきでした。試作段階で気付いていれば…)

@左端のVio−5V A3V3−4番目のVio B4番目のVio−IOR


本シールドを Arduino Uno に取り付けた場合、本シールド裏面の R6 抵抗が、Uno の USB コネクタと接触しそうになりますので、 USB コネクタの上面に絶縁テープを貼る等の安全対策を講じる事をお奨めします。
R6抵抗とUnoのUSBコネクタ


本シールドの表面(LCD 面)の各種スイッチのレイアウトは、以下の様な配置になっています。(なお、御購入された製品のタクトSW の色は、この写真の通りとは限りません。)
SWの配置


DIP SW ですが、左側の SW から1〜2の番号が刻印されています。
以下の様に機能が割り振られています。
DIP SW の設定SW1SW2コメント
TWI アドレス = 0x3COFFOFFサンプルスケッチのデフォルトアドレス
TWI アドレス = 0x3DOFFO N---
TWI アドレス = 0x3EO NOFF---
TWI アドレス = 0x3FO NO N---


スライドスイッチは SS1, SS2, SS3 の3つあり、以下の様に機能が割り振られています。
記号名称左側右側コメント
SS1TWI Vio Pullup"0"
Pullup無し
"Up"
Pullup有り
TWI 通信の Vio 側の Pullup 抵抗(3.3kΩ)を有効/無効にする
SS2TWI PinSel"R3"
Uno R3 拡張ピンを使用
"Old"
A4/A5ピンを使用
Arduino Uno R3 以降は "R3" を、それ以前は "Old" を選択
SS3TWI Vcc Pullup"0"
Pullup無し
"Up"
Pullup有り
TWI 通信の Vcc 側の Pullup 抵抗(3.3kΩ)を有効/無効にする
※通常は有効("Up")にしておく

通常は、Vio 側(SS1)も Vcc 側(SS3)も Pullup 抵抗を有効("Up")にします。
ただし、本シールド以外にも TWI 通信を行う機器が接続されている場合、Vio 側の Pullup 抵抗は1組(SCL/SDA1つずつ)あればいいので、 本シールドの SS1 の Pullup 抵抗を無効("0")にする事を検討して下さい。(Pullup 抵抗が複数組あると並列化され、無駄に電流が流れます。場合によっては過電流の恐れがあります)

一方、SS3 の Vcc 側の Pullup 抵抗を無効("0")にする事は、通常ありません。(無効にする可能性が発生するのは、EXT2 上の SCL/SDA から直接 TWI 通信を行う機器を接続した場合だけで、 かつ、そちらの機器も Pullup 抵抗を持っている場合のみです。なお、シルクが同じなのでややこしいですが、EXT2 上の SCL/SDA は Vcc = +3.0V 系です。TWK/TWDという風にシルクを変えるべきでした)

SS2 の TWI PinSel は、本シールドに接続するホスト機(Arduino 等)の SCL/SDA 信号ピンが、Arduino Uno R3 拡張ピンを使用できる場合は "R3" 側に、 使用できない場合(従来の A4/A5 ピンで TWI 通信するタイプ)は "Old" 側に設定して下さい。 この設定を間違えると、TWI 通信できない可能性が有ります。(例えば、Leonardo は "Old" 側だと、まったく TWI 通信できません。)


左(L)タクト・スイッチ、上(U)タクト・スイッチ、下(D)タクト・スイッチ、右(R)タクト・スイッチの4つは、 Arduino のスケッチで、getLeftSW 関数、getUpSW 関数、getDownSW、getRightSW 関数 関数を呼び出すと、押されているか離されているかが検出できます。 カラー漢字 LCD シールドは、チャタリング対策の為、スイッチの状態を約10ミリ秒間隔でスキャンしていますので、これよりも短い間隔で L/U/D/R スイッチの状態変化を検出させる事はできません。


Reset スイッチは、Arduino 本体の Reset スイッチと同様に、Arduino 本体とカラー漢字 LCD シールドをリセットします。


VR1 は、LCD の Backlight 輝度調整用です。小型のプラスドライバ等で、ちょうど良いポジションに調整してください。


・ソフトウェア

Arduino 用ライブラリを用意しています。
以下の圧縮ファイルをダウンロードし、arduino フォルダーの中の libraries フォルダーの中に解凍するだけで OK です。

BS21Lab-ArduinoLib-ColorKanjiLCD-v1.00e.zip : 2013年8月27日版

※ Arduino IDE 1.0.5 で動作確認しています。一方、Arduino IDE 1.5.3 では動作確認していません。
※ Arduino Due については保留中です。詳細は Arduino Due での動作 を御覧下さい。

アンインストールも、ColorKanjiLCD フォルダーと BS21LabLib フォルダーの2つを、丸ごと削除するだけで OK です。


ライブラリの使い方ですが、巨大なので、別ページにしました。「カラー漢字 LCD ライブラリ」の解説 をクリックしてください。


【御注意】
Windows 用の Arduino IDE でしか動作確認していません。もしかすると、Mac 用や Linux 用の Arduino IDE では、問題が発生するかもしれません。その際は、御連絡下さい。可能な限り対応してみます。(頑張ったが無理だった、という結果になる可能性もあります…)



・添付のサンプル・スケッチ

「カラー漢字 LCD ライブラリ」には、27 のサンプル・スケッチが添付されています。
Arduino IDE の「ファイルメニュー」⇒「スケッチの例」⇒「ColorKanjiLCD」で選択する事が可能です。

サンプルスケッチの一覧:
名称動作条件コメント
cklcd_anime_gif_from_sd_demo1_sketchSD 必須アニメーション gif 画像を SD から読み出して、表示します:右タクトSW を押している間は一時停止
cklcd_arduino_logo_demo1_sketchArduino のロゴマークの表示:∞に - と + を重ね書きする。ただそれだけ。
cklcd_demo1_sketch文字ばっかりのデモ
cklcd_draw_demo1_sketch描画関数のデモ:line, rect, rectFill, circle, circleFill, pset
cklcd_draw_demo1p_sketchcklcd_draw_demo1_sketch のポートレート版
cklcd_euc_jp_demo1_sketchEUC-JIS-2004 コード表を表示
cklcd_font_demo1_sketch各フォントタイプとフォント属性のデモ
cklcd_janken_demo1_sketchジャンケンします:状態遷移の例
cklcd_load_monalisa_and_frame_demo1_sketchモナ・リザを表示(半透明の額縁付き):上タクトSW を押すと額縁を ON/OFF できます
cklcd_load_monalisa_and_object_demo1_sketchLeonardo 不可モナ・リザを表示(pngファイル形式のオブジェ付き)
※残念ながら Leonardo ではフラッシュの容量が不足するので、動作させられません。Uno ならギリギリ OK。
cklcd_load_monalisa_demo1_sketchモナ・リザを表示:縦スクロール
cklcd_mini_sketch最小のスケッチ例
cklcd_print_effect_demo1_sketch各種文字効果のデモ表示#1
cklcd_print_effect_demo1p_sketchcklcd_print_effect_demo1_sketch のポートレート版
cklcd_print_effect_demo2_sketch各種文字効果のデモ表示#2:緑一色
cklcd_print_effect_demo2p_sketchcklcd_print_effect_demo2_sketch のポートレート版
cklcd_ramen_timer_demo1_sketchラーメン・タイマー:巨大7セグを表示
cklcd_ramen_timer_test1_sketchラーメン・タイマー(試作版):demo1 と同じ動作ですが、画像が手抜き版です。ただし、画像の構成はこちらの方が分かりやすいので、あえて残してあります。7セグ以外の字体に改造したい場合、こちらを改造した方がやりやすいと思います。
cklcd_rot_sphere_gif_demo1_sketchLeonardo 不可回転する球体(アニメ gif 画像)のデモ:右タクトSW を押している間は一時停止
※残念ながら Leonardo ではフラッシュの容量が不足するので、動作させられません。Uno ならギリギリ OK。
cklcd_rot_sphere_gif_from_sd_demo1_sketchSD 必須cklcd_rot_sphere_gif_demo1_sketch の SD 対応版
※SD 無し版が Leonardo で動かせられなかったので急遽追加
cklcd_rotation_demo1_sketch文字列の回転:もっとジャギジャギの画像になるかと思ってたが、結構見れる状態
cklcd_rotation_demo2_sketch文字列の回転+背景画の縦スクロール
cklcd_rotation_monalisa_demo1_sketchモナ・リザを回転&拡大/縮小
cklcd_set_pixel_test1_sketchsetPixel のデモ
cklcd_set_pixel_test1p_sketchcklcd_set_pixel_test1_sketch のポートレート版
cklcd_sine_wave_demo1_sketchサイン波のデモ
cklcd_sip_char_test_sketchUnicode の追加漢字面(SIP)に割り振られている 26文字を表示 (この26文字だけは直接タイプできないので、バイト列で記述してあります)

※「SD 必須」となっているスケッチは、Ether シールド等の SD 読み取り機能のあるシールドが、別途必要になります。それ以外のスケッチでは、不要です。



・LCD の向き

LCD の向きは2種類選択できます。文字や画像の向きが90度、違ってきます。

横長の向きを「ランドスケープ(Landscape)」モードといいます。setScreenMode() では CKLCD_ORIENT_LANDSCAPE を指定します。タクトSW が押しやすい向きです。
ランドスケープモード

一方、縦長の向きを「ポートレート(Portrait)」モードといいます。setScreenMode() では CKLCD_ORIENT_PORTRAIT を指定します。タクトSW がやや押しづらい向きです。
ポートレートモード


※ なお、開発時はランドスケープモードを中心にデバッグしていましたので、もしかすると、ポートレートモードの方はバグが残っているかもしれません。 もし、ポートレートモードでバグを見つけた場合は、御報告ください。回避策を考えます。


・仮想画面

本シールドでは、仮想画面は2面あり、それぞれ以下の様な仕様です。
名称記号ランドスケープモード時ポートレートモード時容量
仮想画面#1v1幅160画素×高さ256画素幅256画素×高さ160画素80kB
仮想画面#2v2幅160画素×高さ128画素幅128画素×高さ160画素40kB

2つの仮想画面の組み合わせ方は、以下の通りです。
名称前景面
(ARGB4444)
背景面
(RGB565)
コメント
CKLCD_DISP_SCREEN_NONE無し無し仮想画面の内容に関わらず、真っ黒な画面が表示されます
CKLCD_DISP_SCREEN_B1無し仮想画面#1flip 処理が高速です
CKLCD_DISP_SCREEN_B2無し仮想画面#2
CKLCD_DISP_SCREEN_F1仮想画面#1無し前景面と背景面(真っ黒)を合成させます
CKLCD_DISP_SCREEN_F2仮想画面#2無し
CKLCD_DISP_SCREEN_F1_B2仮想画面#1仮想画面#2flip 処理に時間が掛かります
CKLCD_DISP_SCREEN_F2_B1仮想画面#2仮想画面#1

仮想画面#1が前景面、仮想画面#2が背景面の時の重ね合わせの模式図:
仮想画面#1が前景面+仮想画面#2が背景面
仮想画面#2が前景面、仮想画面#1が背景面の時の重ね合わせの模式図:
仮想画面#2が前景面+仮想画面#1が背景面

※ 実際は、仮想画面に書き込んだだけでは LCD に表示されません。flip 関数を呼び出して初めて LCD に表示されるようになります。


・論理色と絶対色

本シールドでは、1種類の論理色と、2種類の絶対色の、合計3種類の "色" があります。

まず、2種類の絶対色ですが、以下の様になっています。
名称bitサイズbitの構成使用できる仮想画面コメント
ARGB444416bit長アルファ値4bit, R:4bit, G:4bit, B:4bit景面アルファ値が有るので、透明や半透明が扱える。
RGB565 16bit長アルファ値無し, R:5bit, G:6bit, B:5bit景面アルファ値が無いので、常に不透明の扱いになる。

仮想画面の番号とは関係なく前景面に選んだ仮想画面には ARGB4444 が、背景面に選んだ仮想画面には RGB565 が、問答無用で適用されます。

ただ、これだと一々、前景面/背景面を意識しないといけなくなってしまいますので、仮想的な色として論理色を使用します。
名称bitサイズbitの構成コメント
ARGB888832bit長アルファ値8bit, R:8bit, G:8bit, B:8bit景面では ARGB4444 に自動変換。
景面では RGB565 に自動変換。

本シールドでは基本的に、論理色で色を指定する様にしています。そして、本シールド内部で該当の仮想画面が、前景面の時は ARGB4444 に、背景面の時は RGB565 に、 自動変換する様にしています。


なお、本シールドの LCD 自体は RGB565 ですので、LCD の表示能力を最大限に生かしたい場合は、背景面に描画するようにしてください。 前景面に描画すると透明・半透明が使えますが、色的には RGB444 の 12bit しか表現できませんので、LCD の表示能力を十分に生かしきれない事になります。



・表示できる文字

「カラー漢字 LCD シールド」がサポートする文字集合 ※ 以下「カラー漢字 LCD シールド用文字集合」と呼称します。
半角文字ASCII94字計157字※ 0x5C は逆スラッシュ記号
JIS X 0201:1976 片仮名 (いわゆる半角カナ)63字
全角文字
一覧表
JIS X 0213:2004 第一水準 非漢字524字計8844字
JIS X 0213:2004 第一水準 漢字2965字※ 一部の字体は JIS X 0208:1997 から変更されています(例:'葛')
JIS X 0213:2004 第二水準 漢字3390字※ 一部の字体は JIS X 0208:1997 から変更されています(例:'疼')
JIS X 0213:2004 第三水準 非漢字659字
JIS X 0213:2004 第三水準 漢字1259字※ 2004年改定で追加された 10字を含みます
追加の記号系 (JIS X 0213:2004 の範囲外)47字※ 上付き文字, 下付き文字 等

※ 0x21〜0x7E 部分は「JIS X 0201 ローマ字」ではなく「ASCII」文字集合です。ゆえに 0x5C は逆スラッシュ記号です。円記号(¥)ではありません。円記号を使いたい時は全角の円記号(¥)を使用してください。
※ 容量の関係で JIS X 0213:2004 の第四水準漢字は非サポートです。よって「カラー漢字 LCD シールド用文字集合」は厳密には JIS X 0213:2004 準拠ではありません。
※ 一方で、第三水準漢字は完全サポートしていますので、1981年版の常用漢字表はもちろんの事、2010年版の改定常用漢字表にも完全対応しています (ただし、現在の Arduino IDE 1.0.5 では 1-47-52(𠮟) は直接タイプできず、\xF0\xA0\xAE\x9F というバイト列で記述する必要があります)。
拡張ひらがな拡張カタカナは全てサポートしていますので、アイヌ語カタカナが表示できます。

拡張かな 追加された漢字 追加された記号


第三水準字を完全サポートしていますので、UTF-8 符号化方式にて「ISO8859-1」文字集合にも対応しています。 なお、通常は「ISO8859-1」文字集合には「ASCII」文字集合も含まれます。
ISO8859-1 文字集合


「カラー漢字 LCD シールド」がサポートする符号化方式
Unicode 系UTF-8 方式
UTF-16 方式 (BOM 自動判別)
UTF-16 方式 (Big Endian 固定)
UTF-16 方式 (Little Endian 固定)
JIS 系シフトJIS 方式
EUC-JP 方式

※ あくまで符号化方式です。Unicode 系を選んだからといって、Unicode にある文字が全部使えるようになる訳ではありません。
※ JIS X 0213:2004 の範囲内でのみ、Unicode の文字合成に対応しています(例:U+304B U+309A なら か゚ となる)。 ただし、既に合成された状態で Unicode に存在する文字は合成しません(例:U+306F U+309A の場合、既に U+3071(ぱ) があるので合成しない)。 理由は、U+3071 で済むものを、わざわざ U+306F U+309A に分解してまでバイト数が増える様な事をする必然性が低いと思われる事、 その割にはカラー漢字 LCD シールド側のプログラムが面倒だからです(濁点・半濁点だけならまだしも、アクセント記号付きアルファベットの処理が面倒くさい)。


・フォント

カラー漢字 LCD シールドで使用している「カラー漢字 LCD シールド・フォント」は、
・基本を M+ OUTLINE FONTS Testflight 056 とし、
・不足分は IPA フォント ver.003.03 で補充しています。

※ Copyright © 2002-2013 M+ FONTS PROJECT.
※ Copyright © 2003-2011 Information-technology Promotion Agency, Japan.

よって「カラー漢字 LCD シールド・フォント」は、IPA フォントの派生フォントに該当する為、「IPA フォント・ライセンス」に準拠します。



・データ整理できしだい「カラー漢字 LCD シールド・フォント」を公開予定




表示できるフォントのサイズの一覧表:
名称最大寸法表示できる文字符号フォントタイプ名
幅×高さモノスペース (固定幅)プロポーショナル (可変幅)
ruby 8px×10pxASCII, ISO8859-1, JIS X 0213:2004 のひらがなとカタカナ, 記号系が少々CKLCD_FONT_TYPE_RUBY_MSCKLCD_FONT_TYPE_RUBY_P
12px12px×15pxASCII, ISO8859-1, JIS X 0201:1976 片仮名 (いわゆる半角カナ), JIS X 0213:2004 のひらがなとカタカナ, 記号系が少々CKLCD_FONT_TYPE_12px_MSCKLCD_FONT_TYPE_12px_P
std 16px×20pxASCII, ISO8859-1, JIS X 0201:1976 片仮名 (いわゆる半角カナ), JIS X 0213:2004 の第1〜3水準CKLCD_FONT_TYPE_MONOSPACEDCKLCD_FONT_TYPE_PROPORTIONAL
20px20px×25pxASCII, ISO8859-1, JIS X 0201:1976 片仮名 (いわゆる半角カナ), 記号系が少々CKLCD_FONT_TYPE_20px_MSCKLCD_FONT_TYPE_20px_P
24px24px×30pxASCII, ISO8859-1, JIS X 0201:1976 片仮名 (いわゆる半角カナ), 記号系が少々CKLCD_FONT_TYPE_24px_MSCKLCD_FONT_TYPE_24px_P
28px28px×35pxASCII, ISO8859-1, JIS X 0201:1976 片仮名 (いわゆる半角カナ), 記号系が少々CKLCD_FONT_TYPE_28px_MSCKLCD_FONT_TYPE_28px_P

※ モノスペース (固定幅)全角文字は同じ幅になるので setCursor 関数で指定しやすくなります。その代わり、文字の間隔があいてしまうので、欧文などの表示が美しくありません。
※ プロポーショナル (可変幅)漢字以外の文字が可変幅になり、読みやすくなります。その代わり、setCursor 関数で指定しづらくなってしまいます。setCursorMin 関数を使用するようにして下さい。

ASCII と ISO8859-1 及び、一部の記号だけは、6段階のフォントサイズがあります。半角カナは5段階、それ以外の文字は std サイズの1段階のみです。
フォントサイズ


「IPA フォント・ライセンス」では、ユーザーの意思で、派生フォントからオリジナルの「IPA フォント」に戻せられる事が義務付けられています。
ただし、カラー漢字 LCD シールドのフラッシュメモリには、「カラー漢字 LCD シールド・フォント」に加えて、オリジナルの「IPA フォント」を格納するだけの容量はありませんので、 フラッシュメモリの書き換えサービスにて、これに対応したいと思います。

※こちらも、まだ準備中です。

  サービス内容フラッシュメモリの書き換えによる「カラー漢字 LCD シールド・フォント」からオリジナル「IPA フォント」への変更
  費用¥525+送料 ※送料は地域により変わります(埼玉県からの発送)。
  連絡方法info@bs21−lab.com (スパム対策で全角文字にしてます) までメール下さい。
  注意事項現時点では、オリジナル IPA フォントにすると、アンチエイリアスが効いていないジャギーの有る字体になってしまいます。(詳しく原因究明していません)



・グラフィック描画機能

低機能ながら、簡易グラフィック描画機能もあります。

サポートしているコマンド:
名称コメント
pset点を描く
line線を描く
rect矩形を描く。枠のみ。
rectFill矩形を描く。中は塗りつぶす。
circle円を描く。円周線のみ。
circleFill円を描く。中は塗りつぶす。
dilate3x3 の膨張処理。※ かなりインチキくさい処理
erode3x3 の収縮処理。※ かなりインチキくさい処理
blur3x3 のガウシアンフィルター処理
setSrcRectコピー元の矩形領域を指定
copysetSrcRect で指定されている矩形領域を、別の矩形領域にコピーする。
flip仮想画面メモリから、LCD モジュール内の表示メモリへ転送する

circleFill 表示の例
簡易グラフィック機能
※ スムージング処理はしていませんので、line や circle ではジャギーが発生します。対策として blur を掛ける手もありますが、関係ない部分まで blur されてしまう難点があります。



・画像読み込み機能

プログラムメモリ、もしくは SD カードから、JPG/PNG/GIF/BMP 画像データを転送・展開する事で、これらを表示する事ができます。
ただし、色々と制限事項がありますので、注意してください。

特に、PNG と GIF は、展開作業中に、2つ有る仮想画面のもう片方を作業用メモリとして使用する為、その仮想画面の内容は破壊されます。(ゴミ画像にされてしまう)
この為、例えば、以下の様に対策する必要があります。
 @ダメな手順先に、仮想画面#1 に JPG 画像を展開続いて、仮想画面#2 に PNG 画像を展開仮想画面#1 の JPG 画像が破壊されてしまう
 A良い手順 先に、仮想画面#2 に PNG 画像を展開続いて、仮想画面#1 に JPG 画像を展開仮想画面#1、仮想画面#2 ともに OK


JPG 画像

Chan 氏作成の TJpgDec R0.01b を使用しています。
※ Copyright © 2011-2012 ChaN. (TJpgDec License)

読み込める jpg 画像は、一般的な JFIF フォーマットのみです。ガンマ値の JFIF タグや、テキスト等の画像データに関与しない JFIF タグは、在っても無視します。
また、プログレッシブ jpg や、grayscale jpg には対応していません(エラーになります)。

最大幅1024×最大高さ1024 画素までです。縦・横の両方、もしくはどちらか片方が、これ以上の時は、必ず、画像寸法エラーになり、表示できません。
jpg 画像のサイズが (w, h) ならば、仮想画面の (x, y)〜(x+w-1, y+h-1) の範囲に描画します。ただし、仮想画面の領域からはみ出した部分はクリッピングされます。
jpg 画像にアルファ値は有りませんので、setBlendMode() の設定に関わらず、常に上書きされます (アルファブレンドされません)。 なお、仮想画面が透過モードの時は、論理アルファ値==1.0 (不透明) として描画します。



PNG 画像
注意!!!:読込む仮想画面では無い方の仮想画面を作業エリアとして破壊します。例えば、仮想画面#1 に読み込む時は、仮想画面#2 の内容が破壊されます。逆の時も同じです。

libpng v1.6.1 と zlib 1.2.8 を使用しています。ただし、かなり改変しています(オリジナル版だとメモリ消費量が膨大な為、必要最小限まで削りました)。
※ Copyright © 1995-2013 Glenn Randers-Pehrson, Andreas Dilger, Guy Eric Schalnat, Group 42, Inc., and etc. (libpng License)
※ Copyright © 1995-2013 Jean-loup Gailly and Mark Adler. (zlib License)

読み込める png 画像は、0x89+"PNG" から開始する一般的なフォーマットのみです。
処理できるタグは、表示に必要な最低限レベルである IDAT, IEND, IHDR, PLTE, sBIT, tRNS タグのみです。 これ以外のタグ、例えばガンマ補正や色空間設定などは、在っても読み飛ばして無視されます。

対応しているチャンネル毎の bit 深度(depth) は 1/2/4/8bit までです。16bit 深度には対応していません (エラーになります)。 なお、ここで言う 16bit 深度とは、16bitグレー、16bitグレー+16bitアルファ、48bit R/G/B、48bit R/G/B+16bitアルファ、の4種類を指します。 (普通の png で使用される 24bit R/G/B+8bitアルファ形式は 8bit 深度なので、16bit 深度が非対応でも、そんなに問題にならないはず)

インターレース形式の png は、1ラインごと展開する方式では余りに複雑なので、非サポートです。必ずエラーになりますので注意して下さい。

最大幅256×最大高さ1024 画素までです。縦・横の両方、もしくはどちらか片方が、これ以上の時は、必ず、画像寸法エラーになり、表示できません。
png 画像のサイズが (w, h) ならば、仮想画面の (x, y)〜(x+w-1, y+h-1) の範囲に描画します。ただし、仮想画面の領域からはみ出した部分はクリッピングされます。



GIF 画像
注意!!!:読込む仮想画面では無い方の仮想画面を作業エリアとして破壊します。例えば、仮想画面#1 に読み込む時は、仮想画面#2 の内容が破壊されます。逆の時も同じです。

giflib 5.0.4 を使用しています。ただし、若干改変しています(オリジナル版だと malloc/free しまくって、アニメ gif 時に支障をきたすので、最大 640 画素決め打ちで malloc1回のみにしました)
※ Copyright © 1997-2012 Eric S. Raymond. (MIT/X License)

読み込める gif 画像は、"GIF87A" もしくは "GIF89A" から開始する一般的なフォーマットのみです。

最大幅640×最大高さ1024 画素までです。縦・横の両方、もしくはどちらか片方が、これ以上の時は、必ず、画像寸法エラーになり、表示できません。
gif 画像のサイズが (w, h) ならば、仮想画面の (x, y)〜(x+w-1, y+h-1) の範囲に描画します。ただし、仮想画面の領域からはみ出した部分はクリッピングされます。

アニメーション gif は、Arduino 側もコールバック関数を適切に設定する事で、対応できます。 ただし、画像寸法が大きくなればなるほど、TWI 通信に時間が掛かる為、アニメーションもトロいものになってしまいます。

仮想画面が透過モードの時は、透過ピクセル部分は論理アルファ値==0.0 (透明)、それ以外の画素は論理アルファ値==1.0 (不透明) として描画します。 透過ピクセルが有る gif 画像を Back面に上書き (CKLCD_BLEND_OVER) する時は、setBackColor() で設定している色になります。



BMP 画像

自作の展開エンジンにて展開しています。

読み込める bmp 画像は、"BM" から開始する一般的なフォーマットのみです。
最大幅640×最大高さ1024 画素までです。縦・横の両方、もしくはどちらか片方が、これ以上の時は、必ず、画像寸法エラーになり、表示できません。

無圧縮 (BI_RGBかBI_BITFIELDS) の bmp 画像にのみ対応しており、RLE 圧縮 (BI_RLE4/BI_RLE8) の bmp 画像には対応していません。

BITMAPINFOHEADER (40byte), BITMAPV4HEADER (108byte), BITMAPV5HEADER (124byte) の bmp に対応してます。 OS/2フォーマット (BITMAPCOREHEADER:サイズが 12byte のヤツ)には対応していません (今時、そんな bmp 画像ファイルは無いでしょうが)。

色空間、ガンマ値、プロファイルデータは在っても無視します。
パレット情報 (RGBQUAD) を持つ bmp 画像は、そのまま読み込めます。高さ情報 (biHeight) が負の bmp 画像も、そのまま読み込めます。

bmp 画像のサイズが (w, h) ならば、仮想画面の (x, y)〜(x+w-1, y+h-1) の範囲に描画します。ただし、仮想画面の領域からはみ出した部分はクリッピングされます。


※ アルファ付きの bmp 画像(BI_ALPHABITFIELDS)にも対応させた…つもりですが、如何せん、アルファ付きの bmp 画像のサンプルがほとんど見つからない (png 画像フォーマットの方が効率良いから)ので、まったくと言って良いほどテストできていません。



・3種類の電圧について

本シールドでは「5V」「Vcc」「Vio」の3種類の電圧を扱っています。

本シールドを動作させるには、必ず +5V の電源が必要になります。通常の Arduino ならば「5V」と書かれたピンソケットが有りますので、そこから +5V を取得しています。 (Arduino の一部には +5V 供給能力の無いタイプが有りますが、その場合は、何らかの方法で本シールドに +5V を供給してやる必要があります。)

この +5V から、レギュレータ (TA48M03F) にて、コントローラや LCD 制御用に、本シールド内部で使用する +3.0V を生成します。 本シールド上に「Vcc」とシルク印刷で書かれた部分は、+3.3V でも +5V でもなく、この +3.0V ですので、注意して下さい。
(何故 Vcc = +3.0V なのか?ですが、使用している LCD モジュールの駆動電圧が +2.3V〜+3.3V (typ.+2.8V) であり、Vcc = +3.3V にしてしまうと、 レギュレータのバラツキや温度変化次第では +3.3V 超が考えられます(例えば +3.3V レギュレータの TA48M033F は、仕様上 +3.135V〜+3.465V の範囲)ので、 その場合、常に LCD モジュール駆動電圧の上限値 +3.3V を超えっぱなしになってしまう可能性があるからです。)

また、これとは別に「Vio」というのがあります。これは、本シールドを接続するホスト側の TWI 通信の駆動電圧になります。通常は +3.3V もしくは +5V のどちらか、になります。

まとめると、以下の表の様になります。
名称電圧値コメント
5V常に +5V本シールドの外部から供給する。レギュレータ TA48M03F と LCD の backlight の駆動電圧
Vcc常に +3.0V本シールド内部で生成。コントローラ SAM4S や LCD 制御部の駆動電圧
Vio+3.3V か +5V のどちらかホスト側の TWI 通信の駆動電圧

電圧関係の模式図

以上の様に、本シールド側の Vcc と、ホスト側の Vio は、常に電圧レベルが違った状態になります。 この状態で TWI 通信する事になりますので、TWI (I2C) バスリピーター PCA9517 にて、この問題を解決しています。

実は当初、I2C レベル変換 PCA9306 の使用を検討したのですが、この時点では Vcc = +3.3V と考えていた為、 組み合わせによっては Vcc == Vio == +3.3V になるケースが考えられました。
ところが PCA9306 の仕様書を読むと、A 側と B 側が同一電圧の時の挙動が書かれていません。 もしかすると同一電圧の時は TWI 通信できなくなってしまう可能性が考えられた為、同一電圧でも動作する事が明記されている PCA9517 を使用する事にしました。 (PCA9517 で動作したので、結局、PCA9306 での同一電圧時の挙動は、未検証のまま放置状態です)
後に、上記の通り Vcc = +3.3V では LCD モジュール的に不味い事に気付いたので、Vcc = +3.0V に下げたのですが、 それでも PCA9306 の仕様には +3.0V ⇔ +3.3V の変換が書かれていないので、結局、PCA9517 のまま、です。


※御注意:Arduino がホスト機の場合は問題ないのですが、もしホスト機の Vio が +3.0V 以下の時は、ダイオード D1 を外してください。 さもないと、D1 経由で本シールド生成の Vcc = +3.0V が、ホスト側の Reset 回路系に流れ込む恐れがあります。(実際は Vf > +0.5V にならないと 流れ込まないはずですが、予想外の事態も起こらないとも限りませんので、用心に越したことはありません。)
さらに、PCA9517 の B 側は、+2.7V〜+5.5V の範囲が仕様となっていますので、この点につきましても留意してください。


製品リストに戻る

Copyright (C) 2013-2014 BS21 Lab, All rights reserved.