/* 電源電圧監視ユニット(秋月ブザーバージョン)   1101k26vdd.c PIC12F683用   6.7V以下でLEDを点滅、ブザーを鳴らすなどの警告をする   切り忘れ防止のために、1分後とにLEDを2回点滅、   3分ごとにブザーを2回鳴らし、LEDを点滅させる機能を追加 */ #include<12f683.h> #DEVICE ADC=10 //ADコンバータを10bitで使用 #fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR //ウオッチドックタイマ無し、パワーアップタイマ使用 //プロテクト無し、MCLRなし #use delay(CLOCK=8000000) //8MHz駆動 #byte GP=5 #bit BUZ=GP.2 #bit LED=GP.5 #define ON 1 #define OFF 0 #define HI 1 #define LOW 0 long vdd_adc,counter; //VR入力をADコンバータより読み出し、各変数にセットする。 //電源電圧を7.4Vにセット後、トリムポッドにより、A/Dコンバータ入力を3端子レギュレータ出力と同じに調整する。 void adc_in(void) { set_adc_channel(3); delay_us(20); vdd_adc=read_adc(); } #int_timer1//切り忘れ防止ルーチン alart()//100ms毎に割り込みを発生し、1800回で3分をカウント { int i; set_timer1(40537); counter--; if(counter % 600==0){//1分ごとにLEDを2回点滅 for(i=0;i<2;i++){ LED=ON; delay_ms(250); LED=OFF; delay_ms(250); } } if(counter==0){//3分ごとにLED点滅とブザーを2回鳴らす for(i=0;i<2;i++){ LED=ON; BUZ=ON; delay_ms(250); LED=OFF; BUZ=OFF; delay_ms(250); } counter=1800; } } //メインルーチン void main() { int i; set_tris_a(0x18); /* GP 5 4 3 2 1 0 L VD BZ 0 1 1 0 0 0 */ setup_adc_ports(sAN3 | VSS_VDD); //ADコンバータ使用宣言 setup_adc(ADC_CLOCK_DIV_32); //ADコンバータクロック setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);//100ms毎の割り込み set_timer1(40537);//timer1初期値 enable_interrupts(INT_TIMER1);//割り込み許可 enable_interrupts(GLOBAL); LED=OFF; BUZ=OFF; counter=1800; for(i=0;i<3;i++){ LED=ON; BUZ=ON; delay_ms(250); LED=OFF; BUZ=OFF; delay_ms(250); } LED=OFF; while(1){ adc_in(); if(vdd_adc < 830){ // 6V/7.4*1024=830 250ms LED,ブザー BUZ=ON; LED=ON; delay_ms(500); LED=OFF; BUZ=OFF; delay_ms(250); } else if(vdd_adc < 871){ // 6.3V/7.4*1024=871 500ms LED、ブザー BUZ=ON; LED=ON; delay_ms(250); LED=OFF; BUZ=OFF; delay_ms(500); } else if(vdd_adc < 899){ // 6.5V/7.4*1024=899 1000ms LED、ブザー BUZ=ON; LED=ON; delay_ms(250); LED=OFF; BUZ=OFF; delay_ms(1000); } else if(vdd_adc < 927){ //6.7V/7.4*1024=927 LED点滅開始 LED=ON; delay_ms(250); LED=OFF; BUZ=OFF; delay_ms(500); } else{ BUZ=OFF; LED=OFF; } } }