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

ITG-3200breakoutとPIC16F877Aを使用しています。
2つをSDA、SCL、INTで繋いでいます。

#useI2C(master, sda=PIN_C4, scl=PIN_C3, FORCE_HW, FAST)
main(){
i2c_start();
i2c_write(0xD2);//ITG-3200 breakout アドレス
printf(lcd_data,"test");//LCDに出力
}

上記プログラムを書いたのですが、testが表示されません。i2c_start直後にprintfを挿入すると表示されました。これはうまくwrite出来ていないことが原因だと思うのですが、理由が分かりません。対処法を教えてください。

またINTの機能がいまいち分かりません。こちらも教えていただけると助かります。

●質問者: after_333sec
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:LCD test Write いまいち アドレス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pyopyopyo
●35ポイント

i2c_stop()を使ってないから、だとおもいます。

i2c_start();
i2c_write(0xD2);
i2c_stop();
printf(lcd_data,"test");

とすると、うまくいきませんか?



INTは割り込みの信号線です。I2Cの線は設定&データ読み書き用で、INTの線はセンサからPICへのイベント通知専用、ということになります。

もうすこし詳しい説明は、ITG-3200のデータシート

http://www.sparkfun.com/datasheets/Sensors/Gyro/PS-ITG-3200-00-0...

をご覧ください。引用すると

5.7 Interrupts

Interrupt functionality is configured via the Interrupt Configuration register. Items that are configurable include the INT pin configuration, the interrupt latching and clearing method, and triggers for the interrupt. Items that can trigger an interrupt are (1) Clock generator locked to new reference oscillator (used when switching clock sources); and (2) new data is available to be read from the Data registers. The interrupt status can be read from the Interrupt Status register.

ということです。上記データシートの、5.1 Block Diagramの図も参考になるかとおもいます。


割り込みの具体的な使い方としては、たとえば振動を感知して警報をならす防犯用センサとかだと、

という使い方ができるかとおもいます。

◎質問者からの返答

INTについての詳しい解説ありがとうございます。理解できました。

本題のほうですが、i2c_stopを入れても動きませんでした。

ほかに動かない理由は分かりますか?もしかしたらすでにITG-3200breakoutが壊れてしまっているのでしょうか。


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

コメント欄が開いてなかったので、コメント欄から失礼します。

CCS C について詳しく無いので、かなりあてずっぽうです。

i2c_writeで応答が無いのは、

ステータスや割り込み関係でロックしてしまっているのだとは思いますが、

slaveからのACKが届いていない可能性もあります

(1)i2c_write()の戻り値が0かをチェック

(2)配線間違いや配線が長すぎないか、プルアップ抵抗を付け忘れていないか確かめる。

も行ってみてください。

まずは、"FORCE_HW, FAST"オプションを指定しないで、

ソフトウェア実装のI2Cでちゃんと動くか試して見る。というが速いと思います。

CCS-Cのフォーラムでサーチをかけると似たような事例は沢山引っかかってきますが

http://www.ccsinfo.com/forum/search.php?

完全には一致していないようです。

◎質問者からの返答

プルアップ抵抗を変えたらうごくようになりました。抵抗が壊れていたのかもしれません。ありがとうございました

関連質問


●質問をもっと探す●



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