電音の工場ブログ

趣味の電子工作を中心としたブログです.音モノの工作が多いです.

I2Cがうまくいかない

I2Cがうまくいかない

ATtiny85でI2Cのスレーブを作っています。USIでTWIなSlave。I2Cで周波数を設定する正弦波発生装置。I2C部分はAVRのアプリノートAVR312をWinAVR用にフィッティングしてみました。アプリノートそのまんま適用。

マスタにはArduinoを。先日RTCをうまく叩けたのでその勢いに乗ろうかと(ていうかコード流用?)。

ところがうまくいきません。スレーブアドレスが違っていた、というイベントも踏みつつそこはクリアしましたが、どうにもこうにもニッチもサッチもプルアップ♪

仕方がないのでオシロを出してきて波形を確認したら、SCLがおかしい。5μsec(100kHz通信時のクロックのパルス幅)よりもはるかに狭い棘状のパルスが出ていたり、9発クロックがあるべきところが8発しかきていなかったり。これではスレーブ側もハマッてお黙りになってしまうのもわかるというか。Arduinoのライブラリが悪いのか!?いやいやあれだけみんなで寄ってたかって弄っているプラットフォームだからある程度枯れているとみていいでしょう。

ということは、どこかでスレーブの状態が滑って、SCLを引っ張っちゃったりしているのかも。

んではそろそろICEの出番かなぁ、と思いましたが、ざっとググってみたところではAVR312を使っている人があまりいないような…

とりあえず、WinAVRにフィッティングしたAVR312のコードが動くかどうか、ATtiny2313あたりにシンプルなプロジェクトを起こして試してみよう、そうしようと思いました。早くこいこい、週末休み。