2013年9月4日水曜日

ソースの修正

本日は、赤外線送信モジュールのソースをちょいと修正しました。

プログラムでは、各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 件のコメント:

コメントを投稿