Darkside(リンクエラー修正しました)

2019年11月6日(水) 21:27

I2Cバス不安定

 送信機の電源を入れると、受信側バッテリー電圧が表示される。その値が、やたら不安定なのだ。

 ありえない値が、しばしば表示される。バッテリー電圧は電流電圧センサーから取得しており、取得方法はI2Cだ。つまり、I2Cバスが不安定になっている。何度も電源を入れなおすと、期待通りに表示された。だが、桁ズレを起こす。これは、明白にI2Cバスが不安定だ。

 だが、昨日までのように受信機用PICだけを挿しておくと、バッテリー電圧も安定して取得できる。

 もしかして、I2Cバスの調停が不調?
 I2Cバスは、複数のアクセスが衝突した場合に、衝突をうまく回避する仕組みを持っている。しかし、これらのPICはI2Cアクセスをソフトウェアで行っている。単数PICによるI2C通信は問題なくても、複数PICの同時利用はうまく衝突回避できていないかもしれない。

 受信機用PICだけを使っている場合、I2Cのセンサーから電圧を読み取り、それをI2CのLCDに表示するということが、安定して実行できていた。複数の周辺機器が同一のI2Cバスに載っているが、アクセスは単一PICあので同時アクセスは発生しない。
 最悪、複数PICの同時アクセスが発生しないよう運用回避することになるかもしれない。SPI受信のタイミングを基準にするなどして、同時アクセスを回避することは可能なはずだ。Jetson Nano が参加したら、少々厄介かもしれないが。

 いずれにしろ、センサーとLCDの初期化に関しては、すべてを受信機用PICで行ってしまうのが無難だろう。初期化が失敗すれば、期待した動作はその後ずっと期待できないだろう。

 受信機用PICだけを挿し、受信機用PICでセンサーとLCDの初期化を済ませる。そしてついでに、加速度センサーの値を取得してみる。

 だが、何も取得できない。
 3軸の加速度と温度を読み出しているが、この値は全ビットが1であることを示している。I2CバスがHのまま変化しない時の、典型症状である。

 オシロで3.3V系I2Cバスをチェックする。案の定で、2本の信号線は3.3Vから全く動かない。LCD表示できているのだから、電圧を取得できているのだから、5V系I2Cバスは動いている。すなわち、I2Cレベル変換が失敗していると思われる。

written by higashino [Sタンク 1/16] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4