Arduinoに接続するLCDディスプレイとしては1602系がよく使われますが、そのままだとパラレル接続になってしまうし、バックライトを点灯させるには外付けの可変抵抗が必要になります。部品箱を探していたらSparkFunのLCDコントローラーSerLCDv2.5が出てきました。
すでに、発売元のsparkfunでは後継機種が発売になり、生産中止になっています。SparkFunの英語のページはタイトルページだけは表示されますが、データシートなどは404が表示されますので、消えている模様です。
あちこち検索してやっとDigi-KeyのHPでデータシートを見つけました。
1602Kのピン配列と突き合わせてみたら、単に写真の方向に単純に連結すれば良いことが分かりました。元々がLCDの裏に直接はんだ付けして使用できるように考えられているようです。
(クッキーを食べながら作業していたので、LCDの表面にクッキーの粉が飛んでいて申し訳ありません。)
入力は基盤にプリントされているので簡単です。Arduino UNOから直接5VとGND、それにTX->RXの3本だけで終わりです。
sparkfunのSerial LCD Kit Quickstart Guideに接続例とスケッチがあります。少し違うタイプの製品ですが、大きくは変わらないと思いましたので、D3からRXに接続してIDEからスケッチを書き込んでみました。
Arduino UNOをUSB接続したところ、無事に "www.SparkFun.com Serial LCD Kit"と表示されました。ピン配列は間違えてなかったようです。さっそくスケッチ例のSerial_LCD_Clockをダウンロードして実行してみます。カーソルの位置が正しく設定されていないので表示がずれていますが、なんとか時間が表示されるようです。ちなみに、最初に時間を合わせてから書き込まないと正しい時間は表示されません。カーソルのずれはsetLCDCursor()関数の問題のようです。
このままでは使えないのでさらに探して別のデータシートを見つけました。
まず、一行目のカーソルポジションは左から0−15、二行目は64-79が割り当てられているようです。つまり二行目の三番目のポジションは66となります。次に一番上のビットは1にする必要がありますので、カーソルポジションに128を足します。先程の例でいうと66+128=194です。
最後にまずlcd.write(254)を書き込んでコマンドを送るよとSerLCDに伝えてからlcd.write(194)でカーソルを動かします。
結構面倒なので時間があるときにライブラリを書こうと思いますが、とりあえず目的は達せられたので、そのまま使っています。