● 実験テーマ5

「ソフト記述による、I2C検討計画1(RTC)」の顛末記

■ 2010.09.04
  <目的等>
  ・最終的には、従来のRTC+温度データをEEPROMに記録し読出しするロガーを、SDカードに記録し、読出し
   はターミナルに変更することを目指す。
  ・上記を実現するためには、1つ問題がある。
   それは、SDカードはSPIで制御するため、I2Cモジュールと共通ポートである、このポートのI2Cモジュールを
   RTCに使えない。
   よって、RTCのI2Cを、ポート制御でコントロールが必要になる。
  ・その第一段階として、ソフトI2Cにより、RTCのみ動かすことを考えてみる。
   まず書込みシーケンスのみを考え、ループさせソフトオシロ2でタイミングを確認する作業から入ろうと思う。
  ・CPUは、dsPIC30F4013を使用

  <ソフト記述での不安点>
  ・I2Cバスの、Hi-Z状態を作り出すには、ポートを入力にすればよいか?
  ・スレーブからのACK受信の時も、ポートを出力から入力に切替え、受信待機にすればよいか?
  → 結果的に、この2つの考えは正しいことが判った。

 


■ 2010.09.05
  ・I2C規格を参照に、書込みシーケンスを、各信号(SCL, SDA, ACK)のタイミングチャートで表し、それを
   眺めながら、ポート制御でタイミングを取る記述を、C言語で記述していった。
  → その結果、書込みシーケンスは問題無く一発で動いたが、読込みシーケンスに問題が発生した。
    読込みシーケンスの問題は、リスタートからのタイミングNGで、これは、データ読出し後、SDAを出力に切替
    てなかったのが原因していた。修正でOKになる。
  ・タイミング測定用のループを外し、プログラムを正規のRTC動作に戻し、確認したところ問題なく動いた。

  ・以下に検討に使ったチャートと、ソフトオシロ2でのタイミング測定結果を示します。

 


<最終回路図>
 ・ この時点では、回路図CADを持ち合わせてなかったので、画像の貼り合わせと、オートシェープで作成してました。
   尚、dsPIC(トレーニングボード)側の回路は、主要な部品のみの接続を示しています。

<最終ソース・ファイル>
 ・こちらから、どうぞ→ 
soft_i2c_rtc_check_4013.c


← 実験テーマ1に戻る   TOP PAGEに戻る   実験テーマ6へ →