人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ITG-3200breakoutとPIC16F877Aを使用しています。
下記のようなコードを書いたのですが、うまく値を読み込めません。

#include <16F877A.h>
#useI2C(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
と表示されます。
原因はなんなのでしょうか。
対処法を教えてください、よろしくお願いします。

●質問者: after_333sec
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:LCD test void コード センサー
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● windofiuly
●27ポイント

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

◎質問者からの返答

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


2 ● ニャンざぶろう
●27ポイント

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

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

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

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

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

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


3 ● ニャンざぶろう
●26ポイント ベストアンサー

本題です。

一番怪しいのは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が帰ってきているのを

確かめてみてください。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ