汎用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/

4620および4680への対応について

現在のところ、4620および4680に対応した
ライブラリが見つかっておりません。

以前は、対応したライブラリがあったとの
お問い合わせをいただいたのですが、
調査中です。

また、引き継いだ時点での販売ソフトおよび
ハードの再開を目指していますので、
新しいチップへの対応は少し時間がかかりますことを
ご了承ください。

4525でBCD命令の動作仕様の変更

以前の4525のライブラリでは、BCD命令の転送先の
デバイスは、ワードデバイス1つ分でした。

一方、最新のライブラリでは、BCD命令の仕様が
変更されております。
変更範囲は、指定したワードデバイスと次のデバイス
2つ分を変更いたします。

ご注意ください。

4525で高速パルスが断続的になる

 高速パルスを出力する機能と通信機能両方使用する
プログラムの場合、高速パルスが断続的に
出力される現象が確認できました。

 これは、パルス出力中に通信機能が働き、
パルス出力が中断されることによる
不具合となります。

 根本的な解決ではございませんが、
高速パルス出力中に通信を停止する措置を
する対応をする予定です。

また、この仕様につきましては、今後根本的な
解決に向け検討する予定です。

46K22のタイマ割込みのタイミング不良

割込のタイミングがおかしい
「パルス、高速カウンタ、キー・スキャン P452-SET-LB」ではなく、
ツールバーの割込ボタンでプログラムする割込です。
TOISTAタイマ割り込みを使用して1ms周期の割込しています。
4525では正常だが、46K22だと0.5ms周期になってしまう。

内部のクロックが上がったことによる不具合です。
こちらにつきましては、ライブラリの修正を行いました。

46K22のI2C通信について

「4525で通信ができていたI2Cだが、46K22に
なると書き込みができるが、読み出しができなくなった」
とのお問い合わせをいただきました。

調査の結果、I2Cの汎用ライブラリ
「 汎用I2C素子用プロトコル生成ライブラリー P452-I2CPROT-LB 」に
問題がございました。
CPUの内部クロックが上がったことによる
弊害となります。

この問題につきましては、ライブラリを修正いたしました。

4525RS232CとI2C制御について

未確認情報として、ご利用者様から以下のような
お問い合わせがございました。

「PIC18F4525についてタッチパネル(RS232C)とI2Cを制御する場合は、
 I2Cを2系統までの制限有との話があったが現在は解決しているか。」

この点につきましては、検証できておりません。
ご購入の際にはご注意ください。

4525D200以降を含むラダーが変換できない

「D200番以降を含むラダーがHEX変換できなくなっている。」

D200番は保持リレーです。
DLL側で使用できないようにしているようです。理由は不明ですが、
現在、変換できるように改良いたしました。

新しいライブラリでは、通信やデバッガを使用していない時は、Hexファイル変換可能です。
通信・デバッガ使用時はD200番以降があると、エラーを表示し、変換できないようにしています。

(マニュアルを抜粋)

D200~D214 を記憶用メモリーとし、電源断後もその値いを 保持します。

変化があると、保持リレーと保持メモリーは内部のEEPROMデ-タメモリ-に書き込まれ、電源の再立ち上がり時に読み込まれます。
書き込みに20mS以上かかることがありますので、回路の体内時計がくるいますので、頻ぱんに変化する入出力は避けて下さい。(保持リレーのメモリは電源立ち上げ時に読込まれます。)

註)デバッガを使用する時やシリアル通信を使用するとき、保持(D)メモリーは使えません。

45K22高速タイマーの不具合

DLLの提供時期によって、タイマーおよび高速タイマ、
Mリレーのタイマの時間が半分になっている
ことがあります。
この点につきましては、内部クロックの増加による
影響となります。

0.1 秒クロックパルス M9030
0.2 秒クロックパルス M9031
1 秒クロックパルス M9032

現在は、こちらの不具合を修正いたしました。