Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed SDFileSystem
Diff: ILF3.cpp
- Revision:
- 6:cd0b4dc7eeb2
- Parent:
- 5:569cfdb08f5b
- Child:
- 11:73676f3114f1
--- a/ILF3.cpp Wed Apr 20 01:40:07 2022 +0000
+++ b/ILF3.cpp Mon Apr 25 07:48:36 2022 +0000
@@ -90,7 +90,16 @@
*******************************************************************************/
//
-//各種定数
+//定数
+//
+//soft ver
+const int version_major = 3;
+const int version_minor = 0;
+const int version_build = 0;
+
+const char pass[] = "ILF"; //password(大文字)
+#define YOSO 3 //password文字数
+
#define O_L 100 //[uA]電流測定値のオーバーロード値 //ver1.2.5
/*
#define CAP 20 //[uF] 積分回路のコンデンサ容量
@@ -102,41 +111,104 @@
#define GAIN_V 0.2 //電流測定プリアンプのGAIN
*/
#define DEB_EN 0 //デバッグイネーブル:1 ディスイネーブル:0 ver1.2.3
-#define RL_EN 1 //1:io[]を外付けのリードリレー制御用に使用する場合は1.以外は0. ver1.2.3
+#define RL_EN 0 //1:io[]を外付けのリードリレー制御用に使用する場合は1.以外は0. ver1.2.3
#define SEQ_EN 0 //1:シーケンサ接続仕様 0:シーケンサ未接続仕様
#define period_pwm 200 //*us
-#define COP 0.005 //pwm_duty(%) = COP * DATA(0~255)
+#define COP 0.0039 //pwm_duty(%) = COP * DATA(0~255) ver3 0.005 -> 0.0039
#define rsense 1000 //抵抗測定回路のプルアップ抵抗値 1kΩ
#define res_vref 0x800 //抵抗測定回路のリファレンス電圧 2.048V
#define dac_vref 2500 //DACのリファレンス電圧 単位[mV]
-#define number_of_channels 2 //測定チャンネル数(MAX 4)
+#define number_of_channels 4 //測定チャンネル数(MAX 4)
#define time_discharge 0.5 //discharging time(s)
#define time_integral 2 //integral time(s)
-#define touch 5 //GU-D タッチパネル感度 0~7で設定。低いほど敏感。
#define wait_voc_1 0.5 //[s]VOC測定電圧設定後からリセットまでの時間
-#define wait_reset 0.3 //[s]リセット解除からVOC測定までの時間
+//#define wait_reset 0.3 //[s]リセット解除からVOC測定までの時間
#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]
const int ton_rr = 0.1; //内蔵リードリレー ton[s]
const int toff_rr = 0.1; //内蔵リードリレー toff]
-
-/***************************************
-RESOLUTION SETTINGS VS. LSB
- -----------------------------------
-|Resolution Setting | LSB |
- -----------------------------------
-| 12bits(00) | 1mv |
-| 14bits(01) | 250uV |
-| 16bits(10) | 62.5uV |
-| 18bits(11) | 15.625uV |
- -----------------------------------
-****************************************/
-//soft ver
-const int version_major = 3;
-const int version_minor = 0;
-const int version_build = 0;
+const bool tenken = true; //日常点検用 マニュアルモードにて True:測定CHのみVSS出力 False:全CH,VSS出力
+
+//Display
+#define touch 5 //GU-D タッチパネル感度 0~7で設定。低いほど敏感。
+const char sw_up_set[] = {20,21,22,23}; //CAL情報セット画面におけるUPスイッチの表示位置番号
+const char sw_down_set[] = {28,29,30,31}; //CAL情報セット画面におけるDOWNスイッチの表示位置番号
+const int zahyou_para1[] = {0,2}; //CAL情報セット画面における項目の表示位置座標
+const int zahyou_para2[] = {0,4}; //CAL情報セット画面における項目の表示位置座標
+const int zahyou_val[] = {96,4}; //CAL情報セット画面における数値の表示位置座標
+const int zahyou_unit[] = {160,4}; //CAL情報セット画面における単位の表示位置座標
+const char *cpara1[]= {
+ "IOP", //x=0 : vss_iop[V]
+ "OCP", //x=1 : vss_ocp[V]
+ "VOC", //x=2 : vss_voc[V]
+ "VOC", //x=3 : low_limit_voc[V]
+ "IOP", //x=4 : low_limit_iop[uA]
+ "OCP", //x=5 : low_limit_ocp[uA]
+ "OCP", //x=6 : up_limit_ocp[uA]
+ "OCP", //x=7 : low_limit_ocp_v[V]
+ "OCP", //x=8 : up_limit_ocp_v[V]
+ "IOP", //x=9 : wait_iop[s]
+ "OCP", //x=10 : wait_ocp[s]
+ "VOC", //x=11 : wait_voc[s]
+ "ANTENA", //x=12 : low_limit_resistor[Ω]
+ "ANTENA", //x=13 : up_limit_resistor[Ω]
+ "" //x=14 : cal_name(ASCII)
+};
+const char *cpara2[]= {
+ "VSS", //x=0 : vss_iop[V]
+ "VSS", //x=1 : vss_ocp[V]
+ "VSS", //x=2 : vss_voc[V]
+ "LOW LIMIT", //x=3 : low_limit_voc[V]
+ "LOW LIMIT", //x=4 : low_limit_iop[uA]
+ "LOW LIMIT", //x=5 : low_limit_ocp[uA]
+ "UP LIMIT", //x=6 : up_limit_ocp[uA]
+ "LOW LIMIT", //x=7 : low_limit_ocp_v[V]
+ "UP LIMIT", //x=8 : up_limit_ocp_v[V]
+ "WAIT", //x=9 : wait_iop[s]
+ "WAIT", //x=10 : wait_ocp[s]
+ "WAIT", //x=11 : wait_voc[s]
+ "LOW LIMIT", //x=12 : low_limit_resistor[Ω]
+ "UP LIMIT", //x=13 : up_limit_resistor[Ω]
+ "NAME" //x=14 : cal_name(ASCII)
+};
+const char *cunit[]= {
+ "V", //x=0 : vss_iop[V]
+ "V", //x=1 : vss_ocp[V]
+ "V", //x=2 : vss_voc[V]
+ "V", //x=3 : low_limit_voc[V]
+ "uA", //x=4 : low_limit_iop[uA]
+ "uA", //x=5 : low_limit_ocp[uA]
+ "uA", //x=6 : up_limit_ocp[uA]
+ "V", //x=7 : low_limit_ocp_v[V]
+ "V", //x=8 : up_limit_ocp_v[V]
+ "s", //x=9 : wait_iop[s]
+ "s", //x=10 : wait_ocp[s]
+ "s", //x=11 : wait_voc[s]
+ "", //x=12 : low_limit_resistor[Ω]
+ "", //x=13 : up_limit_resistor[Ω]
+ "" //x=14 : cal_name(ASCII)
+};
+
+/*
+x=0 : vss_iop[V]
+x=1 : vss_ocp[V]
+x=2 : vss_voc[V]
+x=3 : low_limit_voc[V]
+x=4 : low_limit_iop[uA]
+x=5 : low_limit_ocp[uA]
+x=6 : up_limit_ocp[uA]
+x=7 : low_limit_ocp_v[V]
+x=8 : up_limit_ocp_v[V]
+x=9 : wait_iop[s]
+x=10 : wait_ocp[s]
+x=11 : wait_voc[s]
+x=12 : low_limit_resistor[Ω]
+x=13 : up_limit_resistor[Ω]
+x=14 : cal_name(ASCII)
+*/
+
/*******************************************************************************
@@ -161,7 +233,7 @@
Serial uart(P0_15,P0_16,9600);
/*** interruput ***/
-InterruptIn seq_yobi(P0_19);
+//InterruptIn seq_yobi(P0_19);
/*** start sw ***/
DigitalIn sw_start(P0_4);
@@ -193,6 +265,13 @@
DigitalOut( P0_26 ) //io16
};
+DigitalOut io_reset[] = {
+ DigitalOut( P1_22 ), //io9
+ DigitalOut( P1_23 ), //io10
+ DigitalOut( P1_24 ), //io11
+ DigitalOut( P1_25 ), //io12
+};
+
/*
DigitalOut io[] = { // 配列を用意します
DigitalOut( P0_25 ), //io1 配列の1番目の要素をP0_25で初期化したDigitalOutに
@@ -290,7 +369,7 @@
/*******************************************************************************
- SD Card
+ SD Card
*******************************************************************************/
void sd_writetext(char* text);
@@ -353,6 +432,17 @@
void gu_Button_power_on();
void gu_Button_power_off();
//
+/*******************************************************************************
+
+ 表示関数
+
+*******************************************************************************/
+void select_cal(); //CAL選択画面
+void setup_cal_information(char cal_num); //CAL情報登録画面
+void manual_int_hyouji();
+void auto_int_hyouji();
+void disp_setup_cal(char cal_num ,int parameter); //CAL情報登録画面表示
+//
//******************************************************************************
// CAT24M01(EEPROM)
@@ -376,30 +466,12 @@
//
#define caliber_number 50 /* CAL登録数 */
//
-//#define caliber_number 6 /* CAL登録数 */
-//#define addr_calnum 0x20 /* 起動時に選択するCALnumber */
-//#define addr_cal1 0x80 /* CAL.No1の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1 */
-//#define addr_cal2 0x90 /* CAL.No2の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1*/
-//#define addr_cal3 0xA0 /* CAL.No3の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1*/
-//#define addr_cal4 0xB0 /* CAL.No4の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1*/
-//#define addr_cal5 0xC0 /* CAL.No5の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1*/
-//#define addr_cal6 0xD0 /* CAL.No6の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1*/
-//ver1.2.1
-//EEPROM BLOCK2へのアドレッシングは、別で初期8bitも制御する必要がある。
-//#define addr_cal1_2 0x00 /* CAL.No1の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
-//#define addr_cal2_2 0x10 /* CAL.No2の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
-//#define addr_cal3_2 0x20 /* CAL.No3の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
-//#define addr_cal4_2 0x30 /* CAL.No4の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
-//#define addr_cal5_2 0x40 /* CAL.No5の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
-//#define addr_cal6_2 0x50 /* CAL.No6の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
//
-/******************************************************************************/
-
-//******************************************************************************
-//
-/***************************
-LCP1768(EEPROM) addr:15H
-***************************/
+/*******************************************************************************
+
+ LCP1768(EEPROM) addr:15H
+
+*******************************************************************************/
//parameter_PCAS08A(EEPROM)
//const int addr_EEPROM = 0x15 << 3; // Address of PCAS08A(EEPROM) コメント化 ver1.2.1
//char rdata[17]; //EEPROMからのリードデータ
@@ -409,9 +481,21 @@
//const int eeprom_adrs = 0x15 << 3; // Address of PCAS08A(EEPROM) 始めの5bit ver1.2.1
//int slave_adrs; //slave address ver1.2.1
//
-/***************************
-MCP3424(ADC)
-***************************/
+/*******************************************************************************
+
+ MCP3424(ADC)
+
+ RESOLUTION SETTINGS VS. LSB
+ -----------------------------------
+ |Resolution Setting | LSB |
+ -----------------------------------
+ | 12bits(00) | 1mv |
+ | 14bits(01) | 250uV |
+ | 16bits(10) | 62.5uV |
+ | 18bits(11) | 15.625uV |
+ -----------------------------------
+
+*******************************************************************************/
//parameter_ADC(MCP3424)
const int addr_ADC1 = 0x6C <<1;//電圧抵抗測定No.1,No.2用ADC
const int addr_ADC2 = 0x6A <<1;//電圧抵抗測定No.3,No.4用ADC
@@ -424,25 +508,20 @@
void general_call(char com); //power on reset
char adc_config(char ch, char rate);
//
-/***************************
-AD5625RBUZ(DAC) addr:1F
-***************************/
+/*******************************************************************************
+
+ AD5625RBUZ(DAC) addr:1F
+
+*******************************************************************************/
const char addr_dac = 0x1F <<1;
void dac_out(short mvolt, char addr);
void dac_init();
//
-/***************************
-表示
-関数
-***************************/
-void select_cal();//CAL選択画面
-void setup_cal_information(char cal_num);//CAL情報登録画面
-void manual_int_hyouji();
-void auto_int_hyouji();
-/***************************
-測定関係
-関数
-***************************/
+/*******************************************************************************
+
+ 測定関係関数
+
+*******************************************************************************/
void set_pullup();//シーケンサからの入力ピンのプルアップ設定
void trigger();//シーケンサからのスタート信号割込みサブ
void calibration();
@@ -464,40 +543,26 @@
void display_resistor(short sdata);//測定値を表示する。
void led_off();//判定用LED全消灯
void read_syoudo(char* c);//EEPROMから照度データ(PwmDuty)を読み込んでセットする
-
//
-/***************************
-測定関係
-変数
-***************************/
+/*******************************************************************************
+
+ 測定関係 変数
+
+*******************************************************************************/
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];//電流測定値チャンネル毎の
short R[4];//抵抗測定値
short voc[4];//ADC入力値を3倍した値 測定値[mV] 16進数
-short vocp[4];//過充電防止確認用電圧
+short vocp[4];//過充電防止時のHD測定電圧
float iop[4];//2byte 補数あり 測定値 1bit 0.01uA
float ocp[4];//2byte 補数あり 測定値
char ch_num ;//選択中の測定チャネル(0~3)
-/**********************
-暫定
-**********************/
-/*
-#define vss_voc 3600
-#define vss_iop 2800
-#define vss_ocp 3600
-#define wait_vss 4
-#define wait_io 2
-#define low_limit_voc 0xCE4//[mv] HEX
-#define low_limit_iop 0x44C//11uA換算:1100*0.01
-#define low_limit_ocp 0xFFE2//-0.3uA換算
-*/
-
//structure
struct cal_info {
- char name[3]; // CAL NAME ASCII CODE ver3
+ char name[4]; // CAL NAME ASCII CODE ver3
short number; // CAL.No.
short vss_iop; // IOP測定時のVss電圧 1bit * 0.01uA
short vss_ocp; // 過充電防止(over charge protection)測定時のVss電圧
@@ -512,7 +577,7 @@
short up_limit_resistor; // アンテナ抵抗規格 1bit 10Ω
short low_limit_ocp_v; // 過充電防止検査の下限規格[V] ver3
short up_limit_ocp_v; // 過充電防止検査の上限規格[V] ver3
- float wait_voc; // VOC測定前の待機時間[s] 1bit 1s 換算 ver3
+ float wait_voc; // リセット立上りからVOC測定までの待機時間[s] 1bit 1s 換算 ver3
} ;
//parameter
@@ -549,19 +614,12 @@
void set_pullup()
{
/*** ver3 ***/
+ sw_start.mode(PullUp);
+
for (int i = 0; i <= 5; i++){
seq_in[i].mode(PullUp);
}
- /*
- sw_start.mode(PullUp);
- seq_start.mode(PullUp);//シーケンサからのスタート信号
- seq_cal_a.mode(PullUp);
- seq_cal_b.mode(PullUp);
- seq_cal_c.mode(PullUp);
- seq_kosuu_a.mode(PullUp);
- seq_kosuu_b.mode(PullUp);
- */
}
/*******************************
@@ -681,7 +739,7 @@
*******************************************************************************/
void write_caliber_information(cal_info *cal, int num)
{
- char cdata[28]; //1byte*x
+ char cdata[29]; //1byte*x
int adrs_init;
int adrs;
@@ -732,9 +790,9 @@
cdata[25] = calinfo.name[0]; //0x17
cdata[26] = calinfo.name[1]; //0x18
cdata[27] = calinfo.name[2]; //0x19
- //cdata[28] = calinfo.name[3]; //0x1A
-
- Soushin = i2c.write (eeprom_adrs, cdata, 28);
+ cdata[28] = calinfo.name[3]; //0x1A
+
+ Soushin = i2c.write (eeprom_adrs, cdata, 29);
wait(0.2); //ver3
@@ -755,7 +813,7 @@
int i;
int adrs_init;
int adrs;
- char cdata[26];
+ char cdata[27];
adrs_init = ((adrs_calinfo[0] << 8 ) & 0xFF00) + (adrs_calinfo[1] & 0x00FF);
@@ -766,7 +824,7 @@
Soushin = i2c.write (eeprom_adrs, wdata, 2,true); //not set stpo at end
Jyushin = i2c.read ((eeprom_adrs + 0x01), cdata, 1);
- Jyushin = i2c.read ((eeprom_adrs + 0x01), (cdata + 1), 26);//read 27byte
+ Jyushin = i2c.read ((eeprom_adrs + 0x01), (cdata + 1), 27);//read 27byte
/*** ver3.0.0 debug***/
if ( Jyushin != 0 ){
@@ -801,7 +859,7 @@
cal -> name[0] = cdata[23]; //0x17 cal name
cal -> name[1] = cdata[24]; //0x18 cal name
cal -> name[2] = cdata[25]; //0x19 cal name
- //cal -> name[3] = cdata[26]; //0x1A cal name
+ cal -> name[3] = cdata[26]; //0x1A cal name
}
/*******************************************************************************
@@ -895,13 +953,13 @@
return( confreg );
}
-/******************************************
+/*******************************************************************************
ADC(MCP3424) Configuration Register
電流測定チャンネルの選択
char ch : 1~4ch
-******************************************/
+*******************************************************************************/
void select_ich(char ch)
{
char com;
@@ -930,11 +988,35 @@
ADC(MCP3424)
指定addressから2byte読込み
+ ver3.0.0 20ms間隔の5回平均
+
*******************************************************************************/
short read_adc(char addr)//指定addressから2byte読込み
{
char cdata[2];//1byte
short sdata;//2byte
+ //short kekka;
+ //short goukei;
+ //int bosu = 5;
+
+ i2c.read( addr + 0x01, cdata, 2);
+
+ /*
+ for( int i = 0; i < bosu; i++){
+ i2c.read( addr + 0x01, cdata, 2);
+
+ //connect 2byte
+ kekka = cdata[0] & 0xFF;
+ kekka = ( sdata << 8 ) | cdata[1];
+
+ goukei += kekka;
+
+ wait(0.1);
+
+ }
+
+ sdata = goukei / bosu;
+ */
i2c.read( addr + 0x01, cdata, 2);
@@ -1040,6 +1122,23 @@
houden[ ch_num ] = 1; //Discharge
wait(time_discharge); //Discharge time
+
+ /*** ver3.0.0 ***/
+
+ //電圧測定
+ sdata = meas_voltage( ch_num ) * -1 ;
+ gu_fontsize(2);
+ gu_cursor(108,4);
+ gu_putdeck(&sdata);
+ gu_print1("V");
+
+ //抵抗測定
+ sdata = meas_resistor( ch_num );
+ gu_fontsize(2);
+ gu_cursor(192,4);
+ display_resistor( sdata ); //抵抗値表示サブ
+
+ /*****************/
houden[ ch_num ] = 0; //charging
@@ -1079,11 +1178,11 @@
gu_set_button(25,"R");
}
-/*********************************
+/*******************************************************************************
Manual Mode (Main)
-*********************************/
+*******************************************************************************/
void manual()
{
@@ -1124,12 +1223,23 @@
wdata[0] = adc_config( 0, 1 );//ADC3_ch1選択 14bits
i2c.write( addr_ADC3, wdata, 1 );
+ /*** 電源印加 ***/
+
vss = calinfo.vss_iop;
- //apply Vss to all channel
- for ( i = 0; i <= (number_of_channels - 1); i++) {
- dac_out( calinfo.vss_iop,i); //Vss設定 DAC
+ if ( tenken == true ){
+ for ( i = 0; i <= (number_of_channels - 1); i++) {
+ dac_out(0,i);
+ }
+ dac_out( vss,0); //Vss設定 DAC ch.1 ver3.0.0
+ } else {
+ //apply Vss to all channel
+ for ( i = 0; i <= (number_of_channels - 1); i++) {
+ dac_out( vss,i); //Vss設定 DAC
+ }
}
+
+ /**************/
gu_cursor(0,8);
gu_print1("Vss ");
@@ -1155,17 +1265,21 @@
if (cswdata == 0x01) { //タッチしたならば
switch( cswnum ) { //SWの番号(位置)
- case 26:
+ case 26://SW27
//gu_reverse(0x01); //gu_リバース指定
- //gu_button_up(27);//印加電圧増加
+ //gu_button_up(27);
if ( vss < 4500 ) {
vss = vss + 100;
}
- //apply Vss to all channel
- for ( i = 0; i <= (number_of_channels - 1); i++) {
- dac_out( vss,i); //Vss設定 DAC
+ if ( tenken == true ){
+ dac_out( vss,ch_num);
+ } else {
+ //apply Vss to all channel
+ for ( i = 0; i <= (number_of_channels - 1); i++) {
+ dac_out( vss,i); //Vss設定 DAC
+ }
}
gu_reverse(0x00);
@@ -1174,13 +1288,13 @@
gu_putdeck( &sdata );
gu_print1("V");
- //gu_button_up(27);//印加電圧減少
-
- wait(0.1);
+ //gu_button_up(27);
+
+ //wait(0.1);
break;
- case 27:
+ case 27://SW28
//gu_reverse(0x01); //gu_リバース指定
//gu_button_down(28);//印加電圧減少
@@ -1188,9 +1302,13 @@
vss = vss - 100;
}
- //apply Vss to all channel
- for ( i = 0; i <= (number_of_channels - 1); i++) {
- dac_out( vss,i); //Vss設定 DAC
+ if ( tenken == true ){
+ dac_out( vss,ch_num);
+ } else {
+ //apply Vss to all channel
+ for ( i = 0; i <= (number_of_channels - 1); i++) {
+ dac_out( vss,i); //Vss設定 DAC
+ }
}
//gu_reverse(0x00); //gu_リバース指定
@@ -1201,7 +1319,7 @@
//gu_button_down(28);//印加電圧減少
- wait(0.1);
+ //wait(0.1);
break;
@@ -1223,14 +1341,20 @@
houden[i] = 0;//not discharge
}
+ /*** ver 3.0.0 ****************************************/
+ for ( i = 0; i <= (number_of_channels - 1); i++) {
+ dac_out(0,i); //Vss設定 DAC
+ }
+ /******************************************************/
+
wait(0.2);
- for ( i = 0; i <= 7; i++)
+ for ( i = 0; i <= 15; i++)
io[i] = 0; //全てのio"L"
return;//この関数を抜ける
- case 0x18 ://sw25 mv_reset
+ case 0x18 ://sw25 reset DUT
//gu_リバース指定
gu_reverse(0x01);
@@ -1242,7 +1366,7 @@
gu_reverse(0x00); //gu_リバース解除
gu_set_button(25,"R"); //Show Reset button(Left)
- io[ch_num] = 1;
+ io_reset[ch_num] = 1;//ver3.0.0 R="H"
//set measuring range ver1.1.0
for( i = 0; i <= 3; i++)
@@ -1266,7 +1390,7 @@
} else {
ch_num = 0;
} //ver1.1.0
-
+
select_ich(ch_num);//ADC測定CHの変更
//set measuring range
@@ -1275,6 +1399,18 @@
range[ch_num] = 1; //range 10uA
+ if ( tenken == true ){
+ for ( i = 0; i <= (number_of_channels - 1); i++) {
+ dac_out(0,i); //Vss設定 DAC
+ }
+ dac_out( vss,ch_num);
+ } else {
+ //apply Vss to all channel
+ for ( i = 0; i <= (number_of_channels - 1); i++) {
+ dac_out( vss,i); //Vss設定 DAC
+ }
+ }
+
//選択測定チャンネルの表示
gu_cursor(24, 2);
wdata[0] = ( ch_num + 1 ) + 0x30;
@@ -1286,45 +1422,15 @@
break;
- /*
- case 0x1F ://sw32 CH選択
-
- //gu_reverse(0x01);//gu_リバース指定
- //gu_button_down(32);
- //gu_reverse(0x00);//gu_リバース解除
-
- if ( ch_num >= 1 )
- ch_num = ch_num - 1;
-
- select_ich(ch_num);//ADC測定CHの変更
-
- //set measuring range
- for( i = 0; i <= 3; i++)
- range[i] = 0;
-
- range[ ch_num ] = 1; //range 10uA
-
- //選択測定チャンネルの表示
- gu_cursor(24, 2);
- wdata[0] =( ch_num + 1 ) + 0x30;
- i2c.write( addr_gu, wdata, 1);
-
- //gu_button_down(32);
-
- wait(0.1);
-
- break;
- */
-
} //switch
Jyushin = i2c.read ((addr_gu + 0x01), crdata, 3, true);
}//if
}//if
- //ver1.1.0 0.1s*5(jの値)=0.5s待機後(プラスリレー制御時間)に電流測定用タイマー始動
- if ( j >= 5 ) {
- io[ch_num] = 0;
+ //ver1.1.0 0.1s*10(jの値)=1s待機後(プラスリレー制御時間)に電流測定用タイマー始動
+ if ( j >= 10 ) {
+ io_reset[ch_num] = 0; // R = "OPEN"
range[ ch_num ] = 1; //range 10uA
r_flag = 0;
j = 0;
@@ -1345,35 +1451,9 @@
gu_putdeci_mA(&ima);
}
+ /*
//電圧測定
- //ver1.2.0
- /*** ver3.0.0 ***
- if (RL_EN == 1) {
- switch (ch_num) {
- case 0:
- io[4] = 1; //外付けリレーON
- wait(TIME_RELAY_ON);
- break;
- case 1:
- io[5] = 1; //外付けリレーON
- wait(TIME_RELAY_ON);
- break;
- }
- }
- //up to here
- */
-
sdata = meas_voltage( ch_num ) * -1 ;
-
- /*** ver3.0.0 ***
- //ver1.2.0
- if (RL_EN == 1) {
- io[4] = 0; //外付けリレーOFF
- io[5] = 0; //外付けリレーOFF
- }
- //up to here
- */
-
gu_fontsize(2);
gu_cursor(108,4);
gu_putdeck(&sdata);
@@ -1381,11 +1461,10 @@
//抵抗測定
sdata = meas_resistor( ch_num );
-
gu_fontsize(2);
gu_cursor(192,4);
-
display_resistor( sdata ); //抵抗値表示サブ
+ */
wait( 0.1 );
@@ -1679,7 +1758,7 @@
gu_print1(" CAL.");
//gu_print1(calinfo.name);
- i2c.write(addr_gu, calinfo.name, 3); //3byte ascii code
+ i2c.write(addr_gu, calinfo.name, 4); //4byte ascii code
gu_cursor(0,3);
gu_print1("Vss(Iop) =");
@@ -1769,187 +1848,173 @@
char calnum; //選択したCALナンバー
int digit = 0 ; //CAL番号 10の位の値 0~4
-
- calnum = 0; //initial
-
- gu_cls(); //GU-D 画面クリア
+ bool redraw ; //再描画
read_regnum();//EEPROMに保存した選択CAL_NO.の読み出し
- show_info(reg_num);
-
- gu_fontsize(2); //change fontsize
- gu_cursor(0,0);
- //ver3.0.0
- //gu_print1("Select CAL.");
- gu_print1("CONFIG");
+ while(1){//ver3
+
+ redraw = false;
+
+ calnum = 0; //initial
+
+ gu_cls(); //GU-D 画面クリア
+
+ show_info(reg_num);
+
+ gu_fontsize(2); //change fontsize
+ gu_cursor(0,0);
+ //ver3.0.0
+ //gu_print1("Select CAL.");
+ gu_print1("CONFIG");
+
+ //Set Button init ver3.0.0
+ redraw_sw(calnum,0);
+
+ gu_set_button_font1(7,"slct");
+ gu_set_button_font1(8,"set");
+
+ gu_button_up(24);
+ gu_button_down(32);
+
+ while(1) {
+ //タッチスイッチ読み出し
+ i2c.read ((addr_gu + 0x01), crdata, 3, true);
+
+ if (crdata[0] == 0x11 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。
+ *pcswnum = crdata[1]; //スイッチ番号
+ *pcswdata = crdata[2];//ON/OFF情報
- //Set Button init ver3.0.0
- redraw_sw(calnum,0);
- /*
- gu_set_button(17,"1");
- gu_set_button(18,"2");
- gu_set_button(19,"3");
- gu_set_button(20,"4");
- gu_set_button(21,"5");
- gu_set_button(24,"6");
- gu_set_button(25,"7");
- gu_set_button(26,"8");
- gu_set_button(27,"9");
- gu_set_button(28,"10");
- */
-
- gu_set_button_font1(7,"slct");
- gu_set_button_font1(8,"set");
+ if (cswdata == 0x01) { //タッチしたならば
+ switch( cswnum ) { //SWの番号(位置)
+
+ case 23: //SW24 page up
+
+ if ( digit <= 3 ){
+ digit += 1;
+ } else if ( digit == 4 ){
+ digit = 0;
+ }
+
+ redraw_sw(digit,0);
+
+ //calnum = digit * 10 + 1;
+ //show_info(calnum);
+
+ break;
+
+ case 31: //SW32 page down
+
+ if ( digit >= 1 ){
+ digit -= 1;
+ } else if ( digit == 0 ) {
+ digit = 4;
+ }
+
+ redraw_sw(digit,0);
+
+ //calnum = digit * 10 + 1;
+ //show_info(calnum);
+
+ break;
+
+ case 16: //SW17
+ case 17: //SW18
+ case 18: //SW19
+ case 19: //SW20
+ case 20: //SW21
+
+ calnum = cswnum - 15 + (digit*10);
+
+ redraw_sw(digit,cswnum + 1);
+
+ show_info(calnum);
+
+ break;
- gu_button_up(24);
- gu_button_down(32);
-
- while(1) {
- //タッチスイッチ読み出し
- i2c.read ((addr_gu + 0x01), crdata, 3, true);
-
- if (crdata[0] == 0x11 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。
- *pcswnum = crdata[1]; //スイッチ番号
- *pcswdata = crdata[2];//ON/OFF情報
-
- if (cswdata == 0x01) { //タッチしたならば
- switch( cswnum ) { //SWの番号(位置)
-
- case 23: //SW24
-
- if ( digit <= 3 ){
- digit += 1;
- } else if ( digit == 4 ){
- digit = 0;
- }
-
- redraw_sw(digit,17);
-
- calnum = digit * 10 + 1;
- show_info(calnum);
-
- break;
-
- case 31: //SW32
-
- if ( digit >= 1 ){
- digit -= 1;
- } else if ( digit == 0 ) {
- digit = 4;
- }
-
- redraw_sw(digit,17);
-
- calnum = digit * 10 + 1;
- show_info(calnum);
-
- break;
-
- case 16: //SW17
- case 17: //SW18
- case 18: //SW19
- case 19: //SW20
- case 20: //SW21
-
- calnum = cswnum - 15 + (digit*10);
-
- redraw_sw(digit,cswnum + 1);
-
- show_info(calnum);
-
- break;
-
- case 24: //SW25
- case 25: //SW26
- case 26:
- case 27:
-
-
- calnum = cswnum - 18 + (digit*10);
-
- redraw_sw(digit,cswnum + 1);
-
- show_info(calnum);
-
- break;
-
- case 28: //SW29
-
- calnum = ((digit + 1 )*10);
-
- redraw_sw(digit,cswnum + 1);
-
- show_info(calnum);
-
- break;
-
- case 0x06: //SW7 ”slct"(CAL選択)ボタン
-
- if ( calnum >= 1 && calnum <=6 ) {
- reg_num = calnum;
-
- //ver3 EEPROM書込み Byte Write
- wdata[0] = adrs_calnum[0]; //byte address a15~8
- wdata[1] = adrs_calnum[1]; //byte address a7~a0
- wdata[2] = reg_num;
- Soushin = i2c.write (eeprom_adrs, wdata, 3); //send stop at end default value is false.
-
- //GU-D
- gu_reverse(0x01); //gu_リバース指定
- gu_set_button_font1(7,"slct");
- wait(0.2);
- gu_reverse(0x00); //gu_リバース解除
-
- read_caliber(&calinfo,reg_num);
-
- return;
-
- } else if( calnum == 0 ) {
- //CALNo.選択しなければ、何もしないでこのサブを抜ける
- gu_reverse(0x01); //gu_リバース指定
- gu_set_button_font1(7,"slct");
- wait(0.2);
- gu_reverse(0x00); //gu_リバース解除
- return;
- }
-
- break;
-
- case 0x07: //SW8 "set"ボタン
-
- if ( calnum >= 1 && calnum <= 50 ) {
- gu_reverse(0x01); //gu_リバース指定
- gu_set_button_font1(8,"set");
- wait(0.2);
- gu_reverse(0x00); //gu_リバース解除
-
- setup_cal_information(calnum);//CAL情報登録画面へ
-
- //return; ver3.0.0 remove
- }
- break;
-
- /*ver1.1.0
- case 0x1F: //SW32
-
- gu_reverse(0x01); //gu_リバース指定
- gu_set_button_font1(32,"del");
- gu_reverse(0x00); //gu_リバース解除
-
- erace_calinfo();
-
- gu_set_button_font1(32,"del");
-
+ case 24: //SW25
+ case 25: //SW26
+ case 26:
+ case 27:
+
+
+ calnum = cswnum - 18 + (digit*10);
+
+ redraw_sw(digit,cswnum + 1);
+
+ show_info(calnum);
+
+ break;
+
+ case 28: //SW29
+
+ calnum = ((digit + 1 )*10);
+
+ redraw_sw(digit,cswnum + 1);
+
+ show_info(calnum);
+
break;
- */
-
- } //switch
-
- }//if(cswdata == 0x01) {
- } //if(crdata[0] == 0x11 ) {
- wait(0.1);//タッチスイッチ入力読み出し間隔
- } //while(1)
+
+ case 0x06: //SW7 ”slct"(CAL選択)ボタン
+
+ if ( calnum >= 1 && calnum <=6 ) {
+ reg_num = calnum;
+
+ //ver3 EEPROM書込み Byte Write
+ wdata[0] = adrs_calnum[0]; //byte address a15~8
+ wdata[1] = adrs_calnum[1]; //byte address a7~a0
+ wdata[2] = reg_num;
+ Soushin = i2c.write (eeprom_adrs, wdata, 3); //send stop at end default value is false.
+
+ //GU-D
+ gu_reverse(0x01); //gu_リバース指定
+ gu_set_button_font1(7,"slct");
+ wait(0.2);
+ gu_reverse(0x00); //gu_リバース解除
+
+ read_caliber(&calinfo,reg_num);
+
+ return;
+
+ } else if( calnum == 0 ) {
+ //CALNo.選択しなければ、何もしないでこのサブを抜ける
+ gu_reverse(0x01); //gu_リバース指定
+ gu_set_button_font1(7,"slct");
+ wait(0.2);
+ gu_reverse(0x00); //gu_リバース解除
+ return;
+ }
+
+ break;
+
+ case 0x07: //SW8 "set"ボタン
+
+ if ( calnum >= 1 && calnum <= 50 ) {
+ gu_reverse(0x01); //gu_リバース指定
+ gu_set_button_font1(8,"set");
+ wait(0.2);
+ gu_reverse(0x00); //gu_リバース解除
+
+ setup_cal_information(calnum);//CAL情報登録画面へ
+
+ //return;
+ redraw = true;
+ }
+ break;
+
+ } //switch
+
+ if (redraw){
+ break; //exit while
+ }
+
+ }//if(cswdata == 0x01) {
+ } //if(crdata[0] == 0x11 ) {
+ wait(0.1);//タッチスイッチ入力読み出し間隔
+ } //while(1)
+
+ }
}
/*******************************************************************************
@@ -1990,105 +2055,31 @@
/
*******************************************************************************/
-void hyouji_cal_param(char x)
+void hyouji_cal_param(int x)
{
gu_fontsize(2);
gu_cursor(0,4);
gu_print1(" ");
-
- switch ( x ) {
- case 0:
- gu_cursor(0,4);
- gu_print1("Vss(Iop)");
- gu_cursor(208,4);
- gu_print1("[V]");
- break;
- case 1:
- gu_cursor(0,4);
- gu_print1("Vss(O.C.P)");
- gu_cursor(208,4);
- gu_print1("[V]");
- break;
- case 2:
- gu_cursor(0,4);
- gu_print1("Vss(Voc)");
- gu_cursor(208,4);
- gu_print1("[V]");
- break;
- case 3:
- gu_cursor(0,4);
- gu_print1("low limit(Voc)");
- gu_cursor(208,4);
- gu_print1("[V]");
- break;
- case 4:
- gu_cursor(0,4);
- gu_print1("low limit(Iop)");
- gu_cursor(208,4);
- gu_print1("[uA]");
- break;
- case 5:
- gu_cursor(0,4);
- gu_print1("low limit(O.C.P)");
- gu_cursor(208,4);
- gu_print1("[uA]");
- break;
- case 6:
- gu_cursor(0,4);
- gu_print1("up limit(O.C.P)");
- gu_cursor(208,4);
- gu_print1("[uA]");
- break;
- case 7:
- gu_cursor(0,4);
- gu_print1("low limit(O.C.P)");
- gu_cursor(208,4);
- gu_print1("[V]");
- break;
- case 8:
- gu_cursor(0,4);
- gu_print1("up limit(O.C.P)");
- gu_cursor(208,4);
- gu_print1("[V]");
- break;
- case 9:
- gu_cursor(0,4);
- gu_print1("Wait(Iop)");
- gu_cursor(208,4);
- gu_print1("[s]");
- break;
- case 10:
- gu_cursor(0,4);
- gu_print1("Wait(O.C.P)");
- gu_cursor(208,4);
- gu_print1("[s]");
- break;
- case 11:
- gu_cursor(0,4);
- gu_print1("Wait(Voc)");
- gu_cursor(208,4);
- gu_print1("[s]");
- break;
- case 12:
- gu_cursor(0,4);
- gu_print1("low limit(ohm)");
- gu_cursor(208,4);
- wdata[0] = 0xEA; //Ω
- i2c.write( addr_gu, wdata, 1);
- break;
- case 13:
- gu_cursor(0,4);
- gu_print1("up limit(ohm)");
- gu_cursor(208,4);
- wdata[0] = 0xEA; //Ω
- i2c.write( addr_gu, wdata, 1);
- break;
- case 14:
- gu_cursor(0,4);
- gu_print1("CAL NAME");
- //gu_cursor(208,4);
- break;
+ gu_cursor(0,6);
+ gu_print1(" ");
+
+ gu_fontsize(2);
+ gu_cursor(zahyou_para1[0],zahyou_para1[1]);
+ gu_print1(cpara1[x]);
+ gu_fontsize(2);
+ gu_cursor(zahyou_para2[0],zahyou_para2[1]);
+ gu_print1(cpara2[x]);
+
+ gu_fontsize(2);
+ gu_cursor(zahyou_unit[0],zahyou_unit[1]);
+
+ if ( x == 12 || x == 13 ){
+ wdata[0] = 0xEA; //Ω
+ i2c.write( addr_gu, wdata, 1);
+ } else {
+ gu_print1(cunit[x]);
}
+
}
/*******************************************************************************
@@ -2101,7 +2092,7 @@
*******************************************************************************/
/*** 加算 ***/
-void increase_param(char para, signed short *sdata, short inc)
+void increase_param(int para, signed short *sdata, short inc)
{
switch ( para ) { //パラメータの項目によって上限値異なる
case 0://vss_iop
@@ -2142,7 +2133,7 @@
}
/*** 減算 ***/
-void decrease_param(char para, signed short *sdata, short dec)
+void decrease_param(int para, signed short *sdata, short dec)
{
switch ( para ) { //パラメータの項目によって上限値異なる
case 0://vss_iop
@@ -2225,7 +2216,119 @@
}
}
-
+/*******************************************************************************
+
+ CAL情報登録画面 表示
+
+ ****** Swich matrix ******
+ 01,02,03,04,05,06,07,08,
+ 09,10,11,12,13,14,15,16,
+ 17,18,19,20,21,22,23,24,
+ 25,26,27,28,29,30,31,32,
+ ***************************
+
+*******************************************************************************/
+void disp_setup_cal(char cal_num , int parameter){
+
+ char wdata[2];
+
+ gu_cls();//clear dispray
+ gu_fontsize(1);
+ gu_print1("SETUP No.");
+ wdata[0] = ( cal_num / 10 ) + 0x30;//ver3.0.0
+ wdata[1] = ( cal_num % 10 ) + 0x30;//show caliber number
+ i2c.write(addr_gu, wdata, 2);
+
+ if( parameter == 14 ){
+ gu_button_up(sw_up_set[3]);
+ gu_button_down(sw_down_set[3]);
+ }
+
+ gu_set_button_font1(7,"esc");
+ gu_set_button_font1(8,"save");
+ gu_button_up(17);
+ gu_button_down(25);
+ gu_button_up(sw_up_set[0]);
+ gu_button_up(sw_up_set[1]);
+ gu_button_up(sw_up_set[2]);
+ gu_button_down(sw_down_set[0]);
+ gu_button_down(sw_down_set[1]);
+ gu_button_down(sw_down_set[2]);
+
+ hyouji_cal_param(parameter);
+
+}
+
+
+/*******************************************************************************
+
+ PASS WORD 画面
+
+*******************************************************************************/
+void pw(int* pflag){
+
+ char crdata[3];//GUDからの受信データ
+ char strnum[2];
+ char basho = 0;
+ char word[YOSO];
+ char c[2];//GU-D SW 表示文字
+ int j = 0;
+
+ gu_cls();//clear dispray
+
+ strnum[1] = 0;//NULL
+ c[1]=0;//NULL
+
+ for ( int i = 0; i <=25; i++ ){
+ strnum[0] = i + 0x41;
+ gu_set_button( (basho + 1 ) ,strnum);
+ basho = basho + 1;
+ }
+
+ wait(0.2);
+
+ int i = 0;
+
+ while(1) {
+
+ i2c.read ((addr_gu + 0x01), crdata, 3, true);
+
+ if (crdata[0] == 0x11 && crdata[2] == 0x01 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。&& タッチしたならば
+
+ word[j] = crdata[1] + 0x41;
+ c[0] = word[j];
+
+ gu_reverse(1);
+ gu_set_button( (crdata[1] + 1 ) ,c);
+ gu_reverse(0);
+
+ j = j + 1;
+
+ }
+
+ if ( j == YOSO ){
+
+ while (1){
+ if ( word[i] != pass[i] ){
+ *pflag = 1;
+ break;
+ }
+ if (i == ( YOSO - 1) ){
+ break;
+ }
+
+ i += 1;
+ }
+
+ wait(0.5);
+ return;
+
+ }//if
+
+ wait(0.2);
+
+ }//while
+}
/*******************************************************************************
CAL情報登録画面 MAIN
@@ -2253,27 +2356,26 @@
*******************************************************************************/
void setup_cal_information(char cal_num)
{
- char param; //設定するパラメータの選択 0~9まで ver1.2.1 0~10まで
- char crdata[3];
+ int param; //設定するパラメータの選択
+ char crdata[3]; //GU-Dからの受信DATA 3byte
signed short sdata_cal[18]; //CAL設定条件
signed short hyouji_data;
- int param_sum; //設定するパラメータの数 ver1.2.1
- char c_temp[3]; //CAL設定条件 calinfo.name
+ int param_sum = 14; //パラメータの最大設定数
+ char c_temp[4]; //CAL名設定条件 calinfo.name
//int i;
//short sdata_byte[16]; //EEPROM BYTEごとのDATA 1byte
//char cmd_gu[32]; //gu-DへのI2Cコマンド用配列 1byte0
//char adrs_cal; //EEPROM CAL情報を保存しているアドレス 0x90~
-
- param_sum = 14; //ver3.0.0 //11; //ver1.2.1
-
- //画面表示
- gu_cls();//画面クリア
- gu_fontsize(2);
- gu_print1("Setup Cal No.");
- wdata[0] = ( cal_num % 10 ) + 0x30;//CALナンバーの表示
- i2c.write(addr_gu, wdata, 1);
-
- //CAL情報読込
+
+ int pwflag = 0;
+
+ pw(&pwflag);
+
+ if ( pwflag != 0 ){
+ return;
+ }
+
+ //Load caliber information
read_caliber(&calinfo,cal_num);
sdata_cal[0] = calinfo.vss_iop;
@@ -2294,26 +2396,11 @@
c_temp[0] = calinfo.name[0];
c_temp[1] = calinfo.name[1];
c_temp[2] = calinfo.name[2];
-
- //ボタンの配置
- gu_set_button_font1(7,"esc"); //ver3.0.0 add
- gu_set_button_font1(8,"save");
- gu_button_up(17);
- gu_button_down(25);
- gu_button_up(20);
- gu_button_up(22);
- gu_button_up(24);
- gu_button_down(28);
- gu_button_down(30);
- gu_button_down(32);
-
- //初期表示はVss_Iop
- param = 0;
- gu_cursor(0,4);
- gu_fontsize(2);
- gu_print1("Vss(Iop)");
- gu_cursor(208,4);
- gu_print1("V");
+ c_temp[3] = calinfo.name[3];
+
+ //初期表示はCAL名設定
+ param = 14;
+ disp_setup_cal(cal_num,param);
while(1) {
i2c.read ((addr_gu + 0x01), crdata, 3, true);
@@ -2322,160 +2409,192 @@
//cswnum = crdata[1]; //スイッチ番号
//cswdata = crdata[2];//ON/OFF情報
- switch( crdata[1] ) { //SWの番号(位置)
-
- case 0x10 ://sw17 パラメータ変更スイッチ(上)
-
- if ( param <= param_sum -1 ) {
- param = param + 1;
- } else {
- param = 0;
- }
-
- hyouji_cal_param(param);//設定パラメータ表示
- break;
-
- case 0x18 ://sw25 パラメータ変更スイッチ(下)
-
- if ( param >= 1 ) {
- param = param - 1;
- } else {
- param = param_sum;
- }
-
- hyouji_cal_param(param);//設定パラメータ表示
- break;
-
- case 19 ://SW20 increase 0x3E8
-
- // if set caliber name .. ver3
- if ( param == 14 ){
- up_ascii(&c_temp[0]);
- } else {
- increase_param(param, &sdata_cal[param], 1000);
- }
- break;
-
- case 27 ://SW28 decrease 0x3E8
-
- if ( param == 14 ){
- down_ascii(&c_temp[0]);
- } else {
- decrease_param(param, &sdata_cal[param], 1000);
- }
- break;
-
- case 0x15 ://SW22 increase 0x64
-
- if ( param == 14 ){
- up_ascii(&c_temp[1]);
- } else {
- increase_param(param, &sdata_cal[param], 100);
- }
- break;
-
- case 0x1D ://SW30 decrease 0x64
-
- if ( param == 14 ){
- down_ascii(&c_temp[1]);
- } else {
- decrease_param(param, &sdata_cal[param], 100);
- }
- break;
-
- case 23 ://SW24 increase 0x0A
-
- if ( param == 14 ){
- up_ascii(&c_temp[2]);
- } else {
- increase_param(param, &sdata_cal[param], 10);
- }
- break;
-
- case 31 ://SW32 decrease 0x0A
-
- if ( param == 14 ){
- down_ascii(&c_temp[2]);
- } else {
- decrease_param(param, &sdata_cal[param], 10);
- }
- break;
-
- case 6: //SW7 "esc"ボタン
-
- return; //何もせずに抜ける
-
- case 0x07 : //SW8 "save"保存ボタン
+ //タッチしたSWの番号(位置)による分岐
+
+ //sw17 パラメータ変更スイッチ(上)
+ if ( crdata[1] == 16 ){
+
+ if ( param <= param_sum -1 ) {
+ param = param + 1;
+ } else {
+ param = 0;
+ }
+
+ disp_setup_cal(cal_num,param);
+ //hyouji_cal_param(param);//設定パラメータ表示
+
+ }
+
+ //case 0x18 ://sw25 パラメータ変更スイッチ(下)
+ if ( crdata[1] == 24 ){
+
+ if ( param >= 1 ) {
+ param = param - 1;
+ } else {
+ param = param_sum;
+ }
+
+ disp_setup_cal(cal_num,param);
+ //hyouji_cal_param(param);//設定パラメータ表示
- //ver3 CAL情報 代入
- //*** ver3 ***
- calinfo.vss_iop = sdata_cal[0];
- calinfo.vss_ocp = sdata_cal[1];
- calinfo.vss_voc = sdata_cal[2];
- calinfo.low_limit_voc = sdata_cal[3];
- calinfo.low_limit_iop = sdata_cal[4];
- calinfo.low_limit_ocp = sdata_cal[5];
- calinfo.up_limit_ocp = sdata_cal[6];
- calinfo.up_limit_ocp_v = sdata_cal[7];
- calinfo.low_limit_ocp_v = sdata_cal[8];
- calinfo.wait_iop = sdata_cal[9];
- calinfo.wait_ocp = sdata_cal[10];
- calinfo.wait_voc = sdata_cal[11];
- calinfo.low_limit_resistor = sdata_cal[12];
- calinfo.up_limit_resistor = sdata_cal[13];
-
- calinfo.name[0] = c_temp[0];
- calinfo.name[1] = c_temp[1];
- calinfo.name[2] = c_temp[2];
-
- //ver3 Byte Write CALNO.EEPROM 書込み
- reg_num = cal_num;
- wdata[0] = adrs_calnum[0];
- wdata[1] = adrs_calnum[1];
- wdata[2] = reg_num;
-
- Soushin = i2c.write (eeprom_adrs, wdata, 3); //send stop at end
+ }
+
+ if ( crdata[1] == (sw_up_set[0] - 1)){ //increase
+
+ // if set caliber name .. ver3
+ if ( param == 14 ){
+ up_ascii(&c_temp[0]);
+ } else {
+ increase_param(param, &sdata_cal[param], 1000);
+ }
+ }
+
+ if ( crdata[1] == (sw_up_set[1] - 1)){ //increase
+
+ if ( param == 14 ){
+ up_ascii(&c_temp[1]);
+ } else {
+ increase_param(param, &sdata_cal[param], 100);
+ }
+ }
+
+ if ( crdata[1] == (sw_up_set[2] - 1)){ //SW** increase
+
+ if ( param == 14 ){
+ up_ascii(&c_temp[2]);
+ } else {
+ increase_param(param, &sdata_cal[param], 10);
+ }
+ }
+
+ if ( crdata[1] == (sw_up_set[3] - 1)){ //SW** increase CAL名設定時に使用する
+
+ if ( param == 14 ){
+ up_ascii(&c_temp[3]);
+ }
+ }
+
+ if ( crdata[1] == (sw_down_set[0] - 1)){ //SW** decrease
+
+ if ( param == 14 ){
+ down_ascii(&c_temp[0]);
+ } else {
+ decrease_param(param, &sdata_cal[param], 1000);
+ }
+ }
+
+ if ( crdata[1] == (sw_down_set[1] - 1)){ //SW** decrease
+
+ if ( param == 14 ){
+ down_ascii(&c_temp[1]);
+ } else {
+ decrease_param(param, &sdata_cal[param], 100);
+ }
+ }
+
+ if ( crdata[1] == (sw_down_set[2] - 1)){ //SW** decrease
+
+ if ( param == 14 ){
+ down_ascii(&c_temp[2]);
+ } else {
+ decrease_param(param, &sdata_cal[param], 10);
+ }
+ }
+
+ if ( crdata[1] == (sw_down_set[3] - 1)){ //SW** decrease
+
+ if ( param == 14 ){
+ down_ascii(&c_temp[3]);
+ }
+ }
+
+ if ( crdata[1] == 6 ){ //SW7 "esc"ボタン
+
+ gu_reverse(1);
+ gu_set_button_font1(7,"esc");
+ wait(0.2);
+ gu_reverse(0);//ver3
+
+ return; //何もせずに抜ける
+ }
+
+ if ( crdata[1] == 7 ){ //SW8 "save"保存ボタン
+
+ //ver3 CAL情報 代入
+ //*** ver3 ***
+ calinfo.vss_iop = sdata_cal[0];
+ calinfo.vss_ocp = sdata_cal[1];
+ calinfo.vss_voc = sdata_cal[2];
+ calinfo.low_limit_voc = sdata_cal[3];
+ calinfo.low_limit_iop = sdata_cal[4];
+ calinfo.low_limit_ocp = sdata_cal[5];
+ calinfo.up_limit_ocp = sdata_cal[6];
+ calinfo.up_limit_ocp_v = sdata_cal[7];
+ calinfo.low_limit_ocp_v = sdata_cal[8];
+ calinfo.wait_iop = sdata_cal[9];
+ calinfo.wait_ocp = sdata_cal[10];
+ calinfo.wait_voc = sdata_cal[11];
+ calinfo.low_limit_resistor = sdata_cal[12];
+ calinfo.up_limit_resistor = sdata_cal[13];
+
+ calinfo.name[0] = c_temp[0];
+ calinfo.name[1] = c_temp[1];
+ calinfo.name[2] = c_temp[2];
+ calinfo.name[3] = c_temp[3];
+
+ /*ver3 Byte Write CALNO.EEPROM 書込み
+ reg_num = cal_num;
+ wdata[0] = adrs_calnum[0];
+ wdata[1] = adrs_calnum[1];
+ wdata[2] = reg_num;
+
+ Soushin = i2c.write (eeprom_adrs, wdata, 3); //send stop at end
+ wait(0.2);
+ */
+
+ /*** ver3 ***
+ //CAL情報 >> EEPROM
+ //送信完了ならば実行
+ if(Soushin == 0) {
+
+ write_caliber_information(&calinfo, cal_num);
+
+ //ver1.2.3
+ } else {
+ gu_fontsize(1);
+ gu_cursor(0,2);
+ gu_print1("can not save cal no");
+ wait(2);
+ return;
+ }
+ ***/
+
+ /*** ver3 ***/
+ write_caliber_information(&calinfo, cal_num);
+
+ //送信完了ならば実行
+ if(Soushin == 0) {
+ gu_reverse(1);
+ gu_set_button_font1(8,"save");
wait(0.2);
-
- //CAL情報 >> EEPROM
- //送信完了ならば実行
- if(Soushin == 0) {
-
- write_caliber_information(&calinfo, cal_num);
-
- //ver1.2.3
- } else {
- gu_fontsize(1);
- gu_cursor(0,2);
- gu_print1("can not save cal no");
- wait(2);
- return;
- }
-
- //送信完了ならば実行
- if(Soushin == 0) {
- gu_reverse(1);
- gu_set_button_font1(8,"save");
- wait(0.2);
- return;//CAL情報登録画面を抜ける
-
- //ver1.2.3
- } else {
- gu_fontsize(1);
- gu_cursor(0,2);
- gu_print1("can not save cal information");
- wait(2);
- return;
- }
-
- //break;
-
- } //switch
- } //if
+ gu_reverse(0);//ver3
+ return;//CAL情報登録画面を抜ける
+
+ //ver1.2.3
+ } else {
+ gu_fontsize(1);
+ gu_cursor(0,2);
+ gu_print1("can not save cal information");
+ wait(2);
+ return;
+ }
+
+ }//end if
+ }//end if
//gu-D表示 ver3
-
- gu_cursor(150,4); //表示位置の指定
+ gu_fontsize(2);
+ gu_cursor(zahyou_val[0],zahyou_val[1]); //表示位置の指定
switch ( param ) {
case 0://vss_iop
@@ -2510,24 +2629,10 @@
break;
case 14: //cal name ver3
- i2c.write(addr_gu, c_temp, 3); //3byte ascii code
+ i2c.write(addr_gu, c_temp, 4); //3byte ascii code
break;
- /*
- case 6:
- case 7:
- //ver1.1.0
- hyouji_data = sdata_cal[param];
- gu_putdec ( &hyouji_data );
- break;
- case 8://low_limit_resistor
- case 9://up_limit_resistor
- hyouji_data = sdata_cal[param];
- gu_putdec ( &hyouji_data );
- break;
- */
- //ver1.2.2 uptohere
-
- }
+
+ }//swith
wait(0.1);//gu-D 読込間隔の設定
}//while
}
@@ -2881,13 +2986,13 @@
}
-/*********************************
+/*******************************************************************************
Auto Mode/SEQ Mode (sub)
自動測定
char noc -> 総測定数 1~4
-*********************************/
+*******************************************************************************/
void auto_meas(char noc)
{
int x[4] = {0,0,128,128}; //GU_D x座標 4個測定時の表示スタート位置
@@ -2922,16 +3027,15 @@
wait( wait_poweron );//パワーブレイク復帰待機?
- //Reset CAL
+ //Reset DUT
for ( i = 0; i <= ( noc -1 ); i++) {
- io[i] = 1; //io1 = "H"
+ io_reset[i] = 1; //R = VDD
}
- wait(time_reset); //ver1.1.3
- //wait(0.2);
+ wait(time_reset);
for ( i = 0; i <= ( noc -1 ); i++) {
- io[i] = 0; //io1 = "L"
+ io_reset[i] = 0; //R = "OPEN"
}
//抵抗測定
@@ -3041,40 +3145,20 @@
wait( wait_voc_1 );
+ //Reset DUT
for ( i = 0; i <= ( noc -1 ); i++) {
- io[i] = 1; //io1 = "H"
+ io_reset[i] = 1; //R = VDD
}
- wait( wait_reset );
+ wait( calinfo.wait_voc );//ver3
for ( i = 0; i <= ( noc -1 ); i++ ) {
- //ver1.2.0
- if (RL_EN == 1) {
- switch (i) {
- case 0:
- io[4] = 1; //外付けリレーON
- wait(TIME_RELAY_ON);
- case 1:
- io[5] = 1; //外付けリレーON
- wait(TIME_RELAY_ON);
- }
- }
- //up to here ver1.2.0
-
voc[i] = meas_voltage(i);
sdata[i] = voc[i] * -1;
- //ver1.2.0
- if (RL_EN == 1) {
- io[4] = 0; //外付けリレーOFF
- io[5] = 0; //外付けリレーOFF
- wait(TIME_RELAY_OFF);
- }
- //up to here
}
-
//display GU_D
if ( number_of_channels <= 2 ) { //2個測定の時の表示
gu_cursor(0, iy + 8 );//IOP測定値表示位置指定
@@ -3097,7 +3181,7 @@
//R = "L"
for ( i = 0; i <= ( noc -1 ); i++) {
- io[i] = 0; //io1 = "L"
+ io_reset[i] = 0; //R = "OPEN"
}
wait(0.1);
@@ -3661,7 +3745,7 @@
switch(ch) {
case 0:
- /*** v3 debag *************/
+ /*** ver3 *****************/
rlen[4] = 1; //RLEN5="H"
wait(ton_rr);
/**************************/
@@ -3674,7 +3758,7 @@
case 1:
- /*** v3 debag *************/
+ /*** ver3 *****************/
rlen[5] = 1; //RLEN6="H"
wait(ton_rr);
/**************************/
@@ -3687,7 +3771,7 @@
case 2:
- /*** v3 debag *************/
+ /*** ver3 *****************/
rlen[6] = 1; //RLEN7="H"
wait(ton_rr);
/**************************/
@@ -3700,7 +3784,7 @@
case 3:
- /*** v3 debag *************/
+ /*** ver3 *****************/
rlen[7] = 1; //RLEN8="H"
wait(ton_rr);
/**************************/
@@ -3717,8 +3801,8 @@
//電圧測定用リレーを全てオフ
for (int i = 4; i <= 7; i++){
rlen[i] = 0;
- wait(toff_rr);
}
+ wait(toff_rr);
/************/
//プリアンプ倍率を代入して、電圧値を算出する(単位はmV)
@@ -3728,13 +3812,16 @@
}
-/*********************************
+/*******************************************************************************
measure resistor
- 測定CHを指定して、抵抗測定値Rを返す
- char ch 0~3 -> 1ch ~ 4ch
-
-*********************************/
+
+ 測定CHを指定して、抵抗測定値Rを返す
+ char ch 0~3 -> 1ch ~ 4ch
+
+ ver3.0.0 リレー制御追加
+
+*******************************************************************************/
short meas_resistor(char ch)//ch 0~3 -> 1ch ~ 4ch
{
char com;
@@ -3742,57 +3829,100 @@
switch(ch) {
case 0:
+ /*
//ver1.2.0
if (RL_EN == 1) {
io[6] = 1; //外付けリレーON
wait(TIME_RELAY_ON);
}
//up to here
+ */
+
+ /*** ver3 *****************/
+ rlen[0] = 1; //RLEN1="H"
+ wait(ton_rr);
+ /**************************/
com = adc_config(0,0);//ch1(adc),12bit
i2c.write( addr_ADC1, &com, 1);
wait(0.1);
sdata = read_adc(addr_ADC1);
- //ver1.2.0
+
+ /*
+ //ver1.2.0 relay off
if (RL_EN == 1) {
io[6] = 0 ;
}
+ */
break;
case 1:
+
+ /*
//ver1.2.0
if (RL_EN == 1) {
io[7] = 1; //外付けリレーON
wait(TIME_RELAY_ON);
}
//up to here
+ */
+
+ /*** ver3 *****************/
+ rlen[1] = 1; //RLEN2="H"
+ wait(ton_rr);
+ /**************************/
com = adc_config(1,0);//ch2(adc),12bit
i2c.write( addr_ADC1, &com, 1);
wait(0.1);
sdata = read_adc(addr_ADC1);
+
+ /*
//ver1.2.0
if (RL_EN == 1) {
io[7] = 0;
}
+ */
break;
case 2:
+ /*** ver3 *****************/
+ rlen[2] = 1; //RLEN3="H"
+ wait(ton_rr);
+ /**************************/
+
com = adc_config(0,0);//ch1(adc),12bit
i2c.write( addr_ADC2, &com, 1);
wait(0.1);
sdata = read_adc(addr_ADC2);
+
break;
+
case 3:
+ /*** ver3 *****************/
+ rlen[3] = 1; //RLEN4="H"
+ wait(ton_rr);
+ /**************************/
+
com = adc_config(1,0);//ch2(adc),12bit
i2c.write( addr_ADC2, &com, 1);
wait(0.1);
sdata = read_adc(addr_ADC2);
+
break;
+
}// end switch
+ /*** ver3 *********************/
+ //抵抗測定用リレーを全てオフ
+ for (int i = 0; i <= 3; i++){
+ rlen[i] = 0;
+ }
+ wait(toff_rr);
+ /*****************************/
+
//検出用抵抗値を代入して、測定抵抗値を算出する(単位はmV,Ω)
if ( sdata < res_vref ) {
sdata =( rsense * sdata ) / ( res_vref - sdata);
@@ -3800,7 +3930,6 @@
sdata = res_vref;//overload
}
-
return ( sdata );
}