[PR]     銀座 インプラント
teacup. ] [ 無料掲示板 ] [ プレミアム掲示板 ] [ teacup.コミュニティ ] [ ブログ ] [ チャット ]

新着順:84/251 記事一覧表示 | 《前のページ | 次のページ》

Re: I2C通信について

 投稿者:nekosan  投稿日:2009年 6月23日(火)23時16分8秒
  通報 返信・引用
  > No.169[元記事へ]

Tako21さんへのお返事です。

> PIC16F877AとdsPIC30F4013を用いてI2C通信をしたいと考えております。
> PIC16F877A(マスター)、dsPIC30F4013(スレーブ)
> SDAとSCLラインにはデジタルオシロをつないで波形を見ることは出来ます。
> 877Aから4013Fにアドレス及びデータを送ったのですが、F4013側では入力バッファに
> データは入らないし、当然割り込みも働きません。
> 877Aからはクロックとシリアルデータは出ています。ACKは帰りません(当然ですが・・・)
> F4013側ではI2CSTATレジスタのビット3(START),4(STOP)は動いているのが確認できます。
> スレーブの割り込み許可は入れてあります。
> 877AとEEP-ROMの通信はうまくいきます。その回路にI2Cバスを接続して
> アドレスを振ったのですがデータを受け付けず困っています。
> どなたか良い知恵を持った方がいらっしゃいましたら、お助けください。
> よろしくお願い致します。

EEPROMが上手くアクセスできているということは、
物理配線は上手く行っていると思われるので、
これだけだとなんとも判断つきかねますね。ひとまず
思いついたところから3つほど挙げさせていただきます。

1点目はこの間私が失敗したばかりの件で、アドレス設定
の際の1ビットずれがないかどうかのこと。

スレーブアドレス7ビットのさらに下位1ビットに
読み/書きビットが付きますが、この7ビットの位置を
間違えて指定してないでしょうか?
アセンブラならあまり間違えることもないと思うのですが、
何らかの高級言語コンパイラだと、ちゃんと言語仕様確認
しないと私みたいに原因不明で頭抱えることになるので…

つまりアドレスの7ビットを右詰で指定するのか、左詰で
指定するのか。言語仕様に合っているかご確認ください。

2点目は、CPUのクロック回路のディバイダ設定。
シリアル通信はクロック速度が影響しているので、
クロック設定が間違えていると通信速度が送受信側で
一致せず、データ到着を認識できない…とか。

I2Cはクロック信号があるとはいえ、各マイコンに
よって正常に送受信できる速度範囲には限度があり、
そこからはみ出ていればクロック信号自体が
上手く認識できていないかもしれません。

特に今回は16F877の送り出しが速くて、dsPIC側のクロック
が分周されていたら取りこぼしが起る可能性があるかと
思います。
I2Cクロックのディバイダも同様です。

3点目はアドレッシング幅のこと。dsPICは使ったこと
ないので詳しくわかりませんが、比較的新しいチップ
ですから10ビットアドレスモードにも対応している
ことでしょう。(未調査)

で、送り出しが7ビット、受信側が10ビットなら
正しいデータとして認識できないかと思われます。
dsPIC側の初期設定を再度ご確認ください。



あとは、start/stopビットが動いているとのこと
ですので、調査の一環としてインタラプトドリブン
ではなくバッファステータスビットをポーリングに
変えて見たら動かないでしょうか?

dsPICは使ったことがないのでそのくらいしか
思いつかないのですが…
 
》記事一覧表示

新着順:84/251 《前のページ | 次のページ》
/251