I2Cの制御方法について
I2Cで時計ICや気圧デバイス、温度デバイスが制御されているののがある。
これらは、データの読出しができれば、簡単に使用することができる。
パターンは3つである
/* 開始条件送出*/ 読出し、/* 停止条件送出*/
---I2Cを起動させる-----------------------
/* 開始条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTA) |(1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
これで、TWINT=1 になれば、次のステップに進める。
---------読出しコマンドの送出と読出し--------------
TWDR=0b11000000; //C0
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
// 18 ACK を受け取る OK
TWDRに制御コマンドを入れて、TWCRにビットを立てる
Nackの送出で、ACKの送出はしない
------データの取得 ------------------------
ans=TWDR; //データ取得
TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN); //ACK
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
TWDRのデータを読む
TWCRは 必ずAKCを返す事 (1<<TWEA)を追加
注意することは、最後のデータを読み出した後は、NACK (1<<TWEA)は入れない
これをやらないと、ハングアップする時がある。
--I2C停止----------------------------------------
/* 停止条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTO) |(1<<TWEN);
wait_ms(100);
//終了したので TWSRは 0xF8を返す
|