汎用USB-IOでLCD表示

ホーム>電子工作>汎用USB-IOでLCD表示

T.解説と
ネット上で「汎用USB-IO」を合資会社 モルフィー企画で見つけました、ここです。
今では、モルフィー企画では取り扱いをしていないようです、HPもリンク切れになっています。
Km2Netテクノキットで取り扱いを開始されたようです。(2003/10 より)
一時期はどうなるかと思っていましたが、販売を引き継いで行ってくれる方が出てこられて一安心です。
購入される方はKm2Netテクノキットで申し込みが出来ます、行ってみてください。
(私情がはいりますが、地元のKm2Netもよろしくお願いします、どちらも特色をもって運営されていますので、自分の目的に合った方を選択されるといいと思います。)
注意:Km2Netテクノキットで購入された汎用USB-IOは、ベンダーIDとプロダクトIDが変更になっています、HPに載せているVBのソースはそのままでは動かなくなると思います、ベンダー-IDとプロダクトIDを変更して使用してください。
VBのEXEのみを使用される方は連絡をいただければ対応いたします、近いうちに各バージョン対応にしたいと思います。
対応させたプログラムサンプルを「汎用USB-IO試用レポート」のページに載せました。

この「汎用USB-IO」を使用した2作目でLCD表示です。
(ちなみに、1作目は行き先表示板で社員の出勤状態、電話の有無をLED表示および、ボタンによる、出社、退社、外出、帰社、およびCGIを使用してPCでの表示変更を行えるものです、現在、会社で稼動しています、こちらは資料の整理が出来次第UPしようと思っています)

この汎用USB-IOでLCD表示とUSBキーボードで簡単なターミナル(入出力装置)として使えないか調査のため作成しました。


この汎用USB-IOの特徴を簡単に説明します。

【安い】
この汎用USB-IOの基板のキット価格は送料込みで¥1,800→¥1,500(各サイトを確認してくださいね)です。

【簡単】
USBの標準HIDデバイスとして動作しますので、刺すだけで認識します。またアプリはVBのサンプルがHP上で入手できます、これはWin32APIのReadFile/WriteFileで動きます。DeviceIOControl等のむずかしいAPIは不要です。
今回のプログラムもこのサンプルを元に作成しました。
LCDのコマンドを関数にしました、参考までにソースをUPします。 ソース USBLCD.LZH 26kb 
LCDのコマンドを送るのに便利なPort1のあるビットをPlus動作させながらPort0に書き込むコマンドがあることがわかり対応させました。
目で分かるぐらい早くなりました。
(動作説明:Port0に書き込み→Port1の任意の1bitをOFF→Port1の任意の1bitをON)
ただし、LCDはE(Enable)の信号の立下りでデータを認識しているようで最初にPort1の任意の1bit(Enable)をONにしておく必要があります、これをしないと上手く動きません。 手直ししたソース USBLCD2.LZH 26kb

AvtiveBasic3.0が正式リリースされたので、こちらにも対応させてみました。
VBはもっていないので、ちょっとという人は、ActiveBasicはフリーソフトになっていますので、ダウンロードして試してください。
VBA用の専用Dll(vbausbio.dll)をABで使用するを参考にしてください。  ActiveBasicの入手先Discoversoft
vbausbio.dllはVBAで動作するようにしてありますので、Excel、Word、Accessなどからでも使用できます。
「汎用USB-IO試用レポート」でExcelのサンプルもあります。

【16個を同時に使用可能】
例えば12ビットのIOのうち、4ビットをIDとして使えば16個を同時に使用して、残り8ビット×16=128ビットのIOが可能です。
今回のLCD表示では8ビット長のデータで処理しているため12ビットのIOをほとんど使ってしまっているので1個しか表示できませんが、4ビット長のデータで処理するようにすれば空いた4ビットをIDとして使えるので16個のLCDが表示可能になります。

【遅い】
USBのLowSpeedですし、パケットサイズは最大8byteです。
1個のLCDを表示するには問題無いと思いますが、16個も同時に表示するにはちょっと辛そうです。
自分のマシンでは遅すぎたのでLCDとのハンドシェイクは行わず、垂れ流しで処理しました、でもうまく動作しています。
ソース上ではコメントにしてあります。

LCDについてせっかく調べたので、各コマンドを関数にし、簡単にLCDを制御するプログラムを組めるようにしました。
使い方は、フォームロードでおまじないの初期処理を行い。
Call MS_LCD_Print(”ABCDEF”) とすれば、表示されます。
あと、表示クリア、表示位置指定で大抵のことは出来ると思います。

LCDについては日高弘さんのページ内のLCD表示テスト基板を参考にしました。


以下、ソースのコメントより抜粋

'秋月のLCD表示を
'汎用USB-IOにて実現するためのプログラムです。
'オリジナルのusbhidio.vbpを改造して作成しています。
'汎用USB-IOのインタフェース部分はそのまま使用しています。
'下記の配線を前提としてコーディングされています。
'USB-IO <=====> LCD
'P0 1 -------- DB0 DATA BIT0 : 処理速度を早くするためデータは8bitで処理します。
'P0 2 -------- DB1 DATA BIT1 : 速度が遅くてもいい場合は4bitで処理も可能です。
'P0 3 -------- DB2 DATA BIT2 : その場合はこのままのプログラムでは動きません。
'P0 4 -------- DB3 DATA BIT3 : 4bitの場合はDB0〜DB3は使用しません。
'P0 5 -------- DB4 DATA BIT4
'P0 6 -------- DB5 DATA BIT5
'P0 7 -------- DB6 DATA BIT6
'P0 8 -------- DB7 DATA BIT7
'P1 1 -------- RS REGISTER SELECT
'P1 2 -------- LED (Hi:OFF Lo:ON) 余ったのでLEDをつけています。
'P1 3 -------- R/W READ/WRITE
'P1 4 -------- E ENABLE SIGNAL
'Vcc -------- VDD 5V
'GND -------- VSS 0V
'Vcc --+
'     |<--*--- Vo CONTRAST ADJ. 半固定抵抗でLCDのコントラストの調整を行っています。
'GND --+ VR 10k
'
'参考までにLCDコマンド一覧
'--------------------------------------------------------------------------------
'Code '00000001' RS=0,R/W=0
'コマンド Clear Display
'概要 LCD表示を全部クリアしカーソルをホームポジションにセットする。
'Sub名 MS_LCD_Cls
'--------------------------------------------------------------------------------
'Code '0000001*' RS=0,R/W=0
'コマンド Cursor At Home
'概要 カーソルをホームポジションにセットする。
'Sub名 MS_LCD_Home
'--------------------------------------------------------------------------------
'Code '000001IS' RS=0,R/W=0
'コマンド Entry Mode Set
'概要 エントリーモード設定
' I=1 インクリメント指定(左から右)
' I=0 ディクリメント指定(右から左)
' S=1 表示シフトする
'Sub名 MS_LCD_Mode(Bint_I_D As Integer, Bint_S As Integer)
'--------------------------------------------------------------------------------
'Code '00001DCB' RS=0,R/W=0
'コマンド Display On/Off Control
'概要 ディスプレイ制御
' D=1 ディスプレイをON
' C=1 カーソル有り
' B=1 ブリンク有り
'Sub名 MS_LCD_Ctrl(Bint_D As Integer, Bint_C As Integer, Bint_B As Integer)
'--------------------------------------------------------------------------------
'Code '0001SR**' RS=0,R/W=0
'コマンド Cursor/Display Shift
'概要 カーソル動作設定
' S=1 表示をシフトする
' S=0 カーソルを移動する
' R=1 右にシフトする
' R=0 左にシフトする
'Sub名 MS_LCD_CurSft(Bint_S_C As Integer, Bint_R_L As Integer)
'--------------------------------------------------------------------------------
'Code '001DNF**' RS=0,R/W=0
'コマンド Function Set
'概要 機能設定
' D=1 8ビット長のデータを使用する
' D=0 4ビット長のデータを使用する
' N=1 2行表示
' N=0 1行表示
' F=1 5x10ドット文字
' F=0 5x7ドット文字
'Sub名 MS_LCD_Func(Bint_DL As Integer, Bint_N As Integer, Bint_F As Integer)
'--------------------------------------------------------------------------------
'Code '01**DDDD' RS=0,R/W=0
'コマンド CGRAM Address Set
'概要 CGRAMのアドレスを設定する
' D〜D アドレスを指定する
'--------------------------------------------------------------------------------
'Code '1Y**XXXX' RS=0,R/W=0
'コマンド DDRAM Address Set
'概要 DDRAMのアドレスを設定する
' Y=0 1行目
' Y=1 2行目
' XXXX 横方向表示位置(左から0、右端は15)
'Sub名 MS_LCD_Locate(Bint_X As Integer, Bint_Y As Integer)
'--------------------------------------------------------------------------------
回路図
準備中なのでLCDを表示させるために必要な配線のみですが配線図を参考にして下さい(2004/01/20)
写真1
写真の下中央が汎用USB-IOの基板です。
写真の右上が秋月のLCDです。
写真の左上が結線のための基板です。
半固定抵抗はコントラスト調整用です。
その下にLEDと抵抗が2セットあります。
上側はVCCに直結です、電源モニタ用
下側は余ったIOに接続されており、VBのプログラムが動いている間だけつけるようにしました。
写真2
実際にプログラムを起動させると写真のように初期表示されます。
PCの画面には下記のように表示されます。
テキストボックスの中に文字を入力してLCD表示のボタンを押すと入力した内容と同じものがLCDに表示されます。
漢字には対応していないので、入力すると■に表示されます。

時間のボタンを押すと、写真3のように表示されます。
写真3
時間のボタンを押したときの表示内容です。

その他、このプログラムではしていませんが、いろんなことが出来ます。
カーソルの表示、表示のシフト、表示方向の変更、などです。
写真4
バックライト付だったので、暗くして撮って見ました。
結構、きれいですね、明るさの調整は添付されている抵抗の数で調整が出来ます。

半固定抵抗で調整できるのはLCDのコントラストのみです。
バックライトの明るさは固定になっていますが、もう1つ半固定抵抗をつければ調整が可能ですね。
Google Web bake-san.com
ここに関連するキーワードやリンクを検索表示