Darkside(https対応しました)

2021年10月8日(金) 21:58

ハードI2Cに再挑戦

 当然ながら、ハードウェアI2Cへの再挑戦からである。
 以前よりMCCのバージョンが進んでいるので、扱い易くなっているかもしれない。

 もともとソフトウェアI2CのピンアサインはハードウェアI2Cに合わせていたので、基板にハンダゴテを入れる必要はない。

 ここで厄介なのは、MCCからI2Cをプログラムするのは簡単だという事実。ネット上の前例も豊富で、いずれもシンプルに読み書きしている。それのどこが厄介かと言うと、マネしたのに動かない場合は一気に手詰まりとなるのだ。
 公式サンプルもMCC生成ソースに記述されていて、情報の不足はない。とても手軽にハードウェアI2Cが扱えるようになっている。だから、すんなり動作してくれる分にはメーカーさすがとなる。

 そう、全く機能しないのだ。自分がやると。
 以前散々格闘した時も駄目だったし、今回はその記憶がもう消えているのを良いことに、1から情報を集め直して試してみた。だが、やはり全く機能しない。動作している気配がない。PIC にしろ dsPIC にしろ、ソフトウェアI2Cしか機能しない。
 ほんと、うんざり過ぎる。

 それだけではない。ハードウェアI2Cに設定し初期化だけ済ませて放置。その状態で Jetson Nano からI2Cアクセスしてもやはりタイムアウトになるのだ。dsPIC のハードウェアI2Cが動かないだけでなく、Jetson Nano 側のI2C動作まで妨害している。もしくは、Jetson Nano 側のI2Cも最初から不良。
 まさに、どうしようもない。八方塞がりである。

 いずれにしろ、dsPIC 側でハードウェアI2Cに設定しても Jetson Nano のI2Cが動かないという時点で、Jetson Nano が傾斜センサーを利用する道は閉ざされた。
 dsPIC が取得した傾斜センサー値を Jetson Nano に転送するという回りくどい方法は考えられるが、3ビットパラレルしか送信できないので実行不可能。Jetson Nano ではSPIもまた動いてくれないことが響いている。仮にSPIが使えるようになっても、傾斜センサーを読んでいる dsPIC と Jetson Nano にSPI通信できる dsPIC は別である。やるとしても、中継×2という話になるのだ。しかも現在は中継配線が存在しないので、基板にハンダゴテも入れねばならない。2つの dsPIC もMCCとソフトウェアの書き換えが必要。
 もはや、簡単な解決策などない。幾つもの難題を乗り越えないといけない方法しかない。

 dsPIC と完全に別の独立I2Cバスで、Jetson Nano が傾斜センサーを読む手もある。というのも、dsPIC では傾斜センサーでSタンクの車体水平をキープしているのだが、あれこれ試した結論として傾斜の符号だけで充分だと判明している。どれらい傾いているのか?という情報は利用効果が無かったのだ。
 つまり、Jetson Nano から dsPIC に傾斜センサー値を送るにしても、1ビットか2ビットの情報で良い。パラレス通信の入出力を逆にすれば、ハードウェアは足りる。望遠カメラのクロップ位置を調整を行うためのビットが食われそうだが、最悪クロップ位置は固定でも実用になるだろう。dsPIC のI2Cと干渉しているが Jetson Nano 単独なら傾斜センサーが読める場合(2年前は読めた)、これが最も簡単な解決策となる。

 この向きの情報伝達は、中継配線が存在しているので、中継×2という話も大丈夫。ただし、遅延が生じることで車体水平化のレスポンス悪化は懸念される。もっとも、現在でもレスポンスは悪い。揺れ動く車体を水平にキープするような想定は、していない。停車中に照準を安定させるときに、若干遅れて水平になる程度で充分なのだ。
 これを試してみて、それでも駄目だったら Jetson Nano で傾斜センサー値を利用するのを断念する、ということにしよう。

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

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

Comments

TrackBacks

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4