|
1、2、3線シリアル・インターフェース(連載 第5回、最終回)
今回は最終回です。これまで、SPIの応用例は第3回でディジタルI/Oボードについて書きましたが、今回はI2Cインターフェースを使用したセットの製作例やその他の応用例について紹介します。
●I2Cインターフェースの応用例(I2C制御7セグメントLED表示器)
パーツショップで販売されているキャラクタ表示のLCD(液晶表示器)は6、7本と比較的少ない信号線で制御できますが、7セグメントLEDの場合はダイナミック・ドライブ(逐次点灯方式)で作ったとしても、LCDより多くの信号線が必要になります。
そこで、表示器部分をI2Cスレーブ・デバイスとして作っておけば、制御に必要な信号線は2本で済みます。次の写真は6個の7セグメントLEDと8個のLEDで作ったI2C(SPI)制御のLED表示器です。

制御にはPIC16F876を使用しています。処理の内容からすると、16F876には役不足で、少しもったいないような気もしますが、16F88を使って足りないI/Oを汎用ロジックIC(D-FFやシフトレジスタなど)で補うよりも、コストも手間も省けると思います。
処理はLEDのダイナミック・ドライブとI2C通信部分の二つに大きく分けられますが、通信部分をSPI制御に差し替えればSPIスレーブとしても使えます。今回は作りませんでしたが、プログラムを変更すれば、非同期シリアル(RS-232Cなど)にも対応できます。
次の表には、この表示器のI2Cコマンドを示しますが、コマンドはシンプルに8ビットにまとめてあります。単純に1桁分の表示データ(0~0xF)を送信すれば、左桁から順番に16進数の文字が表示されます。これだけでは表示を制御できないので、表示開始位置(カレント・ポインタ)を指定したり、表示を点滅させるようなコマンドも用意してあります。

たとえば、数値を単純に表示する場合は、次のようなコマンドを送信します。
S CB(W) 0x40 1 2 9 P
Sはスタート・コンディション、CBはコントロール・バイト(I2Cスレーブ・アドレス)、0x40はデータ・クリア・コマンド、Pはストップ・コンディションを示します。この通信で表示器には次のように表示されます。

このように、数値表示器をコンポーネント(部品)として作るのには、制御信号の数を減らす以外にも、処理を分散させてホスト側の負担を軽くするという意味があります。
LEDのダイナミック・ドライブのように短時間で周期的に動く処理をもつプログラムでは、ほかの処理の負荷が重いと周期を正確にするのに苦労しますが(周期が乱れると表示がちらつく場合がある)、処理を分散させることで、表示器側は通信と周期処理に専念できます。ホスト(マスタ)側ではLEDの制御に関してはまったく考えなくてよいので、ほかの処理に注力できます。
●コンポーネント化
I2CやSPIの通信手段が確保できれば、複数のCPUに処理を分散させるようなアプリケーションも容易に作れます。これまでに紹介したディジタルI/Oボードや数値表示器のように、機能ごとにコンポーネント(部品)化したスレーブ・デバイスを用意しておけば、それらを組み合わせていろいろなアプリケーションに応用できます。
PICは、その名前の由来からわかるように、このような処理を分散させるペリフェラル・デバイスやサブ・コントローラのような小規模なアプリケーションに向いています。
筆者は現在、ここで紹介したもののほかにもI2C/SPI制御のコンポーネントとして、イルミネーション・コントローラ(ディジタル調光器)や、RCサーボ・モータ・コントローラ、パルス・モータ・コントローラなど、開発中のものも含めていろいろなセットの製作を計画、実施しています。また、ネットワーク・デバイスのXPortを接続し、ネットワーク経由でI2C/SPIデバイスを制御することも計画中です。
●最後に
本連載では具体的なプログラムの話には触れませんでしたが、書籍「マイコンの1線 2線 3線インターフェース活用入門」では、I2C、SPI、1-Wire各インターフェースごとに、PICとH8を使った具体的なプログラミングについて解説しています。
前半の実験編ではPIC、H8それぞれのアセンブリ言語でプログラムを作成しています。制御プログラムはインターフェースの種類、マスタ/スレーブの違いごとにプロトタイプのドライバ(共通サブルーチン)という形でまとめてあります。
後半の応用編では次のようなものを製作しています。
・SPIディジタルI/Oポート(SPIDIO)
・I2C/SPI制御の7セグメント数値表示器
・I2Cディジタル温度センサLM75、I2C-EEPROM 24LC64を使った温度ロガー
・1-Wire DS2751 FuelGauge を使った評価用のニカド電池モニタ、充・放電器
SPIDIO以外はコントローラにPICを使用し、プログラムはPIC Cコンパイラで作成しています。
これまでの連載で、I2C、SPI、1-Wireの概要や動作などについて説明してきましたが、これを機に、これらのインターフェースに興味を持ち、実際に使ってみたいと思われる方が増えると幸いです。
タグ:
1-Wire
I2C
LM75
SPI
投稿者: yoshida 日時: 2007年5月21日 17:02 | パーマリンク |TOPページへ ▲画面上へ
トラックバック
このエントリーのトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/261
|