« 12-9 A-Dコンバータと割り込み ~その4、電圧測定~ | メイン | 12-11時間目 赤外線送信 ~その2~ »

はてなブックマークに追加   12-10 赤外線送信 ~その1~

 いよいよ、赤外線送信プログラムに入ります。まず、スロットル方向のA-Dデータを送信しましょう。

ex10_tx2_web.jpg

課題10

 スロットル・スティック=縦方向のA-Dコンバータの値を読み取り、38kHzに変調した赤外線を送信します。後日製作予定の赤外線2ch受信機・赤外線受信ボードなどで確認することができます。

28_ir.JPG
LEDを正面から見た様子

読み取り

 A-Dコンバータよりスロットル方向のスティック位置を読み取ります。

set_adc_channel(0);
delay_us(20);
th_adc=read_adc();
 このth_adcの値により、ir_mod()関数が赤外線変調により送信します。

■ 赤外線変調

void ir_mod(long pulse){}

 38kHz変調出力関数です。13μs On、13μs OFFを19回繰り返して500μsのONを作ります。VRのADコンバータの値により、OFFタイム設定します。ON+OFFの合計時間により受信機側で制御を行います。

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

 ON+OFFの合計時間により制御する方法をPPMといいます。


■ 課題10

// 赤外線2ch送信機 課題10
// スロットルの赤外線送信する
//  ex10_tx006p.c PIC12F683用

#include<12f683.h>
#DEVICE ADC=10 //A-Dコンバータを10bitで使用
//10bit=2^10=0~1023

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

#use delay(CLOCK=8000000) //8MHz駆動
#byte GP=5//GPポート使用
#bit IROUT=GP.5//赤外線LED
#bit LED=GP.4//LED
#bit SW=GP.3//ジョイスティック付属スイッチ

// A-Dコンバータ割り当て
//ch0:スロットル
//ch1:エルロン
//ch2:10kΩ半固定抵抗

#define ON 1
#define OFF 0
#define HI 1
#define LOW 0

long th_adc,al_adc,vdd_adc;
int led_sts;

// 38kHz変調出力関数
// 13μS On、13μS OFFを19回繰り返して500μsのONを作る
// その後、VRのADコンバータの値により、OFFタイム設定する。
//0・・1.000ms、512・・1.522ms、1024・・2.035ms
void ir_mod(long pulse){
int dummy;
long i;

disable_interrupts(INT_TIMER1);//割り込み禁止
for(i=0;i<(その1);i++){//38kHz変調になるように調整済み
IROUT=(その2);
delay_us(13);
IROUT=(その3);
delay_us(6);
}
IROUT=OFF;
delay_us(325);
pulse=pulse/10;
for(i=0;i<pulse;i++){//1ループ10μSに調整済み
dummy=ON;
delay_us(2);
}
enable_interrupts(INT_TIMER1);//割り込み許可
}

//VR入力をA-Dコンバータより読み出し、各変数にセットする。
void adc_in(void)
{
set_adc_channel(0);
delay_us(20);
(その4);
set_adc_channel(1);
delay_us(20);
al_adc=read_adc();
set_adc_channel(2);
delay_us(20);
vdd_adc=read_adc();
}

//メイン・ルーチン

void main()
{
int i;
set_tris_a(0x0f);//GP0~GP4入力、GP5出力

setup_adc_ports(sAN0 | sAN1 | sAN2 | VSS_VDD); //A-Dコンバータ使用宣言
setup_adc(ADC_CLOCK_DIV_32); //A-Dコンバータ・クロック
setup_oscillator(OSC_8MHz);

setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);//250msごとの割り込み
set_timer1(3036);//timer1初期値

IROUT=OFF;
LED=OFF;
led_sts=0;

for(i=0;i<3;i++){
LED=ON;
delay_ms(250);
LED=OFF;
delay_ms(250);
}
LED=ON;

while(1){
adc_in();

//1chエルロン
ir_mod(512);

//2chエレベータ(なし)
ir_mod(512);

//3chスロットル
ir_mod((その5));

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

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

delay_ms(10);//送信間隔
}
}

正解

(その1)19 (その2)ON (その3)OFF (その4)th_adc=read_adc() (その5)th_adc

・課題10のC言語ソース・ファイルとHEXファイルはこちらからダウンロードできます【ex10_006p.lzh


 次回は、エルロン方向の送信を可能にします。
 長野県飯田工業高校 竹内浩一

トラックバック

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

コメントを投稿

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

カレンダ

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年7月14日 08:37に投稿されたエントリーのページです。

ひとつ前の投稿は「12-9 A-Dコンバータと割り込み ~その4、電圧測定~」です。

次の投稿は「12-11時間目 赤外線送信 ~その2~」です。

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

Powered by
Movable Type 4.1