2016年7月15日金曜日

MSP430G2553とRaspberry PiをI2Cで繋ぐ


■MSP430G2■

超低消費電力をArduinoと同じコードでさくっと動かすにはMSP430G2553 + Energiaに限ります。クロックを1Mhzに落とせば消費電流220μA、単3エネループ2本で1年近くもってしまう計算になります。

■接続■

GND同士、SDA同士、SCL同士…をつなぎます。3.3vは接続してはいけません。

ラズパイのHDMI端子を手前におき、GPIO端子の手前側の列、左から2番目がSDA、3番目がSCL、SCLの奥がGNDです。

例によって白がSCLです。でも黄色SDA/茶GNDなのは在庫切れorz

MSP430G2553側は、P1.6がSCL、P1.7がSDA、20ピンがGNDです。

Energiaは、I2Cが自動的にプルアップされるので抵抗を外付する必要はありません。海外ブログで ラズパイとArduino Unoをつないでいる記事を見かけて、それによれば「ラズパイがマスターでArduinoがスレーブなら問題ない。ラズパイは3.3vでプルアップされるがArduino側はされてないからだ」とのことなんですが…今手元にArduino unoがないので、確認できません。Nanoパチ(5v)で試したところ、4.5v程度の中途半端な電圧が出ていました。なので、5vロジックのArduinoを使うことはお勧めしません。接続前に電圧を測定してからにした方が無難です。

■Energiaの準備■

TI MSP430 LauchPadにMSP430G2553をセットします。同じMSP430G2でもチップによってジャンパの設定が違いますので、チップを取り替えたらこのページで確認してください。

ソースはこれです。Energiaは単に信号を受けて、1バイト目 x 2バイト目の回数、LEDを点滅させています。2バイト以外の場合はバイト数を高速で点滅します。ただし10以上はカットします。動作確認用なので特に意味はありません。

今回Arduinoではじめてi2cスレーブを書いたんですが、受信も送信もハンドラを書く方式でわかりやすくて良いですね。今後活用したいと思います。




■ラズパイの準備■

ここを参考にして一発でした。ありがとうございます。

あとは、i2cdetectで0x40が現れれば接続はOKです。
pi@raspberrypi:~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --                      
pi@raspberrypi:~ $ 

あとは、以下のように4バイト書き込めば4回チカチカし、
sudo /usr/sbin/i2cset -y 1 0x40 3 2 2 7 i

こちらで6回ゆっくり点滅すればOKです。
sudo /usr/sbin/i2cset -y 1 0x40 3 2 2 7 i

私は貧乏性なので数千円のラズパイを壊すのがとても恐ろしい。ですが、この構成ならば、例えばリレーやモーターなどの危ないことはマイコンにやらせておいて、ラズパイ様は安全なところで命令だけ下していればいい…という運用も可能になります。

■追記7/24■

i2cdetectで0x40にデバイスが現れない場合には、Energia IDEのバージョンをRelease 0101E0015にしてみてください。Release 0101E0016 / Release 0101E0017でI2Cが動かないという問題で大ハマリしたことがあり、まさにさっき同じ穴に落ちましたのでorz

0 件のコメント:

コメントを投稿