4.PICで受信機からのパルス信号を受け取る
信号の入力って? 前回のサーボに信号を送る時は、PICで勝手に電気を流したり止めたりすれば良いだけだったので、プログラムは簡単だったけど、受信機からの信号を受け取るには、受信機と繋いだPICの足を常に監視し、いつONになるか、OFFになるかを調べ続けなければいけないのでちょっと面倒..(^^ゞ

パルスの幅は? 受信機から電気が流れてきて、ONになってから、電気が切れるOFFになるまでの間カウントし、時間を計らなければならない。
時間の計り方は、前回のサーボを動かした時と同様、1サイクル時間(PICが1命令を実行する時間)で計る。

実際の受信機から送られてくる信号の長さは、1mS〜2mSで、サイクルになおすと、2500〜5000になって数字が大きくなるので、前回同様、25サイクルで1とカウントする。(100カウント〜200カウント)

プログラミング開始!
  1. PICのRA0のピンを入力に設定する。
  2. ループ開始
  3. RA0がON(信号が来てる)かどうかをチェックする
  4. RA0がOFFの時は、ループへ
  5. ONの時間をカウント開始(カウンタを0にする)
  6. カウンターのループスタート
  7. 25倍のサイクルを無駄遣いして、時間をあける。
  8. もう一度、RA0がON(信号が来てる)かどうかをチェックする
  9. RA0がOFFの時は、カウント終了!
  10. RA0がONの時は、カウンタに1をプラス。
  11. カウンターのループスタートへ戻る。
ちゃんと計れた?? さて、受信機から来る信号の長さを計るプログラムを作ったが、計っただけじゃなんにも起こらない...(^^;;
と、言う訳で、計った長さ(100カウント〜200カウント)をそのままサーボに出力してみて、ちゃんとサーボが動くかどうかのテストプログラムに改良!

実際に作ったプログラムはこれ→「savo2.asm」(ダウンロードして、エディタか、メモ帳等で開いてください....って、こんなしょうもないプログラムは誰も見ないかぁ(笑))

これで、プロポのスティックを動かすと、その通りサーボが動けばOK!!....(って、PICを使う意味無いジャン(^^;;)
ちょっと心配!? さて、受信機から電気が来てる時間を計る時に、ONの途中から計り始めて、実際より短くなってしまったら??
受信機から来る信号は、ONの長さよりOFFの長さの方が、10倍くらい長いので、計り始めがONになってる事は、あまりないのと、仮に1回ぐらい間違っても、すぐに正しい値を送れば、サーボはほとんど気付かない!?

と、言っても心配なので、一応計った値が極端に短い時は、もう一度計りなおすようにプログラムしてます。(^^ゞ

これでも心配性の人は、計る時に信号がいきなりONになってたら、一度OFFになるまで待ってるループを追加すれば間違い無いんだけど、実際にサーボの動きを比べてみたら、全然変わらなかった(笑)

チャンネル数が増えたら.. 例えば、4CH受信機で4CHとも繋がってる時は、1CHから4CHまで、順番に長さを計って、それぞれの処理をすれば良いんだけど、仮に4CH用に作ったプログラムを4CHは使わないからと、3CH受信機に繋げて動かすと、プログラムは4CHの信号を見に行ったままONになるのを待ってるので、結局いつまでたってもONにならずプログラムはそこで停止したままになってしまう。(^^;;

と、言う事は、しばらく待ってもONにならない時は、そのチャンネルは使ってないものと判断する様に、プログラムを改造しないといけないかも.....(まぁ、その時はその時で考えよう(^^ゞ)


戻る

更新日2000.7.17