« 13-9 赤外線2ch受信機RX2-Tの組み立て ~その3~ | メイン | 14-2 課題2 左コイルLED200ms間隔で点滅する »

はてなブックマークに追加   14-1 課題1 右コイルLEDを200ms間隔で点滅する

第14章 赤外線受信機RX2-Tプログラミング

はじめに

 赤外線受信機RX2-Tは無事に完成したでしょうか?

 RX2-Tはインドアプレーンに搭載する赤外線受信機のファームウエア開発用基板です。RX2-Tでファームウェアが動作すればば、そのままインドアプレーン用2ch軽量赤外線受信機に搭載することが可能です。

 RX2-Tには飛行機を制御するための小型モータとマグネット・アクチュエータを接続します。どちらもまだ製作していないので、かわりにモータ・マグネット・アクチュエータ動作確認用LEDユニット(以下、コイルLED)を使って、プログラミングを楽しみます。

 RX2-Tは赤外線2ch送信機TX2-006pと同じPIC12F683を採用しています。12F683のプログラミングにも随分と慣れてきたと思います。今度は、赤外線受信機特有のプログラミングに挑戦しましょう。

14-1 課題1 右コイルLEDを200ms間隔で点滅する

 課題5までは赤外線受信機能を使わずに、RX2-T単体で動作するプログラミングを行います。

 赤外線2ch受信機RX2-Tの動作確認を兼ねて、エルロン用マグネット・アクチュエータ確認右コイルLEDを点滅させるプログラムを考えましょう。プログラミングに成功すると、エルロン確認用右コイルLEDが200ms間隔で点滅します。

 ラジコン飛行機の習慣により、ラダーかエルロンのどちらか一つを装備している飛行機の場合、エルロン・スティックを動かして操縦します。2ch装備 のインドアプレーンの場合、エルロン・スティックを操作してラダーを動かします。本書ではラジコン飛行機の習慣に従って、"エルロン"と呼ぶことにします。

kadai1_web.jpg


初期設定

 #fuses以下でPIC12F683の初期設定を行います。

INTRC_IO・・・内部オシレータ使用
NOWDT・・・ウオッチドック・タイマなし
PUT・・・パワーアップ・タイマ使用
NOPROTECT・・・プログラム・プロテクトなし
NOMCLR・・・リセット端子は使わない
NOBROWNOUT・・・ブラウンアウトなし

#use delay(CLOCK=8000000)・・・内部オシレータ8MHz駆動

#byte GP=5 ・・・5番地(各ポート)をGPと定義
#bit IRSIG=GP.3 ・・・ GP.3をIRSIGと定義(赤外線受光素子接続)

コイル使用の定義

 赤外線受信機RX2-TはPIC12F683を採用しています。各ポートに流すことができる電流は25mAです。
 マグネット・アクチュエータは100Ω程度のものを使用します。電源はリチウム・ポリマ電池1セルなので、3.7Vです。

 流れる電流をIとすると、

   I=V/R=3.7/100=0.037=37mA

 37mAではポートの許容電流を超えてしまいます。そこで、左:GP0・GP1、右:GP4・GP5を一組にして使うことにより倍の50mAを流すことができる設計としました。

 回路を簡単にするために、左を使うときには右を、右を使うときには左をグラウンドと接続するにする回路を構成としています。したがって、左右を同時にONにすることは絶対にしてはいけません。また、各組は同時にONまたはOFFにする必要があります。

 そこで、左右のコイルをrcoil・lcoilという名前で定義し、間違いなく使えるようにしています。

#define rcoil 0x03 //GP0,GP1=ON
#define lcoil 0x30 //GP4,GP5=ON
#define motor 0x04; //GP2=ON・・・モータは今回は使用していません。

コイルのON/OFF

 左右のコイルをON/OFFするには初期設定で定義した名前を使います。

 下の表を見てください。

 右コイルをONするにはGP1・GP0を同時にONにします。左コイルを使用時にはGP4・GP5をONにします。動作確認用コイルLED使用時 には大丈夫ですが、左右コイルを同時にONにするプログラミングはPIC12F683のポートを破損する恐れあるので、絶対にやめてください。

   rcoil・・・0x03
   lcoil・・・0x30

を定義すればOKです。

GPポート
5
4
3
2
1
0
定義値
使用
左コイル1
左コイル2
赤外線
受光素子
モータ
PWM出力
右コイル1
右コイル2
右コイルON
0
0
0
0
1
1
0x03
左コイルON 1 1 0 0 0 0 0x30

実際にONにするには、定義したrcoil、lcoilをGPに出力します。

   GP=rcoil・・・・右コイルがONになります。
   GP=lcoil・・・左コイルがONになります。
   GP=OFF・・・コイルがすべてOFFになります。

PIC12F683特有の設定

   setup_adc_ports(NO_ANALOGS)・・・A-Dコンバータは使わない

 PIC12F683には4ch分のA-Dコンバータを搭載しています。TX2-006Pではジョイスティックの読み込みに使いましたが、RX2- TではA-Dコンバータは使用しません。12F683は、とくに使用宣言をしない場合、A-Dコンバータを使う設定になっています。そこで、A-Dコンバータ を使わない設定にする必要があります。

   setup_oscillator(OSC_8MHz)・・・内部オシレータは8MHz

 #fusesで内部オシレータを使用する宣言をしました。ここで、内部オシレータの周波数を指定します。周波数を明示しないと思った通りの動作にならずに苦労するので、必ず指定してください。

ポート使用宣言

 set_tris_a((その1));//GP3入力、ほかは出力

GPポート
5
4
3
2
1
0
定義値
使用
左コイル1
左コイル2
赤外線
受光素子
モータ
PWM出力
右コイル1
右コイル2
入出力
0
0
1
0
0
0
 ??

 PIC12F683は、ほかのPICと同様に制約はありますが、入出力をプログラマが決めることができます。RX2-Tのポートの使用状況は上の表の通りです。この入出力を16進数で表すと、定義値を求めることができます。


空欄を埋めてプログラムを完成してください。

//  赤外線2ch受信機 RX2&RX2-T対応
// ex1_rx2.c
// 右コイル(LED)を点滅
// for PIC12F683

#include<12f683.h>

#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR,NOBROWNOUT
//ウオッチドック・タイマなし、パワーアップ・タイマ使用
//プロテクトなし、MCLRなし

#use delay(CLOCK=8000000) //8MHz駆動
#byte GP=5
#bit IRSIG=GP.3 //赤外線受光素子接続

#define ON 1
#define OFF 0
#define HI 1
#define LOW 0
#define rcoil 0x03 //GP0,GP1=ON
#define lcoil 0x30 //GP4,GP5=ON
#define motor 0x04; //GP2=ON

//メイン・ルーチン

main(){
int gcount;

set_tris_a( (その1) );//GP3入力、ほかは出力
setup_adc_ports(NO_ANALOGS);//A-Dコンバータは使わない
setup_oscillator(OSC_8MHz);//内部オシレータは8MHz

//GP 5 4 3 2 1 0
// lc2 lc1 ir mt rc2 rc1
// 0 0 1 0 0 0 =0x08

while(1){
GP= (その2) ;
delay_ms( (その3) );
GP=OFF;
delay_ms( (その4) );
}
}

実行

 右コイルLEDが200ms間隔で点滅すればプログラムは成功です。小さなRX2-T基板で自分の制作したプログラムが動作しているのは楽しいですね。

ダウンロード

 この課題のC言語ソース・ファイルおよびHEXファイルは【ex1_rx2.lzh】よりダウンロードできます。

解答

(その1) 0x08 
(その2) rcoil 
(その3) 200 
(その4) 200

長野県飯田工業高校 竹内浩一

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/1948

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

カレンダ

2009年5月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

おすすめ書籍

会社案内
情報セキュリティおよび個人情報の取り扱いについて

コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。
コメントはそれぞれ投稿した人のものです。

About

2008年10月14日 15:31に投稿されたエントリーのページです。

ひとつ前の投稿は「13-9 赤外線2ch受信機RX2-Tの組み立て ~その3~」です。

次の投稿は「14-2 課題2 左コイルLED200ms間隔で点滅する」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 4.1