汎用I2Cライブラリについて(4525)

連枝では、汎用のI2C通信を標準のポートを利用して、ソフトウェア上で通信を行っております。

今回、お問い合わせをいただき、確認いたしました。当方も覚書として記載させていただきます。

使用するI/Oピンは、下記のいずれかが可能です。

・RB1:SCL RB5:SDA
・RC1:SCL RC5:SDA
・RD1:SCL RD5:SDA

通信時のタイミングの本来の仕様は下記のサイトの30ページに記載されております。

http://ekousaku.web.fc2.com/doc/I2C.pdf#search=%27%EF%BC%A9%EF%BC%92%EF%BC%A3+%E3%83%95%E3%82%A3%E3%83%AA%E3%83%83%E3%83%97%E3%82%B9+%E4%BB%95%E6%A7%98%27

今回、調査した結果、プログラムで待ちを利用しながらソフトウェアでの通信となっております。
通信等のタイミングのお問い合わせがありましたので調べた結果が以下の通りです。

 ただし、従来の連枝では書込(CPUから外部機器)はタイミングを合わせていますが、読込(外部機器からCPU)はタイミングを合わせていないようです。

 そのため、相手機器によってはデータの読み出しが上手く行かない場合も想定されます。この点については、今後の検討課題としてとらえております。

 連枝で設定する場合、汎用のI2CならCPUの設定は通信にはチェックは入れません。

一方、ラダーについてですが、以下の命令が使用できます。

STA2C・・・I2Cのスタート信号
STP2C・・・I2Cのストップ信号
W2CO・・・相手機器のアドレス指定と書き込み指定
W2CDO・・・メモリアドレスの指定またはデータの指定
R2CO・・・相手機器のアドレス指定と読み出し指定
AC2CI・・相手機器から送られたデータを取り込み

ちなみに、下記の指定で、K2Y10と書いている場合は、RB1とRB5を使用する。K2Y30ならRC、K2Y40ならRDです。

・相手機器のアドレスが(51)hで1番地からの読み出し
STA2C K2Y20  ・・・・ スタート信号をRC1とRC5から発出
W2CO  H51  K2Y20・・・ 相手機器のアドレス指定とWモード
W2CDO H1   K2Y20・・・ 対象のメモリアドレス指定
STP2C K2Y20 ・・・ ストップ信号をRC1とRC5から発出

STA2C K2Y20・・・・ スタート信号をRC1とRC5から発出
R2CO  H51  K2Y20・・・ 相手機器のアドレス指定とRモード
AC2CI K2Y20 D10・・・相手機器からのデータ受信
AC2CI K2Y20 D11・・・相手機器からのデータ受信
STP2C K2Y20 ・・・ ストップ信号をRC1とRC5から発出

・相手機器のアドレスが(51)hで1番地から書き込み
STA2C K2Y20・・・・ スタート信号をRC1とRC5から発出
W2CO  H51  K2Y20・・・・相手機器のアドレス指定とWモード 
W2CDO H1   K2Y20・・・ 対象のメモリアドレス指定
W2CDO D10   K2Y20・・・D10を1番地に書き込み
W2CDO D11   K2Y20・・・D11を2番地に書き込み
STP2C K2Y20 ・・・ ストップ信号をRC1とRC5から発出

今回、通信のチェックで活用したのは、
秋月電子通商様が販売されているRTCのモジュールキットです。

http://akizukidenshi.com/catalog/g/gI-00233/