« 12-6 A-Dコンバータと割り込み | メイン | 12-8 A-Dコンバータと割り込み ~その3~ »

はてなブックマークに追加   12-7 A-Dコンバータと割り込み ~その2~

 課題6では、スロットル方向(縦)をA-Dコンバータで読み込みました。この課題ではエルロン方向(横)を読み取り、割り込みによるLEDの点滅と連動します。

ex7_tx2_web.jpg

考え方

 考え方はスロットル方向と同じです。

set_adc_channel(1);//エルロン・スティック読み込み
delay_us(20);
al_adc=read_adc();

 A-Dコンバータのchannel(1)より値を読み出し、al_adcにセットします。

al_adc < 256  または al_adc > 768

のときに割り込みを許可、それ以外では禁止になるようにプログラミングしてください。


課題7

 ジョイスティックをエルロン方向へ左1/4以下、右1/4以上で、割り込みを許可しLEDを100msで点滅する。

// 赤外線2ch送信機TX2-006P 課題7
// 割り込み
// ジョイスティックのエルロン・スティック左1/4以下、右1/4以上で、割り込みを許可しLEDを100msで点滅する。
// ex7-006p.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

int led_sts;
long th_adc,al_adc,vdd_adc;

// 0.5*10^-6*8*(65535-x+1)=100ms
//x=40536
#int_timer1//割り込み関数定義
alart()//100ms毎に割り込みを発生する
{
set_timer1(40536);
led_sts=0x01-led_sts;
LED=led_sts;
}

//VR入力をA-Dコンバータより読み出し、各変数にセットする。
void adc_in(void)
{
set_adc_channel(0);//スロットル・スティックの読み込み
delay_us(20);
th_adc=read_adc();
set_adc_channel(1);//エルロン・スティックの読み込み
delay_us(20);
(その1);
set_adc_channel(2);//10kΩボリュームの読み込み
delay_us(20);
vdd_adc=read_adc();
}


//メイン・ルーチン

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

setup_oscillator(OSC_8MHz);
(その2);//A-Dコンバータ使用宣言
(その3);//A-Dコンバータクロック
(その4);//250msごとの割り込み
set_timer1(40536);//timer1初期値

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

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

enable_interrupts(GLOBAL);//割り込み全体許可

while(1){
adc_in();

if( (その5)){
(その6);//割り込み許可
}
else{
LED=ON;
(その7);//割り込み許可
}
}
}

■ 正解

(その1)al_adc=read_adc() 
(その2)setup_adc_ports(sAN0 | sAN1 | sAN2 | VSS_VDD) 
(その3)setup_adc(ADC_CLOCK_DIV_32)
(その4)setup_timer_1(T1_INTERNAL | T1_DIV_BY_8) 
(その5)al_adc < 256 || al_adc > 768 
(その6)enable_interrupts(INT_TIMER1)
(その7)disable_interrupts(INT_TIMER1)

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


次回も、A-Dコンバータと割り込みプログラムを続けます。

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

トラックバック

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

コメントを投稿

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

カレンダ

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

ひとつ前の投稿は「12-6 A-Dコンバータと割り込み」です。

次の投稿は「12-8 A-Dコンバータと割り込み ~その3~」です。

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

Powered by
Movable Type 4.1