FC2ブログ

我、通信ニ成功ス(その2)

久々に時間が取れてヤル気にもなったことから、春に取り組み始めたRL78のI2C接続
のための関数づくりを再開しました。

これまでにI2C接続用のLCD(一枚目写真)は文字を出せるようになっていたので、
今度はI2CのEEPROMとLCDをカスケード接続し、RL78基板に接続しているDipSWから
読み込み、ROMに書き込んだ直後に読み出し、LCDにその内容を表示するプログラムを
作りました。

書き込んだ後に読み出そうとすると、なぜかI2CがN-ACKとなりデータが出てきません。
ロジックアナライザ(I2Cのプロトコルアナライザ機能あり)で確認したところ、EEPROMには
正しいデータは伝送できている様子。

試しに読み出しだけを行ったところ読み出すことができたので、書き込み・読み出しのための
関数はそれぞれ正しく機能していることが確認できました。

しかし、データを書き込んだ後に読み出すと、やはりうまくいきません。
いろいろと試してみるうちに、書き込みと読み出しの間に3.5ms以上の時間待ちがあると
うまくいくことが判りました。

使用したEEPROMは秋月で買ったマイクロチップの24LC64です。
データシートを見ても、繰り返し書き込みの時間は載っていますが、書き込みのあとに
どれだけ時間を置けば読み出すことができるのかは書かれていません。
他の英語資料にあるのかもしれません。

よくよく考えてみると、EEPROMがそんなに早く書き込み完了できるはずはないので、
読み出しが書き込み直後にはできないのは理解できるのですが、そうれあれば書き込みが
終わっていない状態のときに読み出し命令が来た時には、クロックストレッチ(スレーブ側が
処理を一時的に遅延させる機能)するようになっていればよいのではないかと思うのですが・・・

I2C接続の各種部品が販売されているので、これまでは入出力のための万能な関数を作れば
簡単に接続して使えて便利なのではないかと考えていました。

ただ、I2CはデータのReadとWriteの基本フォーマットは決まってはいるものの、データ伝送の
ワード数?はそれぞれに違うので、共通化できるのは入出力のための基本的な部分だけで、
結局は制御する装置それに合わせて共通化した関数を組み合わせて専用の関数をつくる
必要があり、それはそれで手間がかかってしまいます。

コントロールは何ワード、データ送信に何ワード、受信に何ワードとすべての装置に共通で
あれば便利だと思うのですが・・・


とうとう、開閉法による平方根プログラムを再開する気持ちが高まってきたかも。



2017_0727_1

2017_0727_2

2017_0727_3

この記事へのコメント:

管理人のみ通知 :

トラックバック: