ITG-3200breakoutとPIC16F877Aを使用しています。

下記のようなコードを書いたのですが、うまく値を読み込めません。

#include <16F877A.h>
#use I2C(master, sda=PIN_C4, scl=PIN_C3, FORCE_HW, FAST)
#include <lcd_lib.c>

void main ()
{
i2c_start();
i2c_write(0xD2);
i2c_write(*);
i2c_write(*);
i2c_stop();

while(1)
{
i2c_start();
i2c_write(0xD2);
i2c_write(0);
delay_ms(1);
i2c_write(0x1D);
i2c_write(0x01);
test = i2c_read();
for(i=0;i<8;i++)
{
read[i] = i2c_read();
}
i2c_stop();

lcd_cmd(0x02);
for(i=0;i<8;i++)
{
printf(lcd_data,"%d",read[i]);
}

i2c_start();
i2c_write(0xD2);
i2c_write(0x1E);
test = i2c_read();
for(i=0;i<8;i++)
{
read[i] = i2c_read();
}
i2c_stop();

lcd_cmd(0xC0);
for(i=0;i<8;i++)
{
printf(lcd_data,"%d",read[i]);
}

}
}

*は(0x3E,0x80)(0x15,0x00)(0x16,0x18)(0x17,0x05)(0x3E,0x00)の組み合わせです。


上位バイト、下位バイトを読み込み、LCDに表示するプログラムのつもりです。
ですが、センサーを動かしても常に
01111111
01111111
と表示されます。
原因はなんなのでしょうか。
対処法を教えてください、よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/12/01 20:14:32
  • 終了:2010/12/08 20:15:08

ベストアンサー

id:karuishi No.3

ニャンざぶろう回答回数764ベストアンサー獲得回数1282010/12/02 23:38:11

ポイント26pt

本題です。

 

一番怪しいのはITG-3200の9番ピンの状態ですよ。

ITG-3200の9番ピンのAD0の接続をチェックすること

I2CアドレスをD2にしたいなら9ピンは電源につないでないとダメですし

GNDに繋がっているならプログラムのI2CアドレスをD0に変更する必要があります。

 

>上記プログラムに問題が無いということでしょうか?

うーん、上記のままじゃコンパイル自体も通らない気が~。

 

まずは

 int rdata; 
/* set register index */
 i2c_start();
 i2c_write(0xD2); // I2C device address + /W
 i2c_write(0x00); // ITG-3200 Who_am_i register address
/* read indexed resister */
 i2c_start();
 i2c_write(0xD3); // I2C device address + R
 i2c_read(rdata);
 i2c_stop();

とか適当に組んでみて

rdataにデバイスIDである0x68か0x69が帰ってきているのを

確かめてみてください。

その他の回答(2件)

id:windofiuly No.1

windofiuly回答回数62ベストアンサー獲得回数22010/12/02 20:36:33

ポイント27pt

ピンが欠けているというオチでは?

id:after_333sec

上記プログラムに問題が無いということでしょうか?

2010/12/02 20:52:14
id:karuishi No.2

ニャンざぶろう回答回数764ベストアンサー獲得回数1282010/12/02 22:53:33

ポイント27pt

windofiuly は、回答拒否にした方がいいよ。

ポイントを均等分配しそうな回答者に、デタラメ回答ばかりしてるIDですから。

http://q.hatena.ne.jp/windofiuly/answerlist

 

ID自体も、良回答者のwindofjulyさんへの

嫌がらせのために作られたとしか思えないですしね。

http://q.hatena.ne.jp/windofjuly/answerlist

id:karuishi No.3

ニャンざぶろう回答回数764ベストアンサー獲得回数1282010/12/02 23:38:11ここでベストアンサー

ポイント26pt

本題です。

 

一番怪しいのはITG-3200の9番ピンの状態ですよ。

ITG-3200の9番ピンのAD0の接続をチェックすること

I2CアドレスをD2にしたいなら9ピンは電源につないでないとダメですし

GNDに繋がっているならプログラムのI2CアドレスをD0に変更する必要があります。

 

>上記プログラムに問題が無いということでしょうか?

うーん、上記のままじゃコンパイル自体も通らない気が~。

 

まずは

 int rdata; 
/* set register index */
 i2c_start();
 i2c_write(0xD2); // I2C device address + /W
 i2c_write(0x00); // ITG-3200 Who_am_i register address
/* read indexed resister */
 i2c_start();
 i2c_write(0xD3); // I2C device address + R
 i2c_read(rdata);
 i2c_stop();

とか適当に組んでみて

rdataにデバイスIDである0x68か0x69が帰ってきているのを

確かめてみてください。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません