LoginSignup
3
3

More than 5 years have passed since last update.

ATTiny85でI2Cスレーブ

Last updated at Posted at 2018-02-16

8ピンAVRでI2Cのスレーブが作れないか調べてみたところTinyWireSというライブラリが見つかった。

QiitaにもTinyWireSを試された記事がありました。

自分のArduino IDEは1.0.6のままだが、ATTiny85などをboards.txtに加えてExamplesのattiny85_i2c_slaveが問題なくビルドできた。

書き込みはAVRを始めた頃に作った、USBtinyISPを使った。

ところがArduinoをマスターにしてスキャンしてみるとACKは返ってくるのだがデータを読んでも255しか返ってこない。TinyWireSのgithubのissueにも似たような不具合の報告があったが、Ardunoを使ったら良いんじゃないかと、ちょっと的外れな回答だった。

Fuseの設定(ブートローダーを書き込む)も調べたが8M内部クロックで問題ないようだった。

いろいろ試したところ、スレーブの方のsetup()でTinyWireS.send()でダミーデータを放り込んでおくとなんとなく動くようだった。

Arduinoのマスターの方は、とりあえず1を書いておいて、4バイト読み込むとDEADBEEFが読み込めた。

20180216-220125.jpg

このワークアラウンドはたまたま動いているだけだと思うが、動かなかった事は事実で、根本的には何か問題があるのだと思う。

ATTiny85はuartが無くprintfデバッグも出来ないので、信号線をロジアナで確認してデバッグしてみました。上記の図でCH4がrequestEvent()が呼ばれたタイミングで反転するようにしてみたのだが、何故か1バイト目の送信の前には呼ばれないようです。本来呼ばれるべきなんだと思うのですが、何が悪いのかは分かりません。

写真(2018-02-17 08.56).jpg

開発に使った、EZ-USB FX2とUSB tiny ISPとびんぼうでいいのです。ブレッドボードの右側のモジュールは確認用のEPSONのI2C RTCです。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3