トップページ > 記事閲覧
I2C で使用したい
日時: 2019/07/03 14:46
名前: お気楽スケーター

秋月電子で購入した ATP3012R5-PU を使用して、
I2C で制御したいと考えております。
なお、UART 通信では、うまく発声できました。

--

オシロで見たところ、ATP3012 が I2C の ACK を返してくれません。

●アドレス

アドレスは 0x2E でデフォルトから変えていないつもりです。
オシロの波形を見ても、アドレスや R/W ビットの解析結果は正しいため、マイコンの出力は正しいようです。
MCU は STM32F0 シリーズ 3.3V 駆動です。

●SMOD 端子

データシートでは、
SMOD0=LOW、SMOD1=HIGH で I2C に切り替わるようなので、
SMOD0 を GND に直結し、SMOD1 をオープンにしてみましたが、ACK は返りません。

また、ネット上で見つけた情報では、SMOD0 と SMOD1 が入れ替わっているようです。
→https://sanuki-tech.net/micro-bit/make/talking-microbit/
 「表3-5-8-3.通信モード」
SMOD1 を GND へ直結し、SMOD0をオープンにしても、ACK は返りませんでした。

●配線

プルアップ抵抗に少し大きめの 10k を使用しておりますが、波形を見る限り通信は通るはずです。
RESET 端子は、オープンのままです。

●タイミング

電源投入から I2C 通信開始までの時間が短すぎることも考えましたが、
main 関数の先頭からステップトレースの手順を含んでいるので、
実質、数秒の時間を挟んでいますが、ダメなようです。
なお UART の場合は、デバッガを使用せずコールドスタートでも発声できています。

--

他に何か、思い当たる間違いはありますか?
よろしくお願いいたします。
メンテ

Page: 1 |

Re: I2C で使用したい ( No.1 )
日時: 2019/07/03 15:00
名前: お気楽スケーター

お騒がせしました。
自己解決です。

アドレスが間違っていたようです。

0x2E(7bit) ... 0x5C(W), 0x5D(R)

ではなく、

0x17(7bit) ... 0x2E(W), 0x2F(R)

が正しいようですね。

0x2E の LSB がゼロだったので、もしやと思いきや、ビンゴでした。
SMODピンに関しては、データシートが正しく、ネット情報が間違っていることが確認できました。

お騒がせしました。
メンテ
Re: I2C で使用したい ( No.2 )
日時: 2019/07/03 15:20
名前: お気楽スケーター

すみません、誤報報告です。

データシートはすべて「正しい」です。

コード上のアドレス定義が (0x2E >> 1) になっていました。
「<<」ですよね...
HAL ライブラリのアドレス指定が 1ビット左シフトしたものを必要としていたため。
紛らわしい...

大騒ぎを始めるとなぜか解決してしまう。
マーフィーの法則の典型でしたねw
前のスレッドとともに、削除で構いません。
お騒がせしました。
メンテ
Re: I2C で使用したい ( No.3 )
日時: 2019/07/16 10:13
名前: 管理人

そうですね。
I2Cのアドレス指定はミスしやすい部分です。
アドレスを8bit中の"上位"7bitに指定することを、ついつい忘れてしまいます。
メンテ

Page: 1 |

題名 スレッドをトップへソート
名前
URL
パスワード (記事メンテ時に使用)
コメント
CAPTCHA captcha画像 ←英数字を入力

   クッキー保存