2016-07-09 13:53 | カテゴリ:PIC応用回路

通信するための関数を作ります。

これから使用していくデバイスは、このLCD表示器です。

LCD.jpg

前回は、i2C通信の簡単な仕組みをお話ししました。
芋ずる式に接続したi2Cデバイスを個別に自由に制御するためには、ある種の手順に従う必要があります。
それほど複雑な手順ではありませんが、ちょっとコツがありますので、そのあたりをわかりやすく書いていきたいと思います。

続きは、、、、


なお、わかりやすくするために以下の略号を使用します。

* SA=スレーブアドレス
    * SL=スレーブ側(例センサーなどのデバイス)
    * MS=マスター側(例PICなどの制御する側)

1、i2Cのデバイスには、必ずそのデバイス固有の「スレーブアドレス」が予め割り振られていて、そのスレーブアドレスを指定して、デバイスを呼び出します。
2、通信手順の例は、この様な感じですが、デバイスによってコマンドがいろいろありますので、それに従います。

通信手順や詳細は、こちらの後閑氏のサイトがとても参考になりますので、ご紹介します。

後閑氏の電子工作室

Format.jpg
上記図は「後閑氏の電子工作室」より抜粋しました


 *「スタートの合図の送信」=芋ずる接続のすべてのデバイスにスレーブアドレス受信準備を促す
 *「通信したいデバイスのスレーブアドレスの送信」=受信したスレーブアドレスに該当するデバイスが反応。
   また、このスレーブアドレスには、この次に送受信されるデータが、SL->MS方向(MSから見て読み取り)なのか、MS->SL(書き込み)なのかを示す情報も併せて送られます。(後述)
 * データの通信方向に基づいて、データをやり取りします。
 * 終了は、「終了合図の送信」をもって完了し、そのMSとSLのリンクが解放されます。

3、i2C通信は、基本的に、どちらかがMS、一方がSLになります。PIC側が、SLになって、上位のPICの制御下になることも可能です。


次に、i2C通信を始める際の、設定とコマンドの紹介をします。(後述のプログラム関数を参照ください)

 * PIC側のi2C初期設定(一度だけ設定する)
 * i2C通信の「スタートコマンド」「再スタートコマンド」(後述)

Ini_start.jpg

 * i2C通信の「1バイト書き込み」

write.jpg

 * i2C通信の「1バイト読み込み」「1バイト連続読み込み」(後述)

Read1.jpg

ReadC.jpg

 * i2C通信の「終了コマンド」

Rest_Stop.jpg


  (注)「再スタートコマンド」は、一連の連続コマンドを与える際に使用します。
     「1バイト連続読み込み」は、データを連続読み込みの際に使用します。
     書き込みは、原則、「1バイト書き込み」を連続で使用可能です。


ここで、スレーブアドレスについて詳しくお話しします。
ちょっとややこしいのですが、スレーブアドレスはデバイスごとに定まっていて、7ビットで与えられます。(10ビットもありますが、今回は7ビットとします)
そして、デバイスにスレーブアドレスを送信する際には、この7ビットの再最下位ビットに0か1を付加して、合計8ビットとして送信します。

この追加するビットの値が、
0なら、次は、MAからSLへの通信(MSから見ると書き込み)
1なら、次は、SLからMAへの通信(MSから見ると読み込み)
を意味します。

従って、実際に運用する際は、与えられたスレーブアドレスの7ビットを1ビット左シフトした値をスレーブアドレスとして、プログラム上では記憶し、読み出し時はスレーブアドレスに+1して(最下位ビットを1にして)送信します。

ここまでのプログラムはここにあります。

i2CProg.txt


それから今回使用する例題のi2Cデバイスは、こちらにします。
「I2C接続キャラクタLCDモジュール 16x2行 白色バックライト付」
バックライト付きの、16文字2行表示のLCDです。
秋月さんで販売されています。

秋月電子さん

以下、秋月さんの商品紹介より

P-05693.jpg

P-05693 (1)

次回から、これを使用して液晶表示にトライしていきたいと思います。


管理者のみに表示する