////////////////////////////////////////////////////////// // THW温度計 // // C-COMPILER CCSC 00.11.18 // ////////////////////////////////////////////////////////// // config: HS // // (3F72) PowerUpTimer // // BrownOutDetect // // FlashProgramEnable // ////////////////////////////////////////////////////////// #include <16f873.h> #include #include // log10()関数計算用ファイル #use delay(CLOCK=8000000) #define pri_w 0 // THW #define lamp pin_a4 //LED極性指定用入力 #byte tmr0 = 1 //タイマーアドレス #byte port_a = 5 //ポートAアドレス #byte port_b = 6 //ポートBアドレス #byte port_c = 7 //ポートCアドレス long ad_data; //A/D変換データー格納用 float keisan; //各計算用 float suion_d; long w_w[5]; //水温格納用 //////// I/O初期設定 //////////////////////////////////////// void syoki(){ // // setup_adc_ports(RA0_ANALOG_RA3_RA2_REF); // setup_adc(adc_clock_div_32); //クロック設定 // //A0をA/Dコンバータ A2を低電圧側基準値 A3を高電圧側基準値 // //--------------------------------------------------------------// // set_tris_b(0x00); //全ピンout // port_b = 0x00; //ポートBクリア // set_tris_c(0x00); //全ピンout // port_c = 0x00; //ポートCクリア // // #use fast_io(b) // #use fast_io(c) // // } // ////////////////////////////////////////////////////////////////// //////////// A/D変換値入力 ////////////////////////////////// void ad_in(int ch){ // int i,j; // float k; // k = 0; // for(j=1;j<=5;j++){ //5回ループ // ad_data = 0; // // for(i=1;i<=10;i++){ //10回ループ // set_adc_channel(ch); // delay_us(200); // ad_data = ad_data + read_adc(); // } // k = k + (ad_data); //50回の合計 // } // ad_data = k/50; //50回測定の平均 // } // ////////////////////////////////////////////////////////////////// //**************************************************************** // 温度測定 // void pri_w_temp(){ // ad_in(pri_w); //A/D変換 // suion_d = ad_data * 2.587 - 2.6; //電圧変換 // // suion_d = log10(suion_d) * (-92.537) + 334.5; // //温度変換 // } // //**************************************************************** ////////////////////////////////////////////////////////////////// void led_out(){ // int l,m; // long j; // j = suion_d; // //-------------------------- // if(j >= 105){ // l = 0xff; // 11111111 // m = 0xff; // 11111111 // } // else if(j >= 100){ // l = 0x7f; // 01111111 // m = 0xff; // 11111111 // } // else if(j >= 95){ // l = 0x3f; // 00111111 // m = 0xff; // 11111111 // } // else if(j >= 90){ // l = 0x1f; // 00011111 // m = 0xff; // 11111111 // } // else if(j >= 85){ // l = 0x0f; // 00001111 // m = 0xff; // 11111111 // } // else if(j >= 80){ // l = 0x07; // 00000111 // m = 0xff; // 11111111 // } // else if(j >= 75){ // l = 0x03; // 00000011 // m = 0xff; // 11111111 // } // else if(j >= 70){ // l = 0x01; // 00000001 // m = 0xff; // 11111111 // } // else if(j >= 65){ // l = 0x00; // 00000000 // m = 0xff; // 11111111 // } // else if(j >= 60){ // l = 0x00; // 00000000 // m = 0x7f; // 01111111 // } // else if(j >= 55){ // l = 0x00; // 00000000 // m = 0x3f; // 00111111 // } // else if(j >= 50){ // l = 0x00; // 00000000 // m = 0x1f; // 00011111 // } // else if(j >= 45){ // l = 0x00; // 00000000 // m = 0x0f; // 00001111 // } // else if(j >= 40){ // l = 0x00; // 00000000 // m = 0x07; // 00000111 // } // else if(j >= 35){ // l = 0x00; // 00000000 // m = 0x03; // 00000011 // } // else if(j >= 30){ // l = 0x00; // 00000000 // m = 0x01; // 00000001 // } // else{ // l = 0x00; // 00000000 // m = 0x00; // 00000000 // } // // if(bit_test(port_a,4) == 0){ //lamp == 0) // port_b = l; //カソードコモン // port_c = m; // } // else{ // port_b = ~l; //アノードコモン // port_c = ~m; // } // } // ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// main() { long j; int i,k,adsw; //--------------------------------------------------------------- syoki(); //I/O初期設定 pri_w_temp(); //初期値用に測定 for(i=0;i<=4;i++) //測定値を配列に格納 w_w[i] = suion_d; //--------------------------------------------------------------- while(1){ pri_w_temp(); //測定 for(i=4;i>=1;i--) //配列のdataをシフト w_w[i] = w_w[i-1]; w_w[0] = suion_d; //最新のDATAをw_w[0]に格納 suion_d = 0; //suion_dをゼロクリア for(i=0;i<=4;i++) //過去5回の測定値合計 suion_d = suion_d + w_w[i]; suion_d = suion_d/5; //過去5回の平均値計算 led_out(); //led点灯処理 delay_ms(1000); //1秒待ち } //while(1) } //main