PIC16F1455でUSB-LCDを作る

組み込み系をやり初めて最初に使って見たLCD(1602)はUSB接続のサブディスプレーとして今でも便利に使っていたりする。LCD制御用に下記のようなI2Cモジュールを組み合わせてPCとの接続にはFTDIチップを使うというLCDを表示するだけなのにずいぶん豪勢な構成となっている。

KKHMF 1602 LCD ブラック IIC/ I2C / TWI/SPI シリアル インタフェース ボード モジュール

設定画面を作りたくてC#で開発してしまったのでプログラムを修正するためにはVisual-Studioが必要になるのだが、経験上、Visual-Studioをインストールすると何かと問題が起こるのでメインPCにはインストールできない。そのためWindos10-Proの仮想マシン(Hyper-V)にインストールしていたのだが、現在はHyper-Vが使えないWindows10-HomeがメインPCだったりするのとC#はもう使う気もないので新しくUSB制御のLCDを作ることにしてみた。

まずHWだが、今回の用途にはPIC16F1455がピッタリだ。超シンプルかつDACによりバックライト調整までもできてしまうのでお勧めだ。

【回路図】

【完成基板】
Simple is Best!! 後付けのトランジスタが気になりますけど(笑)


ディスプレーの上って普通空いてるはずだからLCDなどはここに置くのがベスト。かも。

LCDは白黒表示のYB1602Aがアリエクスプレスにて1個350円ほどで売られていたのを購入。表示させて見ると白というか青っぽく見えてしまうが目(脳?)の錯覚かもしれないので気にしないでおこう。(-_-;)

バックライト制御は無理っぽいと思いつつもDAC出力により直接制御する予定で進めていたが試して見るとやっぱりDACの駆動能力が弱すぎてボツ。しょうがないのでリワークしてトランジスタを追加しDACソースを1.024Vにしてみたところちょうど良い感じに調整できるようになった。この辺はLCDにより違いがあるのかもしれないが...

【バックライト最低(暗すぎ...)】

【バックライト最大(少し明るすぎかな?、四角が光って見える)】

ファームウェアはシンプル&ストレートにLCDの全機能をUSB経由で呼び出せるようにしてみた。もちろん読み込みも可能である。ユーティリティコマンドからもLCDの全機能が使えるようになっているのでLCDコマンドを一つずつ実行しながらLCDの挙動を調べることも可能だ。

ファームウェアの書き込みを512ワードCDCブートローダー対応にする場合は、リンカーオプション(CodeOffset=0x200)を設定するだけだ。ICSPから書き込む場合はCodeOffsetを未設定にすれば良い。

【ファームウェア】
プロジェクト・ダウンロード(for MPLAB-X)

※ファイル数が多いためLCD関連ソースのみ掲載

【PC側コマンド・ユーティリティ】
プロジェクト・ダウンロード(for Eclipse-CDT + MinGW64)