ILF / Mbed 2 deprecated mbed_ILF

Dependencies:   mbed SDFileSystem

Revision:
12:60fb2daa673f
Parent:
11:73676f3114f1
--- a/ILF3.cpp	Wed Apr 27 06:19:26 2022 +0000
+++ b/ILF3.cpp	Thu Apr 28 00:07:54 2022 +0000
@@ -123,7 +123,7 @@
 #define wait_poweron    4       //[s]電源投入からリセットまでの時間
 #define time_reset      0.5     //reset Hの時間 ver1.1.3
 #define TIME_RELAY_ON   0.5     //外付けリードリレー用 Ton[s]
-#define TIME_RELAY_OFF  0.2     //外付けリードリレー用 Toff[s]
+#define TIME_RELAY_OFF  0.1     //外付けリードリレー用 Toff[s]
 const int ton_rr = 0.1;         //内蔵リードリレー ton[s]
 const int toff_rr = 0.1;        //内蔵リードリレー toff]
 const bool tenken = true;       //日常点検用 マニュアルモードにて True:測定CHのみVSS出力 False:全CH,VSS出力
@@ -269,19 +269,6 @@
     DigitalOut( P1_25 ),  //io12
 };
 
-/*
-DigitalOut  io[]  = {  //  配列を用意します
-    DigitalOut( P0_25 ),  //io1 配列の1番目の要素をP0_25で初期化したDigitalOutに
-    DigitalOut( P0_26 ),  //io2
-    DigitalOut( P0_23 ),  //io3
-    DigitalOut( P0_24 ),  //io4
-    DigitalOut( P1_22 ),  //io5
-    DigitalOut( P1_23 ),  //io6
-    DigitalOut( P1_24 ),  //io7
-    DigitalOut( P1_25 )   //io8
-};
-*/
-
 DigitalOut  range[] = {  //  配列を用意します
     DigitalOut( P2_3 ),  //range1 配列の1番目の要素を**で初期化したDigitalOutに
     DigitalOut( P2_2 ),  //range2
@@ -324,26 +311,6 @@
     DigitalOut( P2_8 )      //so8
 };
 
-//ver1.1.0
-/*
-DigitalOut  seq_hantei[] = {
-    DigitalOut( P0_21 ),
-    DigitalOut( P0_22 ),
-    DigitalOut( P3_25 ),
-    DigitalOut( P3_26 )
-};
-
-DigitalOut  seq_busy(P0_20);
-//DigitalIn
-DigitalIn   seq_start(P4_28);
-DigitalIn   seq_cal_a(P2_6);
-DigitalIn   seq_cal_b(P2_7);
-DigitalIn   seq_cal_c(P2_8);
-DigitalIn   seq_kosuu_a(P2_13);
-DigitalIn   seq_kosuu_b(P2_9);
-//DigitalIn   seq_yobi(P0_19);
-*/
-
 /*** PWM ***/
 PwmOut leds[] = {   //配列を用意
     PwmOut(P2_5),  //LED1
@@ -369,7 +336,7 @@
     SD Card
  
 *******************************************************************************/
-float   fdata[4][4];//ファイル出力用
+double   fdata[4][4];//ファイル出力用
 void    sd_writetext(char* text);
 
 /*******************************************************************************
@@ -527,8 +494,8 @@
 void    compute_adc(int adc_con, long *avg);//(ADCのCONFIG, 計算結果)
 void    gu_putdec(short* x);//2byteを10進で表示
 void    gu_putdeck(short* x);//2byteを10進で表示。1/1000.
-void    gu_putdeci(float* x);// ver1.1.4
-void    gu_putdeci_mA(float* x);// ver1.1.4
+void    gu_putdeci(double* x);
+void    gu_putdeci_mA(double* x);
 void    meas_current_automode(char amount);//AutoMOdeの電流測定サブ iop ocp共通
 void    auto_run();//自動測定モード
 void    auto_meas(char noc);//一括測定。ch:測定する総チャンネル数
@@ -551,13 +518,15 @@
 char    io_voc; //VOC測定時のIO操作。ON(=VDD)の場合は”0x01"OFF(=OPEN)は"0x00"
 char    err_f[4];//ch1~4 規格外発生時のフラグ 0or1
 short   V[4];//ADC入力値を3倍した値 測定値[V] 16進数
-float   I[4];//電流測定値チャンネル毎の
+double   I[4];//電流測定値チャンネル毎の
 short   R[4];//抵抗測定値
 short   voc[4];//ADC入力値を3倍した値 測定値[mV] 16進数
 short   vocp[4];//過充電防止時のHD測定電圧
-float   iop[4];//2byte 補数あり 測定値 1bit 0.01uA
-float   ocp[4];//2byte 補数あり 測定値
+double   iop[4];//2byte 補数あり 測定値 1bit 0.01uA
+double   ocp[4];//2byte 補数あり 測定値
 char    ch_num ;//選択中の測定チャネル(0~3)
+int     cat;//検査カテゴリNo.
+char    seq_name[4];//CAL番号一時格納用配列
 
 //structure
 struct cal_info {
@@ -589,6 +558,76 @@
 void read_caliber(cal_info *cal, int num);
 void write_caliber_information(cal_info *cal, int num);
 
+
+
+/*******************************************************************************
+
+    シーケンサ通信
+    
+        ver3.0.0
+
+*******************************************************************************/
+//一定時間CAL名未送信
+void seq_timeout(){
+    seq_name[0] = 'A';
+    seq_name[3] = 'B';
+}
+
+//CAL名受信
+void seq_serialrecive(){
+    seq_name[0] = uart.getc();
+}
+
+
+//測定データ送信
+void seq_serialsend(/*int noc*/) //デバック時int nocコメントアウト
+{
+    char    STX     = 2;
+    char    EXT     = 3;
+    int     i;
+    int     CH[]    = {1,2,3,4};
+    int     noc     = 4;
+            
+    for(i = 0; i <= ( noc - 1); i++){
+//PCデバック用    pc.→uart.に変更で装置用へ変更出来る    
+        uart.printf("%c" , STX);
+        uart.printf("%d" , CH[i]);
+        uart.printf("%c" , ',');
+        uart.printf("%s\n" , calinfo.name);
+        uart.printf("%c" , ',');
+        
+        //アンテナ抵抗値
+        if(R[i] < res_vref && R[0] >= 0){
+            uart.printf("%d" , R[i]);    
+            }
+        else{
+            uart.printf("%s" , "OL");
+            }
+                
+        uart.printf("%c" , ',');      
+        uart.printf("%f" , fdata[i][0]);   //Iop
+        uart.printf("%c" , ',');
+        uart.printf("%f" , fdata[i][1]);   //Idd
+        uart.printf("%c" , ',');
+        uart.printf("%f" , fdata[i][2]);   //Voc
+        uart.printf("%c" , ',');
+        uart.printf("%d" , vocp[i]);
+        uart.printf("%c" , ',');
+        
+        if(err_f == 0){                       //void hanteiのエラーフラグを流用
+            uart.printf("%s" , "PASS");
+            }
+        else{
+            uart.printf("%s" , "FAIL");
+            }
+            
+        uart.printf("%c" , ',');
+        uart.printf("%d" , cat);                
+        uart.printf("%c\n" , EXT);
+        }//for
+    
+}
+
 /*******************************
 
     ver1.2.5
@@ -649,8 +688,10 @@
 *******************************************************************************/
 void seq()
 {
+    /*
     char crdata[3];
     char cmd_gu[32];
+    */
 
     seq_int_hyouji(true);
 
@@ -662,16 +703,17 @@
         //if( seq_start == 0 ) {
         if ( seq_in[0] == 0 ){
 
-            seq_int_hyouji(false);
+            //seq_int_hyouji(false);
 
             trigger();
 
-            seq_int_hyouji(true);
+            //seq_int_hyouji(true);
 
         }
 
-        wait(0.3);
-
+        wait(0.2);
+
+        /*
         crdata[0] = 0;
         crdata[1] = 0;
         crdata[2] = 0;
@@ -701,6 +743,7 @@
 
             }//end if
         }//end if
+        */
     }//while(1)
 }
 
@@ -1124,7 +1167,8 @@
 void flip()
 {
     short   sdata; //_2byte reading data of ADC
-    float   fdata; // ver1.1.4
+    //float   fdata; // ver1.1.4
+    double  ddata;
 
     switch ( ch_num ) {
         case 0:
@@ -1139,12 +1183,14 @@
 
     //sdata = sdata * 5 * 0.25;//プリアンプのGAINが1/5なのでここで5倍.ADC14bit分解能で、1bitあたり0.25mv
     /*ver1.1.4*/
-    fdata = sdata * 5 * 0.25;//プリアンプのGAINが1/5なのでここで5倍.ADC14bit分解能で、1bitあたり0.25mv
+    //fdata = sdata * 5 * 0.25;//プリアンプのGAINが1/5なのでここで5倍.ADC14bit分解能で、1bitあたり0.25mv
+    ddata = sdata * 5 * 0.25;//プリアンプのGAINが1/5なのでここで5倍.ADC14bit分解能で、1bitあたり0.25mv
 
     gu_cursor(0,4);
     gu_print1(" ");
+    gu_putdeci(&ddata);
     /*ver1.1.4*/
-    gu_putdeci(&fdata);
+    //gu_putdeci(&fdata);
     //gu_putdeci(&sdata);
 
     houden[ ch_num ] = 1; //Discharge
@@ -1225,7 +1271,7 @@
     short vss;
     short sdata;
     int r_flag;
-    float ima;
+    double ima;
     short ssdata;
 
     ch_num = 0; //初期電流測定CH.
@@ -3330,10 +3376,10 @@
     積分時間 2s
     容量 20uF
 **************************************/
-void gu_putdeci(float* idata)
+void gu_putdeci(double* idata)
 {
 
-    float uA; //ver1.1.4
+    double uA; //ver1.1.4
     long y; //ver1.1.4
     long x; //ver1.1.4
 
@@ -3400,9 +3446,9 @@
     ADC_LSB:0.25mV
     シャント抵抗1kΩ
 **************************************/
-void gu_putdeci_mA(float* idata)
+void gu_putdeci_mA(double* idata)
 {
-    float uA; //ver1.1.4
+    double uA; //ver1.1.4
     long y; //ver1.1.4
     long x; //ver1.1.4
 
@@ -3658,6 +3704,9 @@
     //short   kekka;
     //short   goukei;
     //int     bosu = 2;
+    
+    short   ssdata1;
+    short   ssdata2;
 
     switch(ch) {
         case 0:
@@ -3670,7 +3719,20 @@
             com = adc_config(2,0);//ch1(adc),12bit
             i2c.write( addr_ADC1, &com, 1);
             wait(0.1);
-            sdata = read_adc(addr_ADC1);
+            ssdata1 = read_adc(addr_ADC1);
+
+            wait(0.1);
+
+            i2c.write( addr_ADC1, &com, 1);
+            wait(0.1);
+            ssdata2 = read_adc(addr_ADC1);
+            
+            //0.001 *5 * 10 Vの差異がある場合 ゼロ値にする
+            if ( abs(ssdata1 - ssdata2) > 10 ){
+                sdata = 0;
+            } else {        
+                sdata = ( ssdata1 + ssdata2 ) /2;
+            }
             
             break;