« 9-11 完成および動作確認 | メイン | 10-2 赤外線送信プログラム ~その2~ »

はてなブックマークに追加   10-1 赤外線送信プログラム ~その1~

第10章 PIC赤外線送信ボード・プログラミングを楽しみましょう

 PIC赤外線送信ボードは無事に完成しましたか? これで赤外線送信・受信のプログラミングを楽しむ環境が整いました。

 今回より、赤外線送信プログラミングを楽しみたいと思います。
 赤外線受信ボードには第7章課題10、2チャンネル対応赤外線受信モニタのファームウエアを転送しておいてください。

課題10-1

 赤外線送信ボードのDOWNスイッチを押すと、受信ボードのDOWN_LEDが反応するプログラムを完成しましょう。
 DOWNスイッチは3chスロットルをLOWにした場合と同じデータ=’0’を出力させます。

// ex1_tx.c PIC赤外線送信ボード
// DOWNスイッチを押すと受信機のDOWN_LEDが反応する
// PIC16F84A用

イニシャライズ

#include<16f84a.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#define ON 1
#define OFF 0

#define TON 0
#define TOFF 1

 タクト・スイッチはON/OFFが'0'/'1'に対応しています。私たちの感覚とは逆になるので、ここで再定義しています。

#byte  RA=5
 #bit DOWN_SW=RA.1
 #bit RIGHT_SW=RA.0
 #bit UP_SW=RA.2
 #bit LEFT_SW=RA.3

 UP・DOWN・RIGHT・LEFTの各スイッチの接続定義

#byte  RB=6
 #bit IROUT=RB.0

 赤外線受光素子の定義

long th_adc,al_adc;
th_adc・・UP,DOWNのデータが入ります
al_adc・・RIGHT,LEFTのデータが入ります

 通常の送信機の場合、スロットル・データとエルロン・データが入ります

38kHz変調出力関数

 赤外線受光素子は38kHzで変調された赤外線光に反応します。ir_mod()関数により、38kHzで変調を行います。
500μsの38kHz変調の赤外線光を送信後、pulseで与えられた時間になるようにOFFタイムを設定します。

//0・・1.000ms、512・・1.522ms、1024・・2.035ms

 pulseの値と500μS+OFFタイムの長さは以上のように設定されています。この長さによりPPM送信を行います。
 変調についてのい詳細は第8章をご覧ください。

// 38kHz変調出力関数
// 13μS On、13μS OFFを19回繰り返して500μSのONを作る
// その後、どのスイッチを押したかにより、OFFタイム設定する。
//0・・1.000ms、512・・1.522ms、1024・・2.035ms
void ir_mod(long pulse){
  int dummy;
  long i;

for(i=0;i<19;i++){//38kHz変調になるように調整済み
IROUT=ON; delay_us(13); IROUT=OFF; delay_us(13); }

 ここまでで500μsの38kHz変調赤外線光を送信します。

  IROUT=OFF;

 赤外線送信をOFFにします。

  delay_us(325);

 時間調整です。

  pulse=pulse/10;

 分解能は100となります。

 ここまでで約1000μs=1msです。

  for(i=0;i<pulse;i++){ //1ループ10μsに調整済み
    dummy=ON;
    delay_us(8);
  }

 pulseの値によりOFFタイムの長さが変わります。今後製作予定の2ch赤外線
もし、512の場合は512/10=51となり、

5100μs=0.51ms

1ms+0.51ms=1.51ms=1510μs:フタバ仕様のニュートラル

となります。

}

スイッチ入力

void sw_in(void)
{
  if(DOWN_SW==TON){
    ★★★★=0;
  }
  else{
    ★★★★=512;
  }
}

 DOWNスイッチが押されたときの処理を行います。
 ダウン・スイッチの場合、スロットルの場合は’0’と同じ意味をもちます。
 押されない場合は、ニュートラルと考えて値を512とします。

メイン関数

//メイン関数
main(){
  set_tris_a(0x0f);
  set_tris_b(0x00);
 Aポートはすべて入力に設定。
 Bポートはすべて出力に設定。

  IROUT=OFF;
  th_adc=512;
  al_adc=512;

  while(1){
    sw_in();

// 1ch(エルロン送信、この課題では未使用)
    ir_mod(512);

// 2ch(エレベータ、未使用)
    ir_mod(512);

// 3ch(スロットル)
    ir_mod(th_adc);//スロットル・データ送信

// 4ch(ラダー)
   ir_mod(512);

 スロットル以外は512=ニュートラルに設定。
 スロットルはsw()関数により設定。

// チャンネル・エンド
ir_mod(512);

 ダミー・チャンネルを送信しないと受信機側が待機状態にならないために必須です。値は512でなくても可です。

    delay_ms(10);
 送信間隔の設定です。
  }

}

完成!
 ソース・ファイルの入力後、コンパイルし、HEXファイルをPICに転送する手順は今までと同じです。プログラムを転送したPICを赤外線送信ボードに装着し、電源を入れてください。受信ボードの電源を入れることも忘れないでください。

 受信ボードは電源をONにすると3回点滅し、起動します。信号を受信できない場合、LEDは何も光りませんが、ニュートラル信号を受信開始するとUP・DOWN,RIGHT・LEFTを一組として点滅を繰り返します。

 何もスイッチを押していない場合、送信ボードはニュートラル信号を送信するので、送信ボードの電源を入れると受信ボードは点滅を開始します。もし、何も起きない場合は、受信ボードの向きを変えて赤外線を受信できるようにしてください。

 ここまで確認できたら、DOWNスイッチを押します。受信ボードのDOWN_LEDが点灯すれば成功です。RGIHTとLEFTのLEDはそのまま点滅を繰り返します。

 解答は次回に掲載します。

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

トラックバック

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

コメントを投稿

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

カレンダ

2008年11月
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

おすすめ書籍

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

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

About

2008年1月 7日 10:22に投稿されたエントリーのページです。

ひとつ前の投稿は「9-11 完成および動作確認」です。

次の投稿は「10-2 赤外線送信プログラム ~その2~」です。

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

Powered by
Movable Type 4.1