● 実験テーマ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