/* *************************************************************************************** i2c_mstr.h I2Cマスター機能のためのヘッダファイル 2010.12.25 im swNAK氏のプログラムからimが作製。「動いている」が正しいとは限らない。 i2c_mstr.c とともに使用プログラムフォルダに置くこと。 FCPUにより 下記の 『#define TWBR_data 18 』の値を適切に設定のこと。 FCPUは makefile で決定しているので注意のこと。 SCKは100kHzを使用している。 RTC読み出しの手順 // ライト・シーケンス I2CStart(); // スタート・コンディション I2CWrite(0xd0) // CB(W) Adrs=0xA2(A2+0) R/W=0 I2CWrite(0xXX); // ROM Adrs(H) Hは不要=無いものに指定すると誤動作する I2CWrite(0x00); // ROM Adrs(L) I2CWrite(0xXX); // 0番地書き込みデータ I2CWrite(0xXX); // 1番地書き込みデータ I2CStop(); // ストップ・コンディション発行 //リード・シーケンス (読み出す内部番地を書き込んで、リピートする) ------- 流れ ---------------------- I2CStart(); // リピート・スタート・コンディション |スタートコンディション発行 | I2CWrite(0xd0) // CB(W) Adrs=0xd0(d0+0) R/W=0 |コントロールバイト(書き込み) | I2CWrite(0xXX); // ROM Adrs(H) Hは不要=無いもの | | // に指定すると誤動作する | | I2CWrite(0x00) // ROM Adrs(L)指定=読み出しポイント00 |ROMアドレス書き込み(読み出し起点) | I2CStart(); // リピート・スタート・コンディション |リピートコンディション発行 | I2CWrite(0xd1) // CB(R) Adrs=0xA3(A2+1) R/W=1 |コントロールバイト(読み出し) | dat1 = I2CRead(0); // バイト・リード(ACK応答) |読み出し(継続) 自動インクリメント | dat1 = I2CRead(1); // バイト・リード(NOACK応答) |読み出し(最終) | I2CStop(); // ストップ・コンディション発行 |ストップコンディションで終了 | ---------------------------------------- スレーブのアドレス指定時は NOACK 対策を施すべきだが省略している if(!I2CWrite(0xd0)) { // CB Adrs=A2(W) // NOACK時 I2CStop(); // ストップ・コンディション発行 Delay3(); string_out("NOACK!!!!"); while(1){} } TWIビットレート値設定 100kHzの時は クロック(MHz)*1.25-2 の値になる。←←←(注意) 8MHz=8 12MHz=13 16MHz=18 20MHz=23 ********************************************************************************************* */ //**************************************** ↓ I2C設定 ********************************************* #define TWBR_data F_CPU/1000000*1.25-2 // TWBR値を指定 FCPU(MHz)*1.25-2 注意:F_CPUにより変更のこと (上記)9999999999 #define true 1 #define false 0 #define rgSCond (1<