« 12-8 A-Dコンバータと割り込み ~その3~ | メイン | 12-10 赤外線送信 ~その1~ »

はてなブックマークに追加   12-9 A-Dコンバータと割り込み ~その4、電圧測定~

課題 9

 電源電圧が7V以下になるとLEDが100msで点滅を開始するプログラムを作りましょう。

 TX2-006Pは006P9V角電池に直結されている半固定抵抗を一つ装備しています。この半固定抵抗を利用して、電池の電圧を測定し、電圧低下アラームの役割をさせましょう。

ex9_tx2_web.jpg

1

■ 考え方

 半固定抵抗の両端は電池に直結されているので、通常は9Vが加わっています。7Vに低下したときに半固定抵抗の真ん中の端子より3.5Vを出力させるには目盛りを真ん中に合わせればOKです。

 このとき、A-Dコンバータの出力は、

   3.5/5*1023=716

電源電圧のA-Dコンバータ値はvdd_adcに入っています。

   vdd_adc < 716

 この条件により、LED点滅用割り込みを開始させると「7V以下のときにLEDが点滅を開始する」という目的を達成することができます。

 電池の代わりに安定化電源を接続し、電圧を徐々に低下させると、LEDの点滅開始を確認できます。電源がない場合は、半固定抵抗を動かして、確認してください。確認後は、目盛りを真ん中に合わせてください。

// 赤外線2ch送信機
//  ex9_006p.c PIC12F683用
// 7V以下でLEDが100msで点滅を開始する。安定化電源が使えないときは、VRを回して確認する。

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

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

#use delay(CLOCK=8000000) //8MHz駆動
#byte GP=5
#bit IROUT=GP.5
#bit LED=GP.4
#bit SW=GP.3

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

long th_adc,al_adc,vdd_adc;
int led_sts;

#int_timer1//7V以下でLED点滅開始
alart()//100msごとに割り込みを発生する
{
set_timer1( (その1) );
led_sts= (その2) ;
LED= (その3) ;
}


//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);
al_adc=read_adc();
set_adc_channel(2);//10kΩボリューム読み込み
delay_us(20);
(その4) ;
}

//メイン・ルーチン

void main()
{
int i;
set_tris_a(0x0f);

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( (その5) );//250msごとの割り込み
set_timer1( (その6) );//timer1初期値

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

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

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

while(1){
adc_in();

// 電圧チェック・・7V以下でLEDが点滅するように10k半固定抵抗を調整すること。目盛りが中立になるように小変更
if(vdd_adc < 716){// 3.5V/5V*1023=716
(その7) ;//割り込み許可
}
else{
(その8) ;
LED=ON;
}
}
}

■正解

(その1)40536 (その2)0x01-led_sts (その3)led_sts (その4)vdd_adc=read_adc( ) (その5)T1_INTERNAL | 
T1_DIV_BY_8(その6)40536 (その7)enable_interrupts(INT_TIMER1)
(その8)disable_interrupts(INT_TIMER1)

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


次回より赤外線送信をプログラムします。

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

トラックバック

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

コメントを投稿

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

カレンダ

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

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

次の投稿は「12-10 赤外線送信 ~その1~」です。

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

Powered by
Movable Type 4.1