espyの日記: robo:: いまだロジック部 (汗;) 2
この土日にアルミ板切断作業へ進むつもりが...うむ。
T-Engine→PICへのコマンド書き込みは成功していたが、その逆、
ホストCPU側からの読み出しの動作確認でトラブる。
PICが今、readyであるか否かのフラグを返す機能を、途中に挟んだ
CPLDで管理しているのだが、ホスト側から全く読めない。
「readyであるか否か」というのは、ホストCPUがPICにコマンドを出して
良いかどうか、という意味で、「readyでなくなる」場合は二つある。
(1)PICがサーボに"H"パルスを出している時。クロック数えのループ
なので割り込めない。
(2)ホストCPUがPICに1byte書き込んだ瞬間。CPLD内のFFがセットされる。
FFのリセットはPIC側が忙しくなくなった時、clearするパルスを出す。
この設計が妥当かどうかはあると思うが、安全にアクセスするために
悩んだあげく作った仕組みである。
で、verilogのシミュレーションではうまくいっているのに現物はダメだ。
悩んだ。データバスに値を吐く部分は、スリーステートの(普段は
Hi-Zを出す)、ちょっと不慣れな記述を使っていた。これだろうか?
こんな風な: assign PICREADY = (picread) ? ff_q0 : 1'hz;
いろいろ確認していると、read#入力ピンのピン番号のアサインが
間違っていただけであった。がくっ.
続いて、1×2.5cm程度の小さい基板片を作り、加速度センサ ADXL202を
乗っけて、拡張基板に垂直に立てるように取り付ける。つまりロボが
直立時に水平になる。
T-Engine側の読み出しプログラムを作り、ぐるぐる回しながらボードを
傾けると、ちゃんと値が変化している。オッケー!
X,Y軸がなぜか逆なのと、感度が悪そうなのが気になる。(感度に
ついては10bitのMSB側を取っているがLSB側8bitを取るべきか?)
今日はここまで。
中8bitsとか。 (スコア:1)
何倍の感度が欲しいかにもよるネ。4倍以上が欲しけりゃLSB側を取って平均
化処理してみるとか、どーしてもレンジがほしけりゃ10bits全部取って対数
表現してみたりアナログチックに丸めてみたり。
Re:中8bitsとか。 (スコア:1)
テスタで電圧見てみると、どうも 1.5Vから±0.1Vくらいしか動いていないみたいなんですよね。
まぁ下2bit捨ててるのはある意味ノイズ取りしているようなものでもあるし、このままでもいいかも。