i2cの仕様に぀いお

105 views
Skip to first unread message

tonny

unread,
Dec 23, 2010, 9:29:26 AM12/23/10
to funnel-dev-talk-ja
初めたしお、チンず申したす。

processing.funnel.i2cの䞋にADXL345に関するクラスを远加しようず存じたすが、ながながio.sendSysexずいうメ
゜ッドに迷っおおりたす。
䟋えば、ADXL345の堎合、arduinoで次のように起動させるこずができたす。

Wire.beginTransmission(0x53);
Wire.send(0x2D);
Wire.send(8); //measuring enable
Wire.endTransmission();

これに察しお、

byte[] nu = {COM_I2C_REQUEST,COM_WRITE,0x53,0x2D,0x08};
ずいう曞き方が正しいでございたすか。

たた、デヌタを取埗する際には、arduinoで

Wire.requestFrom(ADXAddress,2);
...
X0 = Wire.receive();
X1 = Wire.receive();
...

に察しお、

byte[] xu = {COM_I2C_REQUEST,COM_READ,0x53,,0x02};
の方は正しいでございたすか。

遠藀先生の゜ヌスを勝手に参照しお䜜ったものなんですが、勉匷䞍足のせいでうたくいけなかったです。。

ぜひ皆さんご指導賜りたすようお願いいたしたす。

takanori endo

unread,
Dec 23, 2010, 8:56:19 PM12/23/10
to funnel-de...@googlegroups.com
この件に関しお
以䞋のように回答したした

ProcessingラむブラリのI2C呚りは突貫で぀くったので自分でも分かりづらい
のちのち盎しおいきたいです

遠藀孝則

cessingラむブラリ担圓の遠藀ず申したす
ADXL345を実際に持っおいないので、デヌタシヌトを芋る限りですが、

> Wire.beginTransmission(0x53);
> Wire.send(0x2D);
> Wire.send(8); //measuring enable
> Wire.endTransmission();

は正しいず思いたす。

デヌタを取埗する際は、
デヌタシヌトには、軞の倀はレゞスタ0x32から0x37ずありたすので
032から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

tonny

unread,
Dec 24, 2010, 10:28:46 AM12/24/10
to funnel-dev-talk-ja
遠藀先生

早速ご回答いただきたしお、ありがずうございたす。

ご添付いただいた゜ヌスを拝芋した䞊で、実行しおみたすが、デヌタが取埗しおいなかったです。(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);
を詊しおいきたすが、盞倉わらず取埗したデヌタはでした。

どこか問題があるはずず存じたすが、はっきりわかりたせん。この点に぀いお、教えおいただきたせんでしょうか。

> 2010幎12月23日23:29 tonny <tonny1...@gmail.com>:

Shigeru Kobayashi

unread,
Jan 3, 2011, 9:25:35 PM1/3/11
to funnel-de...@googlegroups.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>:

takanori endo

unread,
Jan 3, 2011, 11:19:14 PM1/3/11
to funnel-de...@googlegroups.com
リでのI2Cの定矩をすこし分かりやすくしたした。


レゞスタの曞き蟌みは
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

tonny

unread,
Jan 5, 2011, 10:10:04 AM1/5/11
to funnel-dev-talk-ja
明けたしおおめでずうございたす。

小林先生

ご指摘ありがずうございたす。
私の実装では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>:

Reply all
Reply to author
Forward
0 new messages