[トップページへ戻る]

FT232Rモジュール活用 #2 ビットバンモードでLCDモジュールを制御する

2011年9月
LCDモジュールを制御するのに必ずしもマイコンは必要ありません。
この記事ではFT232Rモジュール(USB-シリアル変換モジュール)のビットバンモードを利用し、マイコンなしでPCからLCDモジュールを制御する方法を紹介します。
PCアプリで簡単にLCDモジュールが使えるC#用ライブラリ「FT232LcdLib」を公開しています。

シリーズ記事
#1 ドライバのインストールからソフト開発まで
#2 ビットバンモードでLCDモジュールを制御する
#3 FT232-AVRライター とにかく導入が簡単
#4 ビットバンモードで7セグを制御する

秋月電子通商
FT232RL USBシリアル変換モジュール (商品ページ)


LCDモジュールをPCにつなぐまで
マイコン電子工作でお馴染みのLCDモジュール。PCで制御するにはどのようなシステムにすればよいでしょうか。

STEP1

センサーの反応やボタン操作をマイコンで処理し、結果をLCDモジュールに表示する電子工作は一般的です。
このシステムに、センサーやボタンではなくPCから入力を与えることを考えてみます。

STEP2


PCに機器を接続するには通常、USBを使います。マイコン側は、AVRにしろPICにしろ趣味の電子工作でよく使う品種のうち、USBの機能を内蔵したものはほとんどありません。マイコン内にソフトウェアでUSBの機能を実装する技術はありますが(例えばAVRのV-USB)、マイコン側のアプリ作りが複雑になります。処理速度の問題もあります。
【参考】
AVR-CDCの技術を使ったLCDモジュール操作の例。
(1)「LCDモジュール SC162シリーズ」…PCでマイコンのポートを制御してLCDモジュールを操作する。処理が遅い。
(2)「AVR-CDCにLCD/EEPROM操作機能を組み込む」…マイコン内に用意しておいたLCD操作コマンドをPCから呼び出す。処理が複雑。


逆に、大抵のマイコンはシリアルポートとの通信手段を内蔵しています(TXD/RXDによる通信)。ところが今時のPCにはシリアルポート(COMポート)は基本的に付いていません。ノートPCやネットブックにはまず付いていません。
従って、いずれにしてもPCとマイコンの接続は難しいと言えます。※【参考】の通りできることはできるが、不利な点が目立つ。

STEP3

そこでUSB-シリアル変換ICの登場です。このシリーズ記事ではFT232Rモジュールを取り上げています。
これによりPCとマイコンの仲介が上手く行き、PCからLCDモジュールまでがつながります。

このシステムでは、あらかじめマイコン内にLCD操作のコマンドをいくつも用意しておき、PCからそのコマンドを指定することで、LCDモジュールに文字を表示したり消去したりといった動作をさせることになります。※先述の【参考】(2)と同様。

結構複雑なシステムです。もう少し簡単にならないでしょうか? そもそもLCDモジュールは、マイコンでないと制御できない、というものではありません。LCDモジュールの制御に最低限必要な信号線は、データ線4本+制御線2本です(もちろん電源は必要)。要するに、マイコンでもPCでも何でも、6本の線を自由に制御できる機器ならLCDモジュールを制御できることになります。

STEP4

FT232Rの動作モードの一つ、ビットバンモードは8本のI/O線を自由に制御できる機能です。
これを利用すれば、マイコンなしでLCDモジュールを制御できるようになります。

このシステムはコマンド呼び出し方式ではなく、ソフトウェアの内容はLCDモジュールのI/O線6本を操作する記述になるので、何をしているのか(どんな制御をしているのか)が分かりやすくなります。

動作の様子

文字を表示するデモ動画です。
制御の様子が分かりやすいよう、ステップ実行しています。

USB給電。LCDモジュールに電源が入ります。
文字出力の制御をステップ実行で見せています。
まず「H」を表示。次いで「a」「l」「l」「o」。
残り一気に「Hallo world!」「FT232-LCD lib.」です。

FT232LcdLib (C#ライブラリ)
FT232Rモジュールを使ってLCDモジュールを操作するC#ライブラリを用意しました。自由に使ってください。
【お約束】利用に際して何か不都合が起ころうとも当方は一切の責任を負わないものとします。

ダウンロードFT232LcdLlib + デモプログラム (VisualStudio2008のプロジェクトファイルごと)

リファレンス
namespace FT232LcdLib

enum BitBangSignal
D0, D1, D2, D3, D4, D5, D6, D7
FT232 ビットバンモードの信号名(各ビットの名前)。D0 = 0 〜 D7 = 7

class LcdCtrl
コンストラクタ
LcdCtrl(FTDI ftdev, BitBangSignal lowestDataBit, BitBangSignal bitRS, BitBangSignal bitE)
FTDI ftdev RS232デバイスのオブジェクト
BitBangSignal lowestDataBit データ線の最下位ビット(例:D3-D0使用ならD0、D7-D4使用ならD4)
BitBangSignal bitRS LCDモジュールのRegister Select線の割り当て
BitBangSignal bitE LCDモジュールのEnable Signal線の割り当て

プロパティ
Is8x2to16x1
bool {get|set}
見かけ上16文字x1行だが内部は8文字x2行というLCDモジュールに対して(例:S-10551D)、
見かけ通り16文字x1行と扱えるようにするフラグ(静止表示設定の場合)。
※もともと見かけ上が8文字x2行のLCDモジュールに対しては、自動改行する振る舞いになる。

メソッド
void BitReset()
FT232のビット出力をリセットする。
データ線4ビット+RS線+E線 の6線に0(Low)を出力する。
void Cmd(int data)
int data LCDコマンド。LcdCmd,LcdSubCmd定義の値。またはそれらと同等の整数。
LCDコマンドを実行する。
void Init()
LCDを初期化する。
コンストラクタでLcdCtrlオブジェクトを生成後、最初に実行すること。一度実行すれば十分。
void Cls()
LCD画面を消去する。
LCDコマンドのClearを実行することと同じ。
void SetPos(int row, int column)
int row 行 0,1
int column 桁 0,1,2,…,15
表示位置を指定する。
引数の具体値は2行16桁LCDモジュールの例。
4行のLCDモジュールであればrow=0〜3が有効。
8桁のLCDモジュールであればcolumn=0〜7が有効。
void PutChar(char c)
void PutChar(byte c)
1文字出力する。
引数はLCDモジュールで定義された文字コード。
.NET Frameworkのchar型はUnicodeなので1バイトではないことに注意('a'=0x0061 'あ'=0x3042)。
※もとよりマルチバイト文字は受け付けていない。
void PutStr(string s)
void PutStr(string s, int row, int column)
文字列を出力する。
LCDモジュールが静止表示設定の場合、長い文字列を指定しても表示範囲外は無視される。
2行以上のLCDモジュールでも自動的には改行表示されない。
void PutInt(int n)
void PutInt(int n, int row, int column)
数値を出力する。
void DefChar(int id, byte[] dots)
int id 0〜7(キャラクタコード)
byte[] dots 5x8のドットパターンを格納した配列。
外字を定義する。

デモプログラム
FT232LcdLibを使ったデモプログラムです。LCD画面に「Hallo world!」を表示します。デモ動画と同内容です。
ビットバンモードでのソフト開発の詳細についてはシリーズ#1の記事を読んでください。

デモ回路の配線図


プログラム解説


準備
プロジェクトに「FT232LcdLib.cs」を加えます(追加→既存の項目)。
アプリケーションのファイルで名前空間「FTD2XX_NET」と「FT232LcdLib」をusingに加えます。
ソースコード全体

Main()部分

※撮影時バージョン。'wordl'タイプミスはご愛敬。
11-12行目
デバイス(FT232Rモジュール)を操作するためのFTDIオブジェクトを生成し、デバイスをオープンします。
PCにデバイスが1つしか接続されていない場合はインデックス0番が確定しています。

13-14行目
非同期制御(Asynchronous Bit Bang mode)でビットバンモードを設定します。8bit I/Oは全て出力方向です。
ボーレートは9600bpsで十分な表示速度が得られます。38400bpsなど大きな値を設定すると表示は速くなりますが、LCDの表示特性上、一定以上のボーレートになると見た目の表示速度はほとんど変わりません。

17行目
LCDライブラリを使用するためにLcdCtrlクラスのオブジェクトを生成します。
第1引数には、FTDIオブジェクトを指定します。
第2引数には、LCDモジュールのデータ線4bitの割り当てを指定します。連続した4bitの最下位ビットを指定します。
第3引数には、LCDモジュールの制御線のうち、RS線の割り当てを指定します。
第4引数には、LCDモジュールの制御線のうち、E線の割り当てを指定します。

18行目
LCDモジュールを初期化します。
Init()は、いかなるLCD操作にも先駆けて実行してください。プログラム動作中、1回実行すれば十分です。

21-22行目
文字列を表示しています。
接続したLCDモジュールが16桁x2行タイプなので、PutStr()の引数は16文字までにします。
17文字以上の文字列を指定してもエラーではなく、17文字目以降は無視されます。
改行操作はないので、開発者がその都度表示位置を指定する必要があります。

25行目
後始末として、デバイスの8bit I/OのうちLCDモジュールの操作に使用した線をリセットします('0':Lowを出力)。

26行目
デバイスをクローズします。

Is8x2to16x1プロパティを設定する例
LcdCtrlクラスのIs8x2to16x1プロパティをtrueに設定し、「16x1(内部8x2)」タイプのLCDモジュールを操作する例です。

※前半8文字だけでなく16文字分が一気に書けている。
19行目
Is8x2to16x1プロパティをtrueに設定します。
true/falseどちらでも、設定すると表示位置は(0行, 0桁)にリセットされます。

23行目
連続で2行分の文字列を表示すると1行目の表示が確認できないので、キー入力待ちを入れています。

24行目
2回目の文字列表示です。LCDモジュールに2行目はないので、表示位置も1行目を指定します。
引数としては(0行, 0桁)の指定となります。

アプリ製作例 リソースモニタ
AVR-CDCにLCD/EEPROM操作機能を組み込む」で公開しているリソースモニタを移植しました。

FT232ResMon
ダウンロードft232resmon.zip (実行ファイル+DLL+ソースファイル)

ft232resmon.zipファイルの内容
ft232resmon.exe
 リソースモニタ実行ファイル。コンソールアプリケーションです。
FTD2XX_NET.dll
 上記exeファイル実行に必要です。
Program.cs
 ソースファイル。先述「FT232LcdLlib + デモプログラム」のプロジェクト内の
 Program.csと差し替えて利用できます(研究、改造)。



◆ ◆ ◆
FT232Rモジュールの活用例として、マイコンなしでLCDモジュールを制御する方法を
紹介し、デモプログラムを示しました。また、その制御ライブラリを公開しました。
次回はビットバンモードを活用したAVRライターソフトを紹介します。
AVRマイコン、始めてみませんか?



(C) 『昼夜逆転』工作室 [トップページへ戻る]
inserted by FC2 system