« MSP430 で消費電力測定(INA226) (1) | トップページ | 新しいピンセット »

2013.02.08

MSP430 で消費電力測定(INA226) (2)

前回の続きです。
013ina226temae

i2c 液晶の表示で、i2c の書き込みはできるようになりましたが、
このプログラムではi2cの読み込みがありません。
 INA226では、i2cでデータの読み込みができないといけないので、
この部分は自分で実装しました。

void i2cReceive(void)
{
 int ret;
 while (!(P1IN & BIT6));
 USICTL0 &= ~USIOE;    // SDA = input 
 USICNT = 8;
 while (!(USICTL1 & USIIFG));
 // send ACK
 ret=USISRL;
 USICTL0 |= USIOE;   // SDA = output
 USISRL = 0;
 USICNT = 1;
 while (!(USICTL1 & USIIFG));
 return ret;
}

MSP430 のUSIはだいたいこんな使い方です。
1. SDA の入出力を設定する。
  今回は入力なので USIOE=0
2.USICNT にクロック数を設定する。
  今回は8ビットの入力なので、8を設定。
3.USICNT に0以外の値を設定した時点でUSIがかってに動いてCLKを出力する。この時、USIOEの設定により、出力ならUSISRLから出力。入力ならUSISRLへ読みこんだ値を読み込む。
  今回の場合USICNT=8なので、8ビット分、CLKを動かし、8ビットのデータを読み込んで、USISRLに読み込む。読み込みが終わると、自動で止まり、USIIFGを1にするので、これをポーリングして待つ。

たとえば、今回使用している INA226の電圧や電流値を読む場合、以下のようになります。

1.INA226のレジスタ番号reg へデータdata(16bit)の書き込み


i2cMakeStartCondition(); // START bit
i2cTransmit (INA226SlaveAddr <<1) // INA226のアドレスを送出。最後のbit が0なので、以下はINA226への書き込み
i2cTransmit (reg); // INA226へregを書き込み
i2cTransmit (0xff &(data>>8)); // data 上位バイト書き込み
i2cTransmit (0xff & data ); // data 下位バイト書き込み
i2cMakeStopCondition(); // STOP bit

2.INA226からのデータの読み込み(読み込むレジスタは事前に書き込んで置く)


i2cMakeStartCondition(); // START bit
i2cTransmit ((INA226SlaveAddr <<1)+1); // INA226のアドレスを送出。最後のbit が1なので、以下はINA226からの読み込み
data =(i2cReceive() << 8); // INA226から読み込み(上位1バイト)
data +=i2cReceive(); // INA226から読み込み(下位1バイト)
i2cMakeStopCondition(); // STOP bit


この辺のUSIの動きがTIのデータシートには、いまひとつ分かりやすく書かれていないので、今回、プログラムを書きながら理解できました。

つづく。

|

« MSP430 で消費電力測定(INA226) (1) | トップページ | 新しいピンセット »

趣味」カテゴリの記事

組込」カテゴリの記事

電子工作」カテゴリの記事

MSP430」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: MSP430 で消費電力測定(INA226) (2):

« MSP430 で消費電力測定(INA226) (1) | トップページ | 新しいピンセット »