本日は、赤外線送信モジュールのソースをちょいと修正しました。
プログラムでは、各chのパスル幅を測定するのに8bitタイマを使用しています。今までは0〜255までカウントすると4.096msecまでカウントできるような設定で使用していました。
PPM信号の1chのパルス幅は、1msec〜2msecの間で変化するため、この範囲の分解能としては256の1/4の64しかありませんでした。これでも、全く問題なくなめらかに操作できています。
ただ、当初は、PPM信号ってアナログ時代からの方式で、プロポによってはパルス幅が2msecよりもかなり伸びたりすることもあるかもしれないこと、また、わざわざ16ビットカウンタで作りなおすのは手間もかかるし、プログラムサイズや空きメモリも心配でいじっていませんでした。
ところが、実際にPPM信号取り込んでみて、9XRは2msecを超えないかなりいいところが最大のパスル幅となっており、ちょっとぐぐってみたところ、意外と規格に対してずれなく調整して製造されている?と思うようになりました。
また、100%の状態が1.900msecとか1.940msecとかのパターンが多いみたいで、これならプリスケーラの設定を変更して、0〜2.048msecのカウントとしても問題ないんじゃないかと思いたち、サクサクっと修正してみました。
このおかげで、パルスのない区間を見つけるのもカウンタがオーバーフローした場合という条件だけで検出できるようになったし、パルス幅をデジタル値にするときに2倍する必要もなくなって、プログラムサイズもデータメモリも小さくなり、分解能も64から128になりました。
飛ばしてみた感じは全く違いがわかりません(w が、処理がシンプルになってなんかスッキリしました。
---
ところで、今日も中国からパーツがいくつか届きましたが、一つ、注文したものと違うものが届いていて、業者にクレームメールを入れてみました。もともと3ドル以下のものだったので、諦めもつくのですが、この結末はどうなるか・・・
今回購入したaliexpressというサイトは、バイヤーズプロテクトとかいって、安心を売りにしているので、もめるようだったら介入してもらえるはず・・・と思っています。
0 件のコメント:
コメントを投稿