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: ILF.cpp
- Revision:
- 4:24481ebef1c4
- Parent:
- 3:639e05fcfa0b
--- a/ILF.cpp Fri Jan 21 08:40:08 2022 +0000
+++ b/ILF.cpp Wed Apr 20 01:38:30 2022 +0000
@@ -1,14 +1,27 @@
#include "mbed.h"
#include "SDFileSystem.h"
-//#include "MODSERIAL.h"
//difine_mbed_LPC1768
/*******************************************************************************
-2018.8.31
-ILF Iop汎用器
-
+2022.4.8
+ILF V3 Iop汎用器
+
+ver3.0.0 2022.4.8 tanaka
+ mbed_ILF ver1.2.5を引継ぎ
+ ILF3のハードに合せて改編する
+
+ 1.EEPROMの変更 ONsemi製CAT24M01WI-GT3
+ the CAT24M01 is a 1024kb serial CMOS EEPROM
+ addres: 101010**
+
+ 2.電圧測定の平均化
+
+
+
+******************************************************************************/
+/*
仕様
電圧/抵抗測定:12bit
電流測定:14bit
@@ -100,12 +113,14 @@
#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 0.5 //[s]VOC測定電圧設定後からリセットまでの時間
+#define wait_voc_1 0.5 //[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
@@ -118,12 +133,16 @@
| 18bits(11) | 15.625uV |
-----------------------------------
****************************************/
-//ver1.2.0
-const int version_major = 1; //ソフトバージョン
-const int version_minor = 2; //ソフトバージョン
-const int version_build = 5; //ソフトバージョン
-
-//
+//soft ver
+const int version_major = 3;
+const int version_minor = 0;
+const int version_build = 0;
+
+/*******************************************************************************
+
+ LPC1768 PIN MAPPING
+
+*******************************************************************************/
//繰り返しタイマー割り込み
Ticker flipper; /* 初期化 */
//one shot timer
@@ -131,17 +150,23 @@
Timeout oneshot2;
Timeout oneshot3;
Timeout oneshot4;
-//
-//SD-CARD
+
+/*** SD-CARD ***/
SDFileSystem sd(P0_9, P0_8, P0_7, P0_6, "sd"); //SDFileSystem name(mosi, miso, sck, cs, mount);
-//
-//interruput
+
+/*** I2C ***/
+I2C i2c(P0_10,P0_11); //(PinName sda, PinName scl) I2Cを定義
+
+/*** UART ver3 ***/
+Serial uart(P0_15,P0_16,9600);
+
+/*** interruput ***/
InterruptIn seq_yobi(P0_19);
-//
-//start sw
+
+/*** start sw ***/
DigitalIn sw_start(P0_4);
-//
-//DigitalOut
+
+/*** DigitalOut ***/
DigitalOut houden[] = { // 配列を用意します
DigitalOut( P2_1 ), //houden1 配列の1番目の要素を**で初期化したDigitalOutに
DigitalOut( P2_0 ), //houden2
@@ -149,6 +174,26 @@
DigitalOut( P1_29 ) //houden4
};
+DigitalOut io[] = {
+ DigitalOut( P2_11 ), //io1
+ DigitalOut( P2_12 ), //io2
+ DigitalOut( P1_18 ), //io3
+ DigitalOut( P1_19 ), //io4
+ DigitalOut( P0_17 ), //io5
+ DigitalOut( P0_18 ), //io6
+ DigitalOut( P1_30 ), //io7
+ DigitalOut( P1_31 ), //io8
+ DigitalOut( P1_22 ), //io9
+ DigitalOut( P1_23 ), //io10
+ DigitalOut( P1_24 ), //io11
+ DigitalOut( P1_25 ), //io12
+ DigitalOut( P0_23 ), //io13
+ DigitalOut( P0_24 ), //io14
+ DigitalOut( P0_25 ), //io15
+ DigitalOut( P0_26 ) //io16
+};
+
+/*
DigitalOut io[] = { // 配列を用意します
DigitalOut( P0_25 ), //io1 配列の1番目の要素をP0_25で初期化したDigitalOutに
DigitalOut( P0_26 ), //io2
@@ -159,6 +204,7 @@
DigitalOut( P1_24 ), //io7
DigitalOut( P1_25 ) //io8
};
+*/
DigitalOut range[] = { // 配列を用意します
DigitalOut( P2_3 ), //range1 配列の1番目の要素を**で初期化したDigitalOutに
@@ -167,13 +213,6 @@
DigitalOut( P1_27 ) //range4
};
-/*
-DigitalOut led1_green(P0_17);
-DigitalOut led2_green(P1_31);
-DigitalOut led1_red(P0_18);
-DigitalOut led2_red(P1_30);
-*/
-
DigitalOut led_green[] = {
DigitalOut( P0_17 ),
DigitalOut( P1_31 ),
@@ -187,7 +226,30 @@
DigitalOut( P2_12 ),
DigitalOut( P1_19 )
};
+
+/*** PLC ver3 ***/
+DigitalIn seq_in[] = {
+ DigitalIn(P0_19), //si1
+ DigitalIn(P2_9), //si2
+ DigitalIn(P2_13), //si3
+ DigitalIn(P4_28), //si4
+ DigitalIn(P0_29), //si5
+ DigitalIn(P0_30) //si6
+};
+
+DigitalOut seq_out[] = {
+ DigitalOut( P0_21 ), //so1
+ DigitalOut( P0_22 ), //so2
+ DigitalOut( P3_25 ), //so3
+ DigitalOut( P3_26 ), //so4
+ DigitalOut( P0_20 ), //so5
+ DigitalOut( P2_6 ), //so6
+ DigitalOut( P2_7 ), //so7
+ DigitalOut( P2_8 ) //so8
+};
+
//ver1.1.0
+/*
DigitalOut seq_hantei[] = {
DigitalOut( P0_21 ),
DigitalOut( P0_22 ),
@@ -204,9 +266,9 @@
DigitalIn seq_kosuu_a(P2_13);
DigitalIn seq_kosuu_b(P2_9);
//DigitalIn seq_yobi(P0_19);
-
-//
-//PWM
+*/
+
+/*** PWM ***/
PwmOut leds[] = { //配列を用意
PwmOut(P2_5), //LED1
PwmOut(P2_4), //LED2
@@ -214,17 +276,30 @@
PwmOut(P1_20) //LED4
};
-//
-//I2C
-I2C i2c(P0_10,P0_11); //(PinName sda, PinName scl) I2Cを定義
-//
-/******************:
+//RELAY ver3.0.0
+DigitalOut rlen[] = {
+ DigitalOut( P1_4 ), //RLCNT1
+ DigitalOut( P1_8 ), //RLCNT2
+ DigitalOut( P1_9 ), //RLCNT3
+ DigitalOut( P1_10 ), //RLCNT4
+ DigitalOut( P1_14 ), //RLCNT5
+ DigitalOut( P1_15 ), //RLCNT6
+ DigitalOut( P1_16 ), //RLCNT7
+ DigitalOut( P1_17 ), //RLCNT8
+};
+
+/*******************************************************************************
+
SD Card
-*******************/
+
+*******************************************************************************/
void sd_writetext(char* text);
-/******************:
-gu-D(表示器) addr:50H
-*******************/
+
+/*******************************************************************************
+
+ gu-D(表示器) addr:50H
+
+*******************************************************************************/
//parameter_gu256X128C-D903M
const int addr_gu = 0x50 << 1; // Address of gu256X128C-D903M
//
@@ -277,18 +352,63 @@
void gu_Button_down_on2();
void gu_Button_power_on();
void gu_Button_power_off();
-
+//
+//******************************************************************************
+
+// CAT24M01(EEPROM)
+// ver3.0.0 2022.4.8
+
+const static int eeprom_adrs = 0xA8; //0x2A << 2 Address of PCAS08A(EEPROM) 6/8bit
+
+int slave_adrs; //i2c slave address 8bit
+
+char rdata[17]; //EEPROMからのリードデータ
+char wdata[17]; //EEPROMへのライトデータ
+int Jyushin; //受信成功時 Jyushin=0
+int Soushin; //送信成功時 Soushin=0
+
+const static char adrs_kido[]={0x00,0x00}; //VFDの輝度
+const static char adrs_syoudo[]={0x00,0x10}; //測定用LED照度の値を保存しているアドレス
+const static char adrs_calnum[]={0x00,0x20}; //CPUにロードしているCALの登録番号
+const static char adrs_calinfo[]={0x01,0x00}; //CAL情報 0x0100~0x032FFを割り当て。1page256byte。No.1~No.50まで登録
+//
+// CAL情報登録 -> EEPROM
+//
+#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
***************************/
//parameter_PCAS08A(EEPROM)
//const int addr_EEPROM = 0x15 << 3; // Address of PCAS08A(EEPROM) コメント化 ver1.2.1
-char rdata[17]; //EEPROMからのリードデータ
-char wdata[17]; //EEPROMへのライトデータ
-int Jyushin; //受信成功時 Jyushin=0
-int Soushin; //送信成功時 Soushin=0
-const int fixed_adrs = 0x15 << 3; // Address of PCAS08A(EEPROM) 始めの5bit ver1.2.1
-int adrs_eeprom; //slave address ver1.2.1
+//char rdata[17]; //EEPROMからのリードデータ
+//char wdata[17]; //EEPROMへのライトデータ
+//int Jyushin; //受信成功時 Jyushin=0
+//int Soushin; //送信成功時 Soushin=0
+//const int eeprom_adrs = 0x15 << 3; // Address of PCAS08A(EEPROM) 始めの5bit ver1.2.1
+//int slave_adrs; //slave address ver1.2.1
+//
/***************************
MCP3424(ADC)
***************************/
@@ -374,44 +494,27 @@
#define low_limit_iop 0x44C//11uA換算:1100*0.01
#define low_limit_ocp 0xFFE2//-0.3uA換算
*/
-/******************************
-
- CAL情報登録 -> EEPROM
-
-*******************************/
-#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*/
-//up to here
//structure
struct cal_info {
- short number; /* CAL.No. */
- short vss_iop; /* IOP測定時のVss電圧 1bit * 0.01uA*/
- short vss_ocp; /* 過充電防止(over charge protection)測定時のVss電圧 */
- short vss_voc; /* VOC測定時のVss電圧 */
- short low_limit_voc; //1bit * 1mv
- short low_limit_iop; //1bit * 0.01uA
- short low_limit_ocp; //過充電防止検査の上限規格値(プラス側)
- short up_limit_ocp; //過充電防止検査の上限規格値(マイナス側)ver1.2.1追加
- float wait_iop; /* [s]Iop測定前の待機時間 1bit 1s 換算*/
- float wait_ocp; /* [s]過充電防止時消電測定前の待機時間 1bit 1s換算*/
- short low_limit_resistor; /* アンテナ抵抗規格 1bit 10Ω*/
- short up_limit_resistor; /* アンテナ抵抗規格 1bit 10Ω*/
+ char name[3]; // CAL NAME ASCII CODE ver3
+ short number; // CAL.No.
+ short vss_iop; // IOP測定時のVss電圧 1bit * 0.01uA
+ short vss_ocp; // 過充電防止(over charge protection)測定時のVss電圧
+ short vss_voc; // VOC測定時のVss電圧
+ short low_limit_voc; // 1bit * 1mv
+ short low_limit_iop; // 1bit * 0.01uA
+ short low_limit_ocp; // 過充電防止検査の下規格値(プラス側)
+ short up_limit_ocp; // 過充電防止検査の上限規格値(マイナス側)ver1.2.1追加
+ float wait_iop; // Iop測定前の待機時間[s] 1bit 1s 換算
+ float wait_ocp; // 過充電防止時消電測定前の待機時間[s] 1bit 1s換算
+ short low_limit_resistor; // アンテナ抵抗規格 1bit 10Ω
+ 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
} ;
+
//parameter
struct cal_info calinfo;
char reg_num; /* 選択中の登録CALナンバー */
@@ -421,7 +524,6 @@
void read_caliber(cal_info *cal, int num);
void write_caliber_information(cal_info *cal, int num);
-
/*******************************
ver1.2.5
@@ -446,6 +548,12 @@
*******************************/
void set_pullup()
{
+ /*** ver3 ***/
+ 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);
@@ -453,6 +561,7 @@
seq_cal_c.mode(PullUp);
seq_kosuu_a.mode(PullUp);
seq_kosuu_b.mode(PullUp);
+ */
}
/*******************************
@@ -469,8 +578,9 @@
//シーケンサのトリガ以外は受け付けない
while(1) {
-
- if( seq_start == 0 ) {
+ /*** ver3 ***/
+ //if( seq_start == 0 ) {
+ if ( seq_in[0] == 0 ){
trigger();
@@ -503,9 +613,14 @@
gu_print1("CAL.");
//シーケンサからCAL選択bit読込と表示
+ /*
cal_num = ( seq_cal_c << 2 ) + ( seq_cal_b << 1 ) + seq_cal_a;
cal_num = ( ~ cal_num ) & 0x7 ; //3bit入力の負論理
+ */
+
+ /*** v3 debug ***/
+ cal_num = 1;
//read caliber infomation from eeprom
if( cal_num >= 1 && cal_num <= 6 ) {
@@ -519,13 +634,18 @@
}
- meas_num = ( ~(( seq_kosuu_b << 1 ) + seq_kosuu_a )) & 0x3; //2bit負論理
+ /*** v3 debag ***/
+ //meas_num = ( ~(( seq_kosuu_b << 1 ) + seq_kosuu_a )) & 0x3; //2bit負論理
+ meas_num = ( ~(( seq_in[2] << 1 ) + seq_in[3] )) & 0x3; //2bit負論理
+ /******/
gu_cursor(128,1);
gu_print1("n=");
gu_onebyte( meas_num + 0x30 );//測定個数確認用
- seq_busy = 1;//DegitalOut busy
+ /*** ver3 ***/
+ //seq_busy = 1;//DegitalOut busy
+ seq_out[4] = 1;
auto_meas( meas_num );
@@ -534,8 +654,9 @@
wait(0.1);
- //測定終了
- seq_busy = 0;//DegitalOut busy
+ //測定終了ver3
+ //seq_busy = 0;//DegitalOut busy
+ seq_out[4] = 1;
//終了表示
gu_fontsize(1);
@@ -544,258 +665,208 @@
}
-/*******************************
+/*******************************************************************************
EEPROMへCAL情報(struct)を保存
-
-*******************************/
+
+ ver3. CAT24M01用に改修 2022.4.12
+
+ 1page(256byte)につき1Cal分の品種情報を登録する。
+ BYTE_ADDRESS上位9bitでpage指定。下位8bitはpage内アドレス。
+
+ argument
+ num : CAL登録ナンバー(1~50)
+ cal_info : 測定条件
+
+*******************************************************************************/
void write_caliber_information(cal_info *cal, int num)
{
- char cdata[17];//1byte
-
- //EEPROM書込み 先頭アドレス
- cdata[0] = addr_cal1 + 0x10 * ( num - 1 );
-
- //データ分割 EEPROM_BYTE 0x00~0x0Bまで
- cdata[1] = calinfo.vss_iop & 0xFF;//1byte分割
- cdata[2] = ( calinfo.vss_iop >> 8 ) & 0xFF;//1byte分割
-
- cdata[3] = calinfo.vss_ocp & 0xFF;//1byte分割
- cdata[4] = ( calinfo.vss_ocp >> 8 ) & 0xFF;//1byte分割
-
- cdata[5] = calinfo.vss_voc & 0xFF;//1byte分割
- cdata[6] = ( calinfo.vss_voc >> 8 ) & 0xFF;//1byte分割
-
- cdata[7] = calinfo.low_limit_voc & 0xFF;//1byte分割
- cdata[8] = ( calinfo.low_limit_voc >> 8 ) & 0xFF;//1byte分割
-
- cdata[9] = calinfo.low_limit_iop & 0xFF;//1byte分割
- cdata[10] = ( calinfo.low_limit_iop >> 8 ) & 0xFF;//1byte分割
-
- cdata[11] = calinfo.low_limit_ocp & 0xFF;//1byte分割
- cdata[12] = ( calinfo.low_limit_ocp >> 8 ) & 0xFF;//1byte分割
-
- //ver1.1.0
- cdata[13] = calinfo.wait_iop; //1bitあたり 1s
- cdata[14] = calinfo.wait_ocp; //1bitあたり 1s
- /*ver1.1.0
- cdata[13] = calinfo.wait_iop * 10; //1bitあたり0.1s
- cdata[14] = calinfo.wait_ocp * 10; //1bitあたり0.1s
- */
-
- cdata[15] = calinfo.low_limit_resistor / 10; //1bitあたり10ohm
- cdata[16] = calinfo.up_limit_resistor / 10; //1bitあたり10ohm
-
- Soushin = i2c.write (fixed_adrs, cdata, 17);
-
- //ver1.2.1
- wait(0.1);
-
- char cdata_2[3];
-
- adrs_eeprom = fixed_adrs + 0x2; //BLOCK2の選択
-
- cdata_2[0] = addr_cal1_2 + 0x10 * ( num - 1 ); //PAGE選択
- cdata_2[1] = calinfo.up_limit_ocp & 0xFF;//1byte分割
- cdata_2[2] = ( calinfo.up_limit_ocp >> 8 ) & 0xFF;//1byte分割
-
- Soushin = i2c.write (adrs_eeprom, cdata_2, 3);
- //up to here
+ char cdata[28]; //1byte*x
+ int adrs_init;
+ int adrs;
+
+ adrs_init = ((adrs_calinfo[0] << 8 ) & 0xFF00 ) + (adrs_calinfo[1] & 0xFF);
+
+ //EEPROM書込み page指定
+
+ adrs = adrs_init + 0x100 * ( num - 1 );
+ cdata[0] = ( (adrs & 0xFF00) >> 8 ) & 0xFF; //address 15~8 bit
+ cdata[1] = 0x00; //address 7~0 bit
+
+ //連続データ書込み BYTE_ADDRESS 下位8bit 0x00~0x0Bまで
+
+ cdata[2] = calinfo.vss_iop & 0xFF; //0x00
+ cdata[3] = ( calinfo.vss_iop >> 8 ) & 0xFF; //0x01
+
+ cdata[4] = calinfo.vss_ocp & 0xFF; //0x02
+ cdata[5] = ( calinfo.vss_ocp >> 8 ) & 0xFF; //0x03
+
+ cdata[6] = calinfo.vss_voc & 0xFF; //0x04
+ cdata[7] = ( calinfo.vss_voc >> 8 ) & 0xFF; //0x05
+
+ cdata[8] = calinfo.low_limit_voc & 0xFF; //0x06
+ cdata[9] = ( calinfo.low_limit_voc >> 8 ) & 0xFF; //0x07
+
+ cdata[10] = calinfo.low_limit_iop & 0xFF; //0x08
+ cdata[11] = ( calinfo.low_limit_iop >> 8 ) & 0xFF; //0x09
+
+ cdata[12] = calinfo.low_limit_ocp & 0xFF; //0x0A
+ cdata[13] = ( calinfo.low_limit_ocp >> 8 ) & 0xFF; //0x0B
+
+ cdata[14] = calinfo.up_limit_ocp & 0xFF; //0x0C
+ cdata[15] = ( calinfo.up_limit_ocp >> 8 ) & 0xFF; //0x0D
+
+ cdata[16] = calinfo.low_limit_ocp_v & 0xFF; //0x0E
+ cdata[17] = ( calinfo.low_limit_ocp_v >> 8 ) & 0xFF; //0x0F
+
+ cdata[18] = calinfo.up_limit_ocp_v & 0xFF; //0x10
+ cdata[19] = ( calinfo.up_limit_ocp_v >> 8 ) & 0xFF; //0x11
+
+ cdata[20] = calinfo.wait_iop; //0x12
+ cdata[21] = calinfo.wait_ocp; //0x13
+ cdata[22] = calinfo.wait_voc; //0x14
+
+ cdata[23] = calinfo.low_limit_resistor / 10; //0x15 1bitあたり10ohm
+ cdata[24] = calinfo.up_limit_resistor / 10; //0x16 1bitあたり10ohm
+
+ 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);
+
+ wait(0.2); //ver3
}
-/*******************************
+/*******************************************************************************
EEPROMからCAL情報を
読み出して構造体へ代入する
-*******************************/
+ argument num:登録番号
+
+ ver3. CAT24M01用に改修 2022.4.12
+
+*******************************************************************************/
void read_caliber(cal_info *cal, int num)
{
signed short sdata[16]; //CAL設定条件
- int i;
-
- //EEPROMからnumで指定したナンバーのCAL情報を読み出し
- wdata[0] = addr_cal1 + 0x10 * ( num - 1 );
- Soushin = i2c.write (fixed_adrs, wdata, 1,true); //読込先頭アドレス指定 ReStart
- Jyushin = i2c.read ((fixed_adrs + 0x01), rdata, 16);//read 1byte
-
- //データ合成 EEPROM_BYTE 0x00~0x0Bまで2byte結合
- for ( i = 0; i <= 5; i++ ) {
- sdata[i] = rdata[i*2] | ( rdata[ i*2 + 1 ] << 8 );
+ int i;
+ int adrs_init;
+ int adrs;
+ char cdata[26];
+
+ adrs_init = ((adrs_calinfo[0] << 8 ) & 0xFF00) + (adrs_calinfo[1] & 0x00FF);
+
+ adrs = adrs_init + 0x100 * ( num - 1 );
+
+ wdata[0] = ( (adrs & 0xFF00) >> 8 ) & 0xFF; //address 15~8 bit
+ wdata[1] = 0x00; //address 7~0 bit
+
+ 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
+
+ /*** ver3.0.0 debug***/
+ if ( Jyushin != 0 ){
+ gu_fontsize(1);
+ gu_cursor(0,2);
+ gu_print1("not read cal information");
+ }
+
+ //データ合成 EEPROM_BYTE 0x00~0x11まで2byte結合
+ for ( i = 0; i <= 8; i++ ) {
+ sdata[i] = cdata[i*2] | ( cdata[ i*2 + 1 ] << 8 );
}
- sdata[6] = rdata[12];
- sdata[7] = rdata[13];
- sdata[8] = rdata[14];
- sdata[9] = rdata[15];
-
+
cal -> number = num;
- cal -> vss_iop = sdata[0];
- cal -> vss_ocp = sdata[1];
- cal -> vss_voc = sdata[2];
- cal -> low_limit_voc = sdata[3];
- cal -> low_limit_iop = sdata[4];
- cal -> low_limit_ocp = sdata[5];
- //ver1.1.0
- cal -> wait_iop = sdata[6];
- cal -> wait_ocp = sdata[7];
- /*
- cal -> wait_iop = sdata[6] / 10;
- cal -> wait_ocp = sdata[7] / 10;
- */
- cal -> low_limit_resistor = sdata[8] * 10;
- cal -> up_limit_resistor = sdata[9] * 10;
-
- //ver1.2.3
- //EEPROMからnumで指定したナンバーのCAL情報を読み出し
- char rdata2[2];
-
- adrs_eeprom = fixed_adrs + 0x02; //BLOCK2
-
- wdata[0] = addr_cal1_2 + 0x10 * ( num - 1 );
- Soushin = i2c.write (adrs_eeprom, wdata, 1,true); //読込先頭アドレス指定 ReStart
- Jyushin = i2c.read ((adrs_eeprom + 0x01), rdata2, 2);//read 1byte
-
- //BYTE0~1
- i = 0;
- sdata[10] = rdata2[i*2] | ( rdata2[ i*2 + 1 ] << 8 );
-
- cal -> up_limit_ocp = sdata[10];
- //ver1.2.1 up to here
+ cal -> vss_iop = sdata[0]; //0x00
+ cal -> vss_ocp = sdata[1]; //0x02
+ cal -> vss_voc = sdata[2]; //0x04
+ cal -> low_limit_voc = sdata[3]; //0x06
+ cal -> low_limit_iop = sdata[4]; //0x08
+ cal -> low_limit_ocp = sdata[5]; //0x0A
+ cal -> up_limit_ocp = sdata[6]; //0x0C
+ cal -> low_limit_ocp_v = sdata[7]; //0x0E
+ cal -> up_limit_ocp_v = sdata[8]; //0x10
+
+ cal -> wait_iop = cdata[18]; //0x12 wait_iop
+ cal -> wait_ocp = cdata[19]; //0x13 wait_ocp
+ cal -> wait_voc = cdata[20]; //0x14 wait_voc
+
+ cal -> low_limit_resistor = cdata[21] * 10; //0x15 low_limit_resistor
+ cal -> up_limit_resistor = cdata[22] * 10; //0x16 up_limit_resistor
+
+ 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
}
-/*******************************
+/*******************************************************************************
EEPROMからCAL登録番号を読出し
-*******************************/
+ ver3. CAT24M01用に改修 2022.4.11
+
+*******************************************************************************/
void read_regnum()
{
- wdata[0] = addr_calnum;
- Soushin = i2c.write (fixed_adrs, wdata, 1,true); //読込先頭アドレス指定 ReStart
- Jyushin = i2c.read ((fixed_adrs + 0x01), rdata, 1);//read 1byte
+
+ //Selective Read Timing
+
+ Soushin = i2c.write (eeprom_adrs, adrs_calnum, 2,true); //ver3
+
+ Jyushin = i2c.read ((eeprom_adrs + 0x01), rdata, 1);//read 1byte
reg_num = rdata[0];
}
-/*******************************
-
- EEPROMからCAL登録情報全消去
-
-*******************************/
+/*******************************************************************************
+
+ EEPROMからCAL登録情報全消去("0x00"書込み)
+
+ ver3. CAT24M01用に改修 2022.4.11
+ 0x00000 ~ 0x032FF を消去
+
+*******************************************************************************/
void erace_calinfo()
{
int i;
-
+ int j;
+
+ //init cal number ver3
reg_num = 0x01;
- wdata[0] = addr_calnum; //word address 書込み先頭アドレス指定
- wdata[1] = reg_num;
- Soushin = i2c.write (fixed_adrs, wdata, 2);
-
- wait(0.2);
-
- wdata[0] = addr_cal1;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (fixed_adrs, wdata, 17);
-
- wait(0.2);
-
- wdata[0] = addr_cal2;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (fixed_adrs, wdata, 17);
-
- wait(0.2);
-
- wdata[0] = addr_cal3;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (fixed_adrs, wdata, 17);
-
- wait(0.2);
-
- wdata[0] = addr_cal4;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (fixed_adrs, wdata, 17);
-
- wait(0.2);
-
- wdata[0] = addr_cal5;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (fixed_adrs, wdata, 17);
+ wdata[0] = adrs_calnum[0];
+ wdata[1] = adrs_calnum[1];
+ wdata[2] = reg_num;
+ Soushin = i2c.write (eeprom_adrs, wdata, 3);
wait(0.2);
-
- wdata[0] = addr_cal6;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (fixed_adrs, wdata, 17);
-
- //ver1.2.1
- //BLOCK2の消去
- wait(0.2);
-
- adrs_eeprom = fixed_adrs + 0x02; //BLOCK2
-
- wdata[0] = addr_cal1_2;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (adrs_eeprom, wdata, 17);
-
- wait(0.2);
-
- wdata[0] = addr_cal2_2;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
+
+ //write "0x00" by 256 byte
+
+ char wd[258]; //DATA
+ int byte_adrs; //送信するBYTE ADDRESS I2C送信データの1,2BYTE目
+ const static int cal_adrs = 0x0100; //CAL情報を保存する開始アドレス
+ int page = 50; //page数
+
+ for ( j = 0; j < page; j++){
+
+ byte_adrs = cal_adrs + j * 256;
+ wd[0] = (byte_adrs & 0xFF00) >> 8;
+ wd[1] = byte_adrs & 0xFF;
+ for( i = 2; i <= 258; i++) { //write 1page(256byte)
+ wd[i] = 0x00;
+ }
+ Soushin = i2c.write (eeprom_adrs, wd, 258);
+
+ wait(0.2);
+
}
- Soushin = i2c.write (adrs_eeprom, wdata, 17);
-
- wait(0.2);
-
- wdata[0] = addr_cal3_2;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (adrs_eeprom, wdata, 17);
-
- wait(0.2);
-
- wdata[0] = addr_cal4_2;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (adrs_eeprom, wdata, 17);
-
- wait(0.2);
-
- wdata[0] = addr_cal5_2;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (adrs_eeprom, wdata, 17);
-
- wait(0.2);
-
- wdata[0] = addr_cal6_2;
- for( i = 1; i <= 16; i++) { //1page全消去
- wdata[i] = 0x00;
- }
- Soushin = i2c.write (adrs_eeprom, wdata, 17);
-
- wait(0.2);
-
- //up to herever1.2.1
}
-/******************************************
+/*******************************************************************************
ADC(MCP3424) Configuration Register
@@ -811,7 +882,7 @@
10 = 15 SPS(16bits)
11 = 3.75 SPS(18bits)
-******************************************/
+*******************************************************************************/
char adc_config(char ch, char rate)
{
char confreg; //Configuration Register 1byte
@@ -854,12 +925,12 @@
break;
}
}
-/******************************************
+/*******************************************************************************
ADC(MCP3424)
指定addressから2byte読込み
-******************************************/
+*******************************************************************************/
short read_adc(char addr)//指定addressから2byte読込み
{
char cdata[2];//1byte
@@ -873,7 +944,7 @@
return ( sdata );
}
-/*****************************
+/*******************************************************************************
AUTO/SEQ Mode
@@ -882,7 +953,7 @@
For Current measurement
a recurring interrupt to repeatedly call a function at a specified rate.
-*****************************/
+*******************************************************************************/
void flip_ch1()
{
short sdata;
@@ -930,7 +1001,7 @@
//次の測定chへ切替 無し
}
-/*****************************
+/*******************************************************************************
Manual Mode
@@ -939,7 +1010,7 @@
For Current measurement
a recurring interrupt to repeatedly call a function at a specified rate.
-*****************************/
+*******************************************************************************/
void flip()
{
short sdata; //_2byte reading data of ADC
@@ -1276,6 +1347,7 @@
//電圧測定
//ver1.2.0
+ /*** ver3.0.0 ***
if (RL_EN == 1) {
switch (ch_num) {
case 0:
@@ -1289,15 +1361,18 @@
}
}
//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);
@@ -1340,6 +1415,9 @@
wait(0.2);
+ //ver3.0.0
+ uart.format(7, Serial::Even, 1);
+
set_pullup();
general_call(0x06); //ADC power on reset
@@ -1349,7 +1427,7 @@
gu_initial();//初期画面へ
//utility();
}
-} //main end
+} //main end
void gu_initial()
{
@@ -1366,19 +1444,16 @@
int i;
float duty_pwm;
-
for ( i = 0; i <= ( number_of_channels - 1 ); i++) {
leds[i].period_us(period_pwm); //Set tha PWM period(us)
}
-
duty_pwm = 0; //表示器立ち上がるまでLEDOFF
for( i = 0; i <= 3; i++) {
leds[i].write(duty_pwm);//Set Duty
}
-
i2c.frequency(100000); //gu_D I2Cクロックレート(HZ) 400khz以下
cmd_gu[0]= 0x1B;
@@ -1387,9 +1462,11 @@
wait(0.2);
//メモリ00h番地(GU_D輝度設定データ)読み出し
- wdata[0] = 0x00;
- Soushin = i2c.write (fixed_adrs, wdata, 1,true); //読込先頭アドレス指定 ReStart
- Jyushin = i2c.read ((fixed_adrs + 0x01), rdata, 1);//read 1byte
+ //wdata[0] = 0x00;
+ wdata[0] = adrs_kido[0];
+ wdata[1] = adrs_kido[1];
+ Soushin = i2c.write (eeprom_adrs, wdata, 2,true); //読込先頭アドレス指定 ReStart
+ Jyushin = i2c.read ((eeprom_adrs + 0x01), rdata, 1);//read 1byte
*pclumi = rdata[0];
//輝度設定更新
if(*pclumi==0x00 || *pclumi > 0x08) *pclumi=0x05;
@@ -1572,22 +1649,38 @@
}
-/*********************************
+/*******************************************************************************
CAL選択画面 sub
-
-*********************************/
+
+ ver3.0.0 CAL名を追加
+
+*******************************************************************************/
void show_info(int n)
{
short sdata[6];
+ char cl[2];
read_caliber(&calinfo,n);
//読出したCAL情報の表示
gu_fontsize(1);
gu_cursor(0,2);
+ gu_print1(" ");
+ gu_fontsize(1);
+ gu_cursor(0,2);
gu_print1("No.");
- gu_putdec(&calinfo.number);
+
+ cl[1] = calinfo.number % 10 + '0';
+ cl[0] = calinfo.number /10 + '0';
+
+ gu_print(cl);
+ //gu_putdec(&calinfo.number);
+
+ gu_print1(" CAL.");
+ //gu_print1(calinfo.name);
+ i2c.write(addr_gu, calinfo.name, 3); //3byte ascii code
+
gu_cursor(0,3);
gu_print1("Vss(Iop) =");
sdata[0] = -1 * calinfo.vss_iop;
@@ -1604,11 +1697,68 @@
gu_putdeck(&sdata[2]);
gu_print1("V ");
}
-/*********************************
+/*******************************************************************************
+
+ GU-D CAL選択スイッチボタン再表示 サブ
+
+ 画面上にあるスイッチの配置
+
+ 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 redraw_sw(int dig, char sw_num){
+
+ char str_num[3]; // ascii code
+ char sw; // GU-D Swich Number
+
+ str_num[2] = 0; // null終端
+
+ if ( dig >= 1 ){
+ str_num[0] = dig + 0x30; //convert ASCII 10の位
+ } else {
+ str_num[0] = 0x20; //space
+ }
+
+ for ( sw = 17; sw <= 29; sw++ ){
+
+ if ( sw >= 22 && sw <= 24 ){
+ continue;
+ }
+
+ if ( sw <= 21 ){
+ str_num[1] = ( sw - 16 ) + 0x30;
+ } else if ( sw >= 24 && sw <= 28 ){
+ str_num[1] = ( sw - 19 ) + 0x30;
+ } else if ( sw == 29) {
+ str_num[0] = ( dig + 1 )+ 0x30;
+ str_num[1] = 0x30;
+ }
+
+ if ( sw_num != sw ){
+ gu_set_button(sw,str_num);
+ } else {
+ gu_reverse(0x01); //gu_リバース指定
+ gu_set_button(sw,str_num);
+ gu_reverse(0x00); //gu_リバース解除
+ }
+ }//for
+}
+
+/*******************************************************************************
CAL選択画面 #CAL登録画面
-
-*********************************/
+
+ 画面上にあるスイッチの配置
+
+ 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 select_cal()
{
char crdata[3];
@@ -1617,55 +1767,43 @@
char *pcswnum = &cswnum;
char *pcswdata = &cswdata;
char calnum; //選択したCALナンバー
- //short sdata[3]; //印加電圧表示用wr
-
- calnum = 0;//initial
-
- gu_cls();
+
+ int digit = 0 ; //CAL番号 10の位の値 0~4
+
+ calnum = 0; //initial
+
+ gu_cls(); //GU-D 画面クリア
read_regnum();//EEPROMに保存した選択CAL_NO.の読み出し
show_info(reg_num);
- /*
- read_caliber(&calinfo,reg_num);
-
- //読出したCAL情報の表示
- gu_fontsize(1);
- gu_cursor(0,2);
- gu_print1("No.");
- gu_putdec(&calinfo.number);
- gu_cursor(0,3);
- gu_print1("Vss(Iop) =");
- sdata[0] = -1 * calinfo.vss_iop;
- gu_putdeck(&sdata[0]);
- gu_print1("V ");
- gu_cursor(0,4);
- gu_print1("Vss(ocp) =");
- sdata[1] = -1 * calinfo.vss_ocp;
- gu_putdeck(&sdata[1]);
- gu_print1("V ");
- gu_cursor(0,5);
- gu_print1("Vss(Voc) =");
- sdata[2] = -1 * calinfo.vss_voc;
- gu_putdeck(&sdata[2]);
- gu_print1("V ");
- */
-
gu_fontsize(2); //change fontsize
gu_cursor(0,0);
- gu_print1("Select CAL.");
- //Set Button
+ //ver3.0.0
+ //gu_print1("Select CAL.");
+ gu_print1("CONFIG");
+
+ //Set Button init ver3.0.0
+ redraw_sw(calnum,0);
+ /*
gu_set_button(17,"1");
- gu_set_button(19,"2");
- gu_set_button(21,"3");
- gu_set_button(25,"4");
- gu_set_button(27,"5");
- gu_set_button(29,"6");
+ 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,"reg");
- //gu_set_button_font1(32,"del"); //ver1.1.0
-
+ gu_set_button_font1(8,"set");
+
+ gu_button_up(24);
+ gu_button_down(32);
while(1) {
//タッチスイッチ読み出し
@@ -1677,129 +1815,94 @@
if (cswdata == 0x01) { //タッチしたならば
switch( cswnum ) { //SWの番号(位置)
-
- case 0x10: //SW17
-
- gu_reverse(0x01); //gu_リバース指定
- gu_set_button(17,"1");
- gu_reverse(0x00); //gu_リバース解除
- gu_set_button(19,"2");
- gu_set_button(21,"3");
- gu_set_button(25,"4");
- gu_set_button(27,"5");
- gu_set_button(29,"6");
-
- calnum = 1;
-
+
+ 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 0x12: //SW19
-
- gu_reverse(0x01); //gu_リバース指定
- gu_set_button(19,"2");
- gu_reverse(0x00); //gu_リバース解除
- gu_set_button(17,"1");
- gu_set_button(21,"3");
- gu_set_button(25,"4");
- gu_set_button(27,"5");
- gu_set_button(29,"6");
-
- calnum = 2;
-
+
+ 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 0x14: //SW21
-
- gu_reverse(0x01); //gu_リバース指定
- gu_set_button(21,"3");
- gu_reverse(0x00); //gu_リバース解除
- gu_set_button(17,"1");
- gu_set_button(19,"2");
- //gu_set_button(21,"3");
- gu_set_button(25,"4");
- gu_set_button(27,"5");
- gu_set_button(29,"6");
-
- calnum = 3;
+ 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 0x18: //SW25
-
- gu_reverse(0x01); //gu_リバース指定
- gu_set_button(25,"4");
- gu_reverse(0x00); //gu_リバース解除
- gu_set_button(17,"1");
- gu_set_button(19,"2");
- gu_set_button(21,"3");
- //gu_set_button(25,"4");
- gu_set_button(27,"5");
- gu_set_button(29,"6");
-
- calnum = 4;
+ 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 0x1A: //SW27
-
- gu_reverse(0x01); //gu_リバース指定
- gu_set_button(27,"5");
- gu_reverse(0x00); //gu_リバース解除
- gu_set_button(17,"1");
- gu_set_button(19,"2");
- gu_set_button(21,"3");
- gu_set_button(25,"4");
- //gu_set_button(27,"5");
- gu_set_button(29,"6");
-
- calnum = 5;
+ case 28: //SW29
+
+ calnum = ((digit + 1 )*10);
+
+ redraw_sw(digit,cswnum + 1);
show_info(calnum);
break;
- case 0x1C: //SW29
-
- gu_reverse(0x01); //gu_リバース指定
- gu_set_button(29,"6");
- gu_reverse(0x00); //gu_リバース解除
- gu_set_button(17,"1");
- gu_set_button(19,"2");
- gu_set_button(21,"3");
- gu_set_button(25,"4");
- gu_set_button(27,"5");
- //gu_set_button(29,"6");
-
- calnum = 6;
-
- show_info(calnum);
-
- break;
-
- case 0x06: //SW7 CAL選択ボタン
+ case 0x06: //SW7 ”slct"(CAL選択)ボタン
if ( calnum >= 1 && calnum <=6 ) {
reg_num = calnum;
- //EEPROM書込み
- wdata[0] = addr_calnum; //word address 書込み先頭アドレス指定
- wdata[1] = reg_num;
- Soushin = i2c.write (fixed_adrs, wdata, 2);
-
+ //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 ) {
@@ -1813,16 +1916,17 @@
break;
- case 0x07: //SW8
-
- if ( calnum >= 1 && calnum <= 6 ) {
+ case 0x07: //SW8 "set"ボタン
+
+ if ( calnum >= 1 && calnum <= 50 ) {
gu_reverse(0x01); //gu_リバース指定
- gu_set_button_font1(8,"reg");
+ gu_set_button_font1(8,"set");
wait(0.2);
gu_reverse(0x00); //gu_リバース解除
setup_cal_information(calnum);//CAL情報登録画面へ
- return;
+
+ //return; ver3.0.0 remove
}
break;
@@ -1848,32 +1952,44 @@
} //while(1)
}
-/*********************************
+/*******************************************************************************
CAL情報登録画面 サブルーチン
- 表示パラメータ
- 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 : wait_iop[s]
- x=7 : wait_ocp[s]
- x=8 : low_limit_resistor[Ω]
- x=9 : up_limit_resistor[Ω]
-
- ver1.2.2
- up_limit_ocp[]の追加と
- 順序の入替え
-
- x=6 : up_limit_ocp[]
- x=7 : wait_iop[s]
- x=8 : wait_ocp[s]
- x=9 : low_limit_resistor[Ω]
- x=10 : up_limit_resistor[Ω]
-
-*********************************/
+ 項目の表示
+
+ ver3.0.0 22.4.12
+
+ 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)
+
+ /1.2.1
+ 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] ver1.2.2 追加
+ x=7 : wait_iop[s]
+ x=8 : wait_ocp[s]
+ x=9 : low_limit_resistor[Ω]
+ x=10 : up_limit_resistor[Ω]
+ /
+
+*******************************************************************************/
void hyouji_cal_param(char x)
{
gu_fontsize(2);
@@ -1917,7 +2033,6 @@
gu_cursor(208,4);
gu_print1("[uA]");
break;
- //ver1.2.2
case 6:
gu_cursor(0,4);
gu_print1("up limit(O.C.P)");
@@ -1926,43 +2041,66 @@
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 8:
+ case 10:
gu_cursor(0,4);
gu_print1("Wait(O.C.P)");
gu_cursor(208,4);
gu_print1("[s]");
break;
- case 9:
+ 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 10:
+ 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;
- //ver1.2.2 up to here
-
+ case 14:
+ gu_cursor(0,4);
+ gu_print1("CAL NAME");
+ //gu_cursor(208,4);
+ break;
}
}
-/*********************************
+/*******************************************************************************
CAL情報登録画面 sub
+
para kind of parameter
idata data value
inc add number ex)0x64 0x0A 0x01
-*********************************/
+*******************************************************************************/
+/*** 加算 ***/
void increase_param(char para, signed short *sdata, short inc)
{
switch ( para ) { //パラメータの項目によって上限値異なる
@@ -1970,43 +2108,40 @@
case 1://vss_ocp
case 2://vss_voc
case 3://low_limit_voc
+ case 7://low_limit_ocp_v
+ case 8://up_limit_ocp_v
if(*sdata <= ( 4999 - inc )) {
*sdata = *sdata + inc ;
}
break;//switch ( param ){
- case 4://low_limit_iop
- case 5://low_limit_o.c.p
+ case 4: //low_limit_iop
+ case 5: //low_limit_o.c.p
+ case 6: //up_limit_o.c.p
if(*sdata <= ( 2500 - inc / 10 )) {
*sdata = *sdata + inc /10 ;
}
break;//switch ( param )
- case 7://wait_iop
- case 8://wait_ocp
+ case 9: //wait_iop
+ case 10: //wait_ocp
+ case 11: //wait_voc
if(*sdata <= ( 2550 - inc / 10 )) {
*sdata = *sdata + inc / 10 ;
}
break;//switch ( param )
- case 9:
- case 10:
+ case 12: //low_limit_resistor
+ case 13: //up_limit_resistor
if(*sdata <= ( 2550 - inc )) {
*sdata = *sdata + inc;
}
break;
-
- //ver1.2.2
- case 6://up_limit_o.c.p
- if(*sdata <= ( 2500 - inc / 10 )) {
- *sdata = *sdata + inc /10 ;
- }
- break;//switch ( param )
- //ver1.2.1 up to here
-
+
}//switch ( param ){
}
+/*** 減算 ***/
void decrease_param(char para, signed short *sdata, short dec)
{
switch ( para ) { //パラメータの項目によって上限値異なる
@@ -2014,6 +2149,8 @@
case 1://vss_ocp
case 2://vss_voc
case 3://low_limit_voc
+ case 7://low_limit_ocp_v
+ case 8://up_limit_ocp_v
if(*sdata >= dec ) {
*sdata = *sdata - dec;
@@ -2028,42 +2165,74 @@
break;
case 5://low_limit_o.c.p
+ case 6://up_limit_o.c.p
if(*sdata >= -2500 + dec / 10 ) {
*sdata = *sdata - dec / 10;
}
break;
- case 7://wait_iop
- case 8://wait_ocp
+ case 9: //wait_iop
+ case 10: //wait_ocp
+ case 11: //wait_voc
if(*sdata >= dec / 10 ) {
*sdata = *sdata - dec / 10 ;
}
break;//switch ( param )
- case 9:
- case 10:
+ case 12: //low_limit_resistor
+ case 13: //up_limit_resistor
+
if(*sdata >= dec ) {
*sdata = *sdata - dec;
}
break;
- //ver1.2.1
- case 6://up_limit_o.c.p
-
- if(*sdata >= -2500 + dec / 10 ) {
- *sdata = *sdata - dec / 10;
- }
- break;
- //ver1.2.1 ここまで
-
}//switch ( param ){
}
-/*********************************
+
+/*******************************************************************************
+
+ CAL NAME (ASCII)
+ 3文字で構成(ex.B61)。1文字づつ上下キーで変更する。
+ 範囲はASCII表において 0x30~0x5A
+
+ ver3.0.0 2022.4.13
+
+*******************************************************************************/
+/*** UP ***/
+void up_ascii(char *c){
+
+ if (*c >= 0x5A ){
+ *c = 0x30;
+ } else if ( *c < 0x30 ){
+ *c = 0x30;
+ } else {
+ *c = *c + 1;
+ }
+
+}
+/*** DOWN ***/
+void down_ascii(char *c){
+
+ if (*c > 0x5A ){
+ *c = 0x5A;
+ } else if ( *c <= 0x30 ){
+ *c = 0x5A;
+ } else {
+ *c = *c - 1;
+ }
+
+}
+
+/*******************************************************************************
CAL情報登録画面 MAIN
別途システム設計図,EEPROMのシートを参照
+
+ ver3.0.0
+
param:
0:vss_iop
1:vss_ocp
@@ -2071,29 +2240,34 @@
3:low_limit_voc
4:low_limit_iop
5:low_limit_ocp
- 6:up_limit_ocp ver1.2.2
- 7:wait_iop
- 8:wait_ocp
- 9:LowLimitResistor
- 10:UPLimitResistor
-
-*********************************/
-void setup_cal_information(char cal_num) //xは登録ナンバー=EEPROMのPAGEナンバーex)登録No.1→BLOCK0x00 PAGE0x00
+ 6:up_limit_ocp
+ 7:low_limit_ocp_v
+ 8:up_limit_ocp_v
+ 9:wait_iop
+ 10:wait_ocp
+ 11:wait_voc
+ 12:LowLimitResistor
+ 13:UPLimitResistor
+ 14:CAL_name
+
+*******************************************************************************/
+void setup_cal_information(char cal_num)
{
char param; //設定するパラメータの選択 0~9まで ver1.2.1 0~10まで
char crdata[3];
- signed short sdata_cal[16]; //CAL設定条件
+ signed short sdata_cal[18]; //CAL設定条件
signed short hyouji_data;
- int param_sum; //設定するパラメータの数 ver1.2.1
+ int param_sum; //設定するパラメータの数 ver1.2.1
+ char c_temp[3]; //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 = 11; //ver1.2.1
+ param_sum = 14; //ver3.0.0 //11; //ver1.2.1
//画面表示
- gu_cls();//画面のクリア
+ gu_cls();//画面クリア
gu_fontsize(2);
gu_print1("Setup Cal No.");
wdata[0] = ( cal_num % 10 ) + 0x30;//CALナンバーの表示
@@ -2108,25 +2282,24 @@
sdata_cal[3] = calinfo.low_limit_voc;
sdata_cal[4] = calinfo.low_limit_iop;
sdata_cal[5] = calinfo.low_limit_ocp;
- //ver1.2.2
sdata_cal[6] = calinfo.up_limit_ocp;
- sdata_cal[7] = calinfo.wait_iop;
- sdata_cal[8] = calinfo.wait_ocp;
- sdata_cal[9] = calinfo.low_limit_resistor;
- sdata_cal[10] = calinfo.up_limit_resistor;
- /*
- sdata_cal[6] = calinfo.wait_iop;
- sdata_cal[7] = calinfo.wait_ocp;
- sdata_cal[8] = calinfo.low_limit_resistor;
- sdata_cal[9] = calinfo.up_limit_resistor;
- */
- //ver1.2.2 up to here
-
+ sdata_cal[7] = calinfo.low_limit_ocp_v;
+ sdata_cal[8] = calinfo.up_limit_ocp_v;
+ sdata_cal[9] = calinfo.wait_iop;
+ sdata_cal[10] = calinfo.wait_ocp;
+ sdata_cal[11] = calinfo.wait_voc;
+ sdata_cal[12] = calinfo.low_limit_resistor;
+ sdata_cal[13] = calinfo.up_limit_resistor;
+
+ c_temp[0] = calinfo.name[0];
+ c_temp[1] = calinfo.name[1];
+ c_temp[2] = calinfo.name[2];
+
//ボタンの配置
- gu_set_button_font1(8,"reg");
+ 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);
@@ -2134,15 +2307,6 @@
gu_button_down(30);
gu_button_down(32);
- /*
- gu_button_up(21);
- gu_button_up(22);
- gu_button_up(23);
- gu_button_down(29);
- gu_button_down(30);
- gu_button_down(31);
- */
-
//初期表示はVss_Iop
param = 0;
gu_cursor(0,4);
@@ -2160,33 +2324,9 @@
switch( crdata[1] ) { //SWの番号(位置)
- /* ver1.2.1
case 0x10 ://sw17 パラメータ変更スイッチ(上)
- if ( param <= 8 ) {
- param = param + 1;
- } else {
- param = 0;
- }
-
- hyouji_cal_param(param);//設定パラメータ表示
- break;
-
- case 0x18 ://sw25 パラメータ変更スイッチ(下)
-
- if ( param >= 1 ) {
- param = param - 1;
- } else {
- param = 9;
- }
-
- hyouji_cal_param(param);//設定パラメータ表示
- break;
- */
-
- case 0x10 ://sw17 パラメータ変更スイッチ(上)
-
- if ( param <= param_sum -2 ) {
+ if ( param <= param_sum -1 ) {
param = param + 1;
} else {
param = 0;
@@ -2200,77 +2340,104 @@
if ( param >= 1 ) {
param = param - 1;
} else {
- param = param_sum - 1;
+ param = param_sum;
}
hyouji_cal_param(param);//設定パラメータ表示
break;
- //ver1.2.1 up to here
-
case 19 ://SW20 increase 0x3E8
- increase_param(param, &sdata_cal[param], 1000);
+ // 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
- decrease_param(param, &sdata_cal[param], 1000);
+ if ( param == 14 ){
+ down_ascii(&c_temp[0]);
+ } else {
+ decrease_param(param, &sdata_cal[param], 1000);
+ }
break;
case 0x15 ://SW22 increase 0x64
- increase_param(param, &sdata_cal[param], 100);
+ if ( param == 14 ){
+ up_ascii(&c_temp[1]);
+ } else {
+ increase_param(param, &sdata_cal[param], 100);
+ }
break;
case 0x1D ://SW30 decrease 0x64
- decrease_param(param, &sdata_cal[param], 100);
+ if ( param == 14 ){
+ down_ascii(&c_temp[1]);
+ } else {
+ decrease_param(param, &sdata_cal[param], 100);
+ }
break;
case 23 ://SW24 increase 0x0A
- increase_param(param, &sdata_cal[param], 10);
+ if ( param == 14 ){
+ up_ascii(&c_temp[2]);
+ } else {
+ increase_param(param, &sdata_cal[param], 10);
+ }
break;
case 31 ://SW32 decrease 0x0A
- decrease_param(param, &sdata_cal[param], 10);
+ if ( param == 14 ){
+ down_ascii(&c_temp[2]);
+ } else {
+ decrease_param(param, &sdata_cal[param], 10);
+ }
break;
-
-
- case 0x07 ://保存ボタン
-
+
+ case 6: //SW7 "esc"ボタン
+
+ return; //何もせずに抜ける
+
+ case 0x07 : //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];
- //ver1.2.2
calinfo.up_limit_ocp = sdata_cal[6];
- calinfo.wait_iop = sdata_cal[7];
- calinfo.wait_ocp = sdata_cal[8];
- calinfo.low_limit_resistor = sdata_cal[9];
- calinfo.up_limit_resistor = sdata_cal[10];
- /*
- calinfo.wait_iop = sdata_cal[6];
- calinfo.wait_ocp = sdata_cal[7];
- calinfo.low_limit_resistor = sdata_cal[8];
- calinfo.up_limit_resistor = sdata_cal[9];
- */
- //ver1.2.2 up to here
-
+ 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;
-
- //CALNO.EEPROM書込み
- wdata[0] = addr_calnum; //word address 書込み先頭アドレス指定
- wdata[1] = reg_num;
- Soushin = i2c.write (fixed_adrs, wdata, 2);
-
+ 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);
- //CAL情報
+ //CAL情報 >> EEPROM
//送信完了ならば実行
if(Soushin == 0) {
@@ -2288,7 +2455,7 @@
//送信完了ならば実行
if(Soushin == 0) {
gu_reverse(1);
- gu_set_button_font1(8,"reg");
+ gu_set_button_font1(8,"save");
wait(0.2);
return;//CAL情報登録画面を抜ける
@@ -2305,38 +2472,46 @@
} //switch
} //if
- //gu-D表示
- gu_cursor(150,4);
+
+ //gu-D表示 ver3
+
+ gu_cursor(150,4); //表示位置の指定
switch ( param ) {
case 0://vss_iop
case 1://vss_ocp
case 2://vss_voc
case 3://low_limit_voc
+ case 7://low_limit_voc_v
+ case 8://up_limit_voc_v
hyouji_data = sdata_cal[param] * -1;
gu_putdeck ( &hyouji_data );
break;
- case 4:
- case 5:
+
+ case 4://low_limit_iop
+ case 5://low_limit_ocp
+ case 6://up_limit_ocp
hyouji_data = sdata_cal[param] * 10;
gu_putdeck ( &hyouji_data );
break;
- //ver1.2.2
- case 6:
- hyouji_data = sdata_cal[param] * 10;
- gu_putdeck ( &hyouji_data );
- break;
- case 7:
- case 8:
+
+ case 9: //wait_iop
+ case 10: //wait_ocp
+ case 11: //wait_voc
//ver1.1.0
hyouji_data = sdata_cal[param];
gu_putdec ( &hyouji_data );
break;
- case 9://low_limit_resistor
- case 10://up_limit_resistor
+
+ case 12://low_limit_resistor
+ case 13://up_limit_resistor
hyouji_data = sdata_cal[param];
gu_putdec ( &hyouji_data );
break;
+
+ case 14: //cal name ver3
+ i2c.write(addr_gu, c_temp, 3); //3byte ascii code
+ break;
/*
case 6:
case 7:
@@ -2864,7 +3039,7 @@
dac_out( calinfo.vss_voc,i); //Vss設定 DAC_A~D
}
- wait( wait_voc );
+ wait( wait_voc_1 );
for ( i = 0; i <= ( noc -1 ); i++) {
io[i] = 1; //io1 = "H"
@@ -3413,7 +3588,10 @@
}
if ( SEQ_EN == 1 && err_f[i] == 0 ) {
+ /*** ver3
seq_hantei[i] = 1;
+ ***/
+ seq_out[i] = 1;
}
//ver1.2.3
@@ -3467,13 +3645,15 @@
}
-/*********************************
+/*******************************************************************************
measure voltage
測定CHを指定して、電圧値Rを返す
char ch 0~3 -> 1ch ~ 4ch
-*********************************/
+ ver3.0.0 リレー制御シーケンスを追加
+
+*******************************************************************************/
short meas_voltage(char ch)//ch 0~3 -> 1ch ~ 4ch
{
char com;
@@ -3481,34 +3661,67 @@
switch(ch) {
case 0:
+ /*** v3 debag *************/
+ rlen[4] = 1; //RLEN5="H"
+ wait(ton_rr);
+ /**************************/
+
com = adc_config(2,0);//ch1(adc),12bit
i2c.write( addr_ADC1, &com, 1);
wait(0.1);
sdata = read_adc(addr_ADC1);
break;
+
case 1:
+
+ /*** v3 debag *************/
+ rlen[5] = 1; //RLEN6="H"
+ wait(ton_rr);
+ /**************************/
+
com = adc_config(3,0);//ch2(adc),12bit
i2c.write( addr_ADC1, &com, 1);
wait(0.1);
sdata = read_adc(addr_ADC1);
break;
+
case 2:
+
+ /*** v3 debag *************/
+ rlen[6] = 1; //RLEN7="H"
+ wait(ton_rr);
+ /**************************/
+
com = adc_config(2,0);//ch1(adc),12bit
i2c.write( addr_ADC2, &com, 1);
wait(0.1);
sdata = read_adc(addr_ADC2);
break;
+
case 3:
+
+ /*** v3 debag *************/
+ rlen[7] = 1; //RLEN8="H"
+ wait(ton_rr);
+ /**************************/
+
com = adc_config(3,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 = 4; i <= 7; i++){
+ rlen[i] = 0;
+ wait(toff_rr);
+ }
+ /************/
//プリアンプ倍率を代入して、電圧値を算出する(単位はmV)
-
-
sdata = sdata * 5;//プリアンプ倍率
return ( sdata );
@@ -3635,16 +3848,20 @@
*********************************/
void read_syoudo(char* c)
{
- char cmd; //gu-DへのI2Cコマンド用配列 1byte0
+ //char cmd; //gu-DへのI2Cコマンド用配列 1byte0
//char csyoudo[4];//led出力用pwm duty 設定比1バイト255段階
+
float duty_pwm; //pwm パーセンテージ
int i;
- //
//メモリ10h番地(照度設定データ)読み出し
- cmd = 0x10;
- i2c.write (fixed_adrs, &cmd, 1,true); //読込先頭アドレス指定 ReStart
- i2c.read ((fixed_adrs + 0x01), rdata, 4);//read 1byte
+ //cmd[0] = 0x10; //ver3
+ //Sequential Read
+
+ i2c.write (eeprom_adrs, adrs_syoudo, 2,true); //ver3 repeated start,true - do not send stop condition
+ //i2c.write (slave_adrs, &cmd, 1,true); //ver3 send 1 byte remove stop condition
+ slave_adrs = eeprom_adrs + 0x01; //ver3 read mode
+ i2c.read (slave_adrs, rdata, 4); //read 4 byte
for ( i = 0; i <=3; i++) {
c[i] = rdata[i];
@@ -3868,15 +4085,16 @@
break;
- case 7 ://SW.8 保存ボタンを押すと現在の輝度をEEPROMへ保存する
-
- wdata[0] = 0x10 ; //word address 書込み先頭アドレス指定
+ case 7 ://SW.8 保存ボタンを押すと現在のLED照度をEEPROMへ保存する
+
+ wdata[0] = adrs_syoudo[0]; //word address 書込み先頭アドレス指定
+ wdata[1] = adrs_syoudo[1]; //ver3
for ( i = 0; i <= ( number_of_channels - 1 ); i++) {
- wdata[ i + 1 ] = csyoudo[i]; //DATA_LED i
+ wdata[ i + 2 ] = csyoudo[i]; //DATA_LED i
}
- Soushin = i2c.write (fixed_adrs, wdata,( number_of_channels + 1 ));
+ Soushin = i2c.write (eeprom_adrs, wdata,( number_of_channels + 2 )); // ver3 全送信BYTE数は、書込みデータにBYTE ADDRESSの2byteを加算した数
if(Soushin == 0) {
gu_Button_power_off();//電源ボタンイメージ反転表示
@@ -3954,9 +4172,10 @@
char *pcswdata = &cswdata;
//
//メモリ00h番地(輝度設定データ)読み出し
- wdata[0] = 0x00;
- Soushin = i2c.write (fixed_adrs, wdata, 1,true); //読込先頭アドレス指定 ReStart
- Jyushin = i2c.read ((fixed_adrs + 0x01), rdata, 1);//read 1byte
+ //wdata[0] = 0x00;
+ //Soushin = i2c.write (eeprom_adrs, wdata, 1,true); //読込先頭アドレス指定 ReStart
+ Soushin = i2c.write (eeprom_adrs, adrs_kido, 2,true); //ver3 読込先頭アドレス指定 2byte
+ Jyushin = i2c.read ((eeprom_adrs + 0x01), rdata, 1);//read 1byte
*pclumi = rdata[0];
//輝度設定更新
@@ -4031,9 +4250,14 @@
case 0x07 ://保存ボタンを押すと現在の輝度をEEPROMへ保存する
- wdata[0] = 0x00 ; //word address 書込み先頭アドレス指定
- wdata[1] = *pclumi ; //DATA
- Soushin = i2c.write (fixed_adrs, wdata, 2);
+ //wdata[0] = 0x00 ; //word address 書込み先頭アドレス指定
+ //wdata[1] = *pclumi ; //DATA
+
+ wdata[0] = adrs_kido[0]; //ver3
+ wdata[1] = adrs_kido[1]; //ver3
+ wdata[2] = *pclumi ; //ver3
+
+ Soushin = i2c.write (eeprom_adrs, wdata, 3); //ver3
if(Soushin == 0) {
gu_Button_power_off();//電源ボタンイメージ反転表示