« 2013年5月 | トップページ | 2013年12月 »

2013年6月

2013年6月13日 (木)

外仕事

恒例の外仕事。
外気温34℃はまあいいとして、宿の部屋の気温20℃というのは何とかならんものか。
長袖装備は欠かせない。

------

移動時間が長いので、考え事を色々と。

ちょっと必要に駆られてI2C。

I2Cを使う時は、バスリカバリを実装しないと、一発のノイズが原因でバスが止まったままになってしまうこともある。

とりあえず一定時間ACKが帰らないのをソフトウエアで監視して、ペリフェラルごとリセットを掛けるようにしているのだが。

なんだか、ちょっと強引な感は否めない。スマートな解決策は無いかな。

最近はNXP純正のI2Cバス規格の日本語データシートまであるようだ。

http://www.nxp.com/documents/user_manual/UM10204_JA.pdf

つれづれと眺めてみても、バスストール時のリカバリについては特に言及してないようだ。
そもそもバスクロックストレッチのタイムアウトも無いようなので、やはり規格としてはバスストールの概念も無いのか。

スレーブが応答しなくなったら、ハードウエアリセットをかけるか、電源の再投入を試みろとか、怖いことが書いてある...

要するに、I2Cを使うなら、それくらいのことは想定しろと。
ソフトウエアから、電源の再投入ができるようにするには...
うーむ。

------

各モジュールはオープンドレインでドライブしているので、万が一、一部電源が落ちてしまった場合でも、全体には波及しない、ってことなのか。

I2Cを別のボード間で使う場合は、ブリッジで切り離せるようにしておいて、
http://www.ti.com/lit/ds/symlink/pca9515a.pdf
障害時は、切り離して復旧するのが良いのかな。

ちょっと使うには良いけど、本格的に使うには色々あるよなあ。
ハードウエアは大げさだけど、CANなんかのほうがやりやすいかな。

上手く動いているときは、どの通信規格を使っても大差ないけど、異常時の動作がちゃんと規定されているもののほうが、安心して使える。

| | コメント (0) | トラックバック (0)

2013年6月11日 (火)

続 stm32f373 環境

f3用の環境。
yagarto-20121222でお手軽に構築、だったのだけれど。
strtokが動かないとか、問題色々積み残し。気にはなっていたのだけど。

今日、ふとしたことで気が付いた。
初期値ありの変数領域(.dataセクション)だけれど、初期値の開始番地が、.textセクションのすぐ次ではなくて、なぜか4バイト先からになっている。
なぜ?

変数の初期値のデータが4バイト分ずれて初期化されていたっぽい。
初期値をもつ変数を使う習慣が無いので気づかなかったけど、ライブラリも.dataセクションの変数を使っているような...

ためしに、スタートアップを書き換えて、変数の初期値を4バイト先からコピーするようにしてみる。
うむ。strtokやsscanfなども動くようになったっぽい。
直った?

なんとなく腑に落ちない感は強いが、GCCはこういったものなのか?
まあ、様子を見ようか。

| | コメント (0) | トラックバック (0)

2013年6月 8日 (土)

センサ評価

F3基板で、OPB733Tを評価。
なんとなく使えそうな感じではある。

130608

今の反射光センサは、大まかには、反射光の強度で壁までの距離を計測し、その走行距離など制御周期による微分で、壁のエッジを検出してる。

壁までの距離はともかく、機体の位置を推定するために、壁エッジ検出精度はなるべく上げたい。
できるかぎりセンサの指向性を鋭くして、壁のせまい範囲を見るようにしたり、色々工夫はされてきてるのだけれど。

しかし、検出距離を稼ぐためにパルス発光(変調)を使ったりしていることもあって、この方法では、これ以上速度が上がってきては、壁エッジの検出精度を確保することは難しいんじゃないか、という気がする。

そこで、走行距離による微分ではなく、複数のセンサによる空間的な検出ができないものだろうか、などと考えているのだが....

これがうまく行くのであれば、トレーサーのセンサとしても使えないかなあ...とか妄想する。

どうも、基礎実験ばかりで、実機に近づいてない感も。

| | コメント (0) | トラックバック (0)

2013年6月 6日 (木)

stm32f373 その後

FPU関連で、細々と続けていたのだけれど、ようやく進展が。

どうやら、最適化との相性があるようだ。
GCCのスイッチにて。

-mfloat-abi=soft の指定では、-Oxスイッチとの組み合わせでも上手く動くけれど、-mfloat-abi=softfp では、最適化をOFF(-O0)にしないとうまくいかないような。

浮動小数点演算を使うモジュールは、最適化しないように makefileを調整。

実力を簡単に計測する。
ソフトウエア呼び出しと、FPU呼び出しでは、だいたい10倍くらいの性能差のようだ。

--------

こんな48ピンパッケージで、単精度とはいえFPUが使えるとか、世の中も進むものだ。

FPUというか、コプロと言っていたけれど、i80487とか、知ってる人います?

| | コメント (0) | トラックバック (0)

« 2013年5月 | トップページ | 2013年12月 »