メッキ線のみで配線したLCD2USB(AVRを使ったUSB接続キャラクタ液晶)

Last-modified: 2015-08-19 (水) 21:09:49

(2011-2-15)このLCD2USBの活用例を紹介するページを作成しました。
MPD(Music Player Daemon)の日本語化パッチと、lcd4linux・MPDプラグインのカタカナ表示対応版を用いて、Linuxで英数・カタカナ表示のキャラクタディスプレイ付きミュージックサーバを構築


このページは基本的にLCD2USBのハードウェアについて扱ったページです。そしてこちらのページがLCD2USBの(Linuxでの)ソフトウェアを扱ったページです。

初出 2009-7-16
最終更新 2015-8-17
製作時期 2009-6
IgorPlug-USBの製作 [tip]
 

LCD2USBはサーバの5インチベイなんかに取り付けるステータス表示用の液晶として最適です。WindowsでもLinuxでも利用することができます。
LCD2USBははAVR-USB(現V-USB)を応用したプロジェクトです。

 

英数とカタカナ文字だけしか表示できませんが、場合によってはパーソナルコンピュータのサブディスプレイとして、再生中の曲名表示等の用途で使用することもできます。
lcd2usb_1_s.jpg
上の画像の右側ではWinampで再生中のネットラジオの曲名をLCD Smartieを使って表示中です。ディスプレイをOFFにしていても曲名がわかります。サーバで常時BGMを再生する用途などに向いているでしょう。

 

基本的にはアキバで売っている5インチベイ用のUSB接続のキャラクタ液晶ディスプレイの回路と、ほぼそのまま同じ(と言っていいくらいの)ものです。

 

上の画像の右側で使っている液晶は、
ビット・トレード・ワン 16X2行 白色バックライト 黒文字 キャラクタ液晶 WH1602P (SC1602(HD44780)互換)
です。黒文字・白背景なので視認性が高い上に、バックライトはマイコンから直接制御できるほど省電力です。もちろんカタカナ表示可能です(Linuxでも)。
(上画像では少しバックライトの明るさを絞っています。また液晶保護シートを貼っています。明るさにムラが見えるのは明らかにそのせいです。)(2014-5-5追記)WH1602Pを数年使用し続けています。その間に青バック白文字の液晶も買ってみましたが、WH1602Pの方が明らかにコントラストが高く、視認性が高いです。
※LCD Smartieからはバックライトの明るさも制御できるのでこのような加工をおこなっています。


lcd2usb_5_s.jpg
実は私は右下に写っているものでWinampをリモートコントロールしています。私の好みに過ぎませんがローカルのファイルを聴く場合に操作しているのは音量上下、巻き戻し・早送り、前の曲・次の曲、再生/一時停止です。
(2011-2-15追記)Linuxでもこれと同等(以上)のことができます。Linuxだとカタカナ表示が可能です。こちらのページをどうぞ。←そもそも私はLCD2USBを、この為に作ったんです。
それから、今まで書き忘れていましたが、不精の為にボタンを取り付けていません。本来はきちんとボタンを2個取り付けて、バックライトのONOFFとか、時計表示との切替等を手元でおこなえるようにした方がいいと思います。ただし、この例ではこれを使うことによって、曲がりなりにも、手元操作によるバックライトのONOFFと時計表示との切替をを実現しています。

 

LCD Smartie何もハードウェアを接続しなくても、Windows上で単体で起動し、Windowsデスクトップ上に液晶を模した画面を出力することができます。先に、LCD Smartieで何ができるのかを確かめ、後から外付け液晶を手に入れるのもいい考えだと思います。

 

写真では16x2行の液晶を接続していますが、ジャンパ切替で20x4行の液晶も接続できます(そっちでも動作確認済み)。
最上画像の左側ではバックライトの代わりにLEDを点灯させています。
こちらをご覧になった方は既知だと思いますが、私はユニバーサル基板に出来る限りメッキ線のみで配線するのが好みなので、これもそうしてます。

 

Windowsでの使い方
(2015-8-17)Windows 10 64bit版上で動作確認したので 以下はWindows10 64bitでの使い方です。

 

WindowsではLCD Smartieという非常にポピュラーな液晶ディスプレイ用の表示ソフトを使うのが標準的な使い方です。

  1. 未認証のドライバが使えるようにここに書いてあることを日本語に読み替えて作業をおこなう。
  2. libusb 0.1のWindows版libusb-win32をダウンロードする。
  3. LCD2USBを接続した状態で libusb-win32 の inf-wizard.exe を実行して LCD2USB のinfファイルを作成し、infのインストールをおこなう。
  4. LCD Smartieをダウンロードし、好きなフォルダに展開する
  5. LCD Smartieを起動する

後はわかると思います。以前と異なり、LCD2USB用のDLLはLCD Smartieに含まれています。
また、LCD2USBのアーカイブ:lcd2usb-20XX-XX-XX.zipの中にはWindows用のサンプルアプリケーションがソース付きで入っていますから、その気になれば、自作アプリから操作できます。その場合にはLCD2USB側からWindowsに信号を送ることもできます。

 

Linuxでの使い方
Linuxではlcd4linuxを使うのが標準です。
(2009-12-23追記)Linuxサーバのステータス表示用途の液晶ユニットをお探しの方、
Linuxで広く使われているソフトであるlcd4linuxがサポートしている液晶ユニットは、少しわかりにくいですがこのlcd4linux.conf.sampleに載っています。ここに載っている液晶ユニットの完成品を入手しにくい方はLCD2USBの自作を検討してみてはいかがでしょうか。詳しくは下に書いてありますが、サーバのステータス表示用途であれば回路を大幅に省略することも可能です。
(もちろん半分冗談で書いていますよ。欲しいのは完成品なのにそれがないからといってわざわざ自作をするなんて人は殆どいないと思います。今までLCD2USBを自作した人の殆どは何かを自作することが好きな人だと思います。)


基板の説明
詳細な仕様はクリックして大きい画像を参照して下さい。(2010-9-1)ここを訪れた方が画像だけを見てコピーを作成できることを目標として大幅に画像中のテキスト情報を追加しました。
lcd2usb_2_s.jpg
さらに、配線の確認がやりやすいように加工前の大きな画像も用意しました。これです。→ lcd2usb_3_b.jpg

  • 綺麗さは気にして欲しくありません(笑)。半田面での配線間は全て1ピッチ以上離しています。
  • 半田面の写真は鏡像としています。
  • 半田面の白い丸印は何からの貫通部であることを示しています。
  • ほぼ忠実にオリジナルの回路を実現しています。ただし秋月のキャラクタ液晶に合わせて、オリジナルではEN0,EN1の2ピンとなっていた個所をEだけの1ピンとしています。それとバックライトのGNDを液晶表示器本体のGNDと共通とする為にPNPトランジスタ(2SA1015)を使っています。従ってBLの隣のGNDは省略することも可です。
  • USBコネクタの下の4ピンはマザーボードとの内部接続用です。
  • ISPコネクタを省略すれば72x47mmのユニバーサル基板に収まると思います。
  • サーバ用に使うだけであれば、ISPコネクタだけでなく適宜、スイッチポート、シリアルポート、バックライト制御部、VCC・GND切替部、USB・Bコネクタ等を省略できると思います。しかしPWMを用いたコントラスト調整機能は大変便利なので残した方がいいと思います。
 

ファームウェアの修正
私が修正をおこなったのはmain.cだけです。

(1)オリジナルのATmega8ではなくて48以降を使用する為に

-  TIMSK &=( (~_BV(2)) & (~_BV(3)) & (~_BV(4)) & (~_BV(5)));
+/*  TIMSK &=( (~_BV(2)) & (~_BV(3)) & (~_BV(4)) & (~_BV(5)));*/
+  TIMSK1 &=( (~_BV(0)) & (~_BV(1)) & (~_BV(2)) & (~_BV(5)));
 

(2)デフォルトのコントラスト値を変更する為に

     /* write magic "eeprom is valid" marker 0x42 and default values */
     eeprom_write_byte(&eeprom_valid, 0x42);
-    eeprom_write_byte(&eeprom_contrast, 0xff);
+/*    eeprom_write_byte(&eeprom_contrast, 0xff);*/
+    eeprom_write_byte(&eeprom_contrast, 0xbe);
     eeprom_write_byte(&eeprom_brightness, 0xff);
   }

これは全然必須ではありません。デフォルト値なんか変えなくてもlcd4linux.confに最適値を書いておけばそれが自動で設定されます。

 

(3)バックライト電源制御の仕様変更(PNP型採用)に伴い
これも必須ではありません。オリジナルでは0でOFF、255で全開となる設定値を、255でOFF、0で全開ということにすれば別にそのままでも構わないわけです。オリジナルと同じ設定値を使う為に修正を加えています。inverting modeに変えるだけでもいいんじゃないか思われる方もいるかもしれませんが、それだと設定値が0でも完全OFFになりません。

2箇所ありますが、内容的には同じです。

   OCR1A = eeprom_read_byte(&eeprom_contrast);
-  OCR1B = eeprom_read_byte(&eeprom_brightness);
+/*  OCR1B = eeprom_read_byte(&eeprom_brightness);*/
+  OCR1B = 255 - eeprom_read_byte(&eeprom_brightness);
 }
 void set_contrast(uchar value) {
   if(value != eeprom_read_byte(&eeprom_brightness))
     eeprom_write_byte(&eeprom_brightness, value);
-  OCR1B = value;  // higher voltage is higher brightness
+/*  OCR1B = value;  // higher voltage is higher brightness*/
+  OCR1B = 255 - value;  // lower voltage is higher brightness
 }
 /* ------------------------------------------------------------------------- */
 


WH1602Pのバックライト電源を制御側と分離する加工
WH1602Pは秋月のキャラクタ液晶とは異なり、購入時点では制御回路の電源とバックライトの電源が共通となっていて、何もしなくてもバックライトが点灯します。しかし私の作ったLCD2USBにはバックライト制御機能があります。せっかくのその機能が利用できるように電源を分離する加工をおこないました。
lcd2usb_4_s.jpg
ここに書いてありますように、私の作ったLCD2USBでは制御側とバックライト電源のGNDを共用できるようにしていますので、追加した配線は1本だけです。もしGNDが共用できない場合は0Ωの抵抗を外してGNDも分離する必要があります。

 

ご要望、ご意見、質問を下のフォームにどうぞ
(でもここより、掲示板書き込みフォームのページに書いて頂いた方が気づき易いと思います。)