ProcessingライブラリのI2C周りは突貫でつくったので自分でも分かりづらい
のちのち直していきたいです
遠藤孝則
cessingライブラリ担当の遠藤と申します
ADXL345を実際に持っていないので、データシートを見る限りですが、
> Wire.beginTransmission(0x53);
> Wire.send(0x2D);
> Wire.send(8); //measuring enable
> Wire.endTransmission();
は正しいと思います。
データを取得する際は、
データシートには、軸の値はレジスタ0x32から0x37とありますので
0x32から6バイト読み出す必要があります
byte[] bu = {COM_I2C_REQUEST,COM_READ,0x32,0x06};
となると思います
読みだした値はreceiveData()関数内で参照できますので、
public void receiveData(int regAddress,byte[] data){
switch(regAddress){
case 0x32:
x = (((int)data[1]) << 8) | data[0];
y = (((int)data[3])<< 8) | data[2];
z = (((int)data[5]) << 8) | data[4];
}
}
という感じになると思います
コードは実際に動作を確認してませんので注意してください
遠藤孝則
2010年12月23日23:29 tonny <tonn...@gmail.com>:
> --
> このメールは Google グループのグループ「funnel-dev-talk-ja」の登録者に送られています。
> このグループに投稿するには、funnel-de...@googlegroups.com にメールを送信してください。
> このグループから退会するには、funnel-dev-talk...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/funnel-dev-talk-ja?hl=ja からこのグループにアクセスしてください。
>
>
--
endo takanori
早速ご回答いただきまして、ありがとうございます。
ご添付いただいたソースを拝見した上で、実行してみますが、データが取得していなかったです。(data[0]からdata[5]までは全部0です)
もう一回データシートを読みますと、9ページ目のところで(http://www.sparkfun.com/datasheets/Sensors/
Accelerometer/ADXL345.pdf)Figure 9. I2C Device Addressingという図がありました。この図
によりますと、データを取得する際には、まずREGISTER ADDRESSをWRITEしてから、READできます。
従いまして、
byte[] vu = {COM_I2C_REQUEST,COM_WRITE,0x53,0x32,0x33};
io.sendSysex(conectedModule.getModuleID(),vu.length,vu);
byte[] bu = {COM_I2C_REQUEST,COM_READ,slaveAddress,0x32, 0x02};
io.sendSysex(conectedModule.getModuleID(),bu.length,bu);
を試していきますが、相変わらず取得したデータは0でした。
どこか問題があるはずと存じますが、はっきりわかりません。この点について、教えていただきませんでしょうか。
> 2010年12月23日23:29 tonny <tonny1...@gmail.com>:
小林です
いまさらのリプライですみません。ADXL345のデータシート10ページによりますと
> With the SDO/ALT ADDRESS pin high, the 7-bit I2C address for the device is 0x1D, followed by the R/W bit. This translates to 0x3A for a write and 0x3B for a read. An alternate I2C address of 0x53 (followed by the R/W bit) can be chosen by grounding the SDO/ALT ADDRESS pin (Pin 12). This translates to 0xA6 for a write and 0xA7 for a read.
とあります。
このbreakout boardの回路図
http://www.sparkfun.com/datasheets/Sensors/Accelerometer/ADXL345-BreakoutBoard-v10.pdf
を見る限り、SDO/ALT ADDRESSピンは初期状態ではどこにもつながっていないように見えるのですが、このピンはどこに接続されていますか?
このピンは内部でプルアップされているとも、プルダウンされているとも書かれていませんので、もしかするとどちらかに接続する必要があるのでは、と思っています。勘違いだったらすみません。
2010/12/25 tonny <tonn...@gmail.com>:
レジスタの書き込みは
ArduinoのWire.hのような感じで記述できます
読み出しは
requestFromRegister();
を使います
詳しくはHMC6352.javaを確認してみてください。
http://www.iamas.ac.jp/~endo/funnelP5lib-r767.zip
遠藤孝則
2011年1月4日11:25 Shigeru Kobayashi <koto...@gmail.com>:
--
endo takanori
小林先生
ご指摘ありがとうございます。
私の実装ではSDOがプルアップに設定し、データシートによりますと、I2Cアドレスが0x53はずです。
遠藤先生
最新のリブを使って、正確にadxl345よりデータを取得してまいりました。ありがとうございました。
ところで、endTransmissionとrequestFromRegisterの中身を見ますと、もともとの実装方法
byte[] vu = {COM_I2C_REQUEST,COM_WRITE,0x53,0x32,0x33};
io.sendSysex(conectedModule.getModuleID(),vu.length,vu);
byte[] bu = {COM_I2C_REQUEST,COM_READ,0x53,0x32, 0x02};
io.sendSysex(conectedModule.getModuleID(),bu.length,bu);
は、今の
beginTransmission();
send(0x32);
send(0x33);
endTransmission();
requestFromRegister(0x3, 2, false);
とほぼ同じですが、なぜもとのはうまくいかなかったのがまだ謎です。。。
お忙しいところご指導を賜り心から厚くお礼申し上げます。
On 1月4日, 下午1时19分, takanori endo <sweetamana...@gmail.com> wrote:
> リでのI2Cの定義をすこし分かりやすくしました。
>
> レジスタの書き込みは
> ArduinoのWire.hのような感じで記述できます
>
> 読み出しは
> requestFromRegister();
> を使います
> 詳しくはHMC6352.javaを確認してみてください。
>
> http://www.iamas.ac.jp/~endo/funnelP5lib-r767.zip
>
> 遠藤孝則
>
> 2011年1月4日11:25 Shigeru Kobayashi <kotob...@gmail.com>:
>
>
>
>
>
> > チンさん
>
> > 小林です
>
> > いまさらのリプライですみません。ADXL345のデータシート10ページによりますと
>
> >> With the SDO/ALT ADDRESS pin high, the 7-bit I2C address for the device is 0x1D, followed by the R/W bit. This translates to 0x3A for a write and 0x3B for a read. An alternate I2C address of 0x53 (followed by the R/W bit) can be chosen by grounding the SDO/ALT ADDRESS pin (Pin 12). This translates to 0xA6 for a write and 0xA7 for a read.
>
> > とあります。
>
> > このbreakout boardの回路図
>
> >http://www.sparkfun.com/datasheets/Sensors/Accelerometer/ADXL345-Brea...
>
> > を見る限り、SDO/ALT ADDRESSピンは初期状態ではどこにもつながっていないように見えるのですが、このピンはどこに接続されていますか?
>
> > このピンは内部でプルアップされているとも、プルダウンされているとも書かれていませんので、もしかするとどちらかに接続する必要があるのでは、と思っています 。勘違いだったらすみません。
>
> > 2010/12/25 tonny <tonny1...@gmail.com>: