ryou sato / Mbed 2 deprecated LPC11U35_CTswitch_relay

Dependencies:   mbed LPC11U35_MCP41HV51-503EST

Committer:
ryousato
Date:
Sun Sep 06 08:09:33 2020 +0000
Revision:
5:5d7483b46cda
Parent:
4:e69f73c66598
Child:
6:91eec3396ee9
200906

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryousato 0:df1e1f84ded8 1 //////////////////////////////////////////////////
ryousato 0:df1e1f84ded8 2 // Include Files
ryousato 0:df1e1f84ded8 3 #include "mbed.h"
ryousato 0:df1e1f84ded8 4 #include "LPC11Uxx.h"
ryousato 0:df1e1f84ded8 5 #include "USBSerial.h"
ryousato 0:df1e1f84ded8 6 //////////////////////////////////////////////////
ryousato 0:df1e1f84ded8 7
ryousato 0:df1e1f84ded8 8 //Configure the PC Serial Port for CDC USB
ryousato 0:df1e1f84ded8 9 USBSerial serial;
ryousato 0:df1e1f84ded8 10 Serial device(P0_19,P0_18);
ryousato 3:d55ebd20d750 11 Ticker OffsetCal;
ryousato 3:d55ebd20d750 12 Ticker timerint;
ryousato 3:d55ebd20d750 13 Timer timecount;
ryousato 0:df1e1f84ded8 14
ryousato 0:df1e1f84ded8 15 //Pin Defines
ryousato 3:d55ebd20d750 16 DigitalOut led1(LED1);
ryousato 0:df1e1f84ded8 17
ryousato 3:d55ebd20d750 18 char moji[32]; //入力文字列
ryousato 3:d55ebd20d750 19 int suuji[6];
ryousato 3:d55ebd20d750 20 int count = 0; //文字数カウンタ
ryousato 3:d55ebd20d750 21 int CorF;
ryousato 3:d55ebd20d750 22 int adjmode;
ryousato 3:d55ebd20d750 23 int val; //POTのワイパー移動数
ryousato 3:d55ebd20d750 24 int incr;
ryousato 3:d55ebd20d750 25 int wa;
ryousato 3:d55ebd20d750 26 int mode_p = 0;
ryousato 3:d55ebd20d750 27 int *pmode;
ryousato 3:d55ebd20d750 28 float Vcc = 3.292; //実測値を入力すること
ryousato 3:d55ebd20d750 29 float Vref;
ryousato 4:e69f73c66598 30 float ActualVref[4] = {1.65, 1.65, 1.65, 1.65};
ryousato 3:d55ebd20d750 31 float *pAVrefcal;
ryousato 3:d55ebd20d750 32 int AD_flag;
ryousato 3:d55ebd20d750 33 float AD_val = 0;
ryousato 3:d55ebd20d750 34 float AD_val_sum = 0;
ryousato 3:d55ebd20d750 35 float Vrms = 0;
ryousato 3:d55ebd20d750 36 float set_val = 0;
ryousato 3:d55ebd20d750 37 float diff = 0;
ryousato 3:d55ebd20d750 38 //float zero_cal[2];
ryousato 3:d55ebd20d750 39 int AD_count = 0;
ryousato 3:d55ebd20d750 40 float setval = 0;
ryousato 3:d55ebd20d750 41
ryousato 1:88f0bc1e1aff 42
ryousato 0:df1e1f84ded8 43 DigitalOut coilEN1(P0_1);
ryousato 0:df1e1f84ded8 44 DigitalOut coilEN2(P0_2);
ryousato 0:df1e1f84ded8 45 DigitalOut coilEN3(P0_3);
ryousato 0:df1e1f84ded8 46 DigitalOut coilEN4(P0_4);
ryousato 0:df1e1f84ded8 47 DigitalOut coilEN5(P0_5);
ryousato 0:df1e1f84ded8 48 DigitalOut coilEN6(P0_20);
ryousato 0:df1e1f84ded8 49 DigitalOut coilEN7(P1_19);
ryousato 0:df1e1f84ded8 50
ryousato 0:df1e1f84ded8 51 DigitalOut ENn(P0_16);
ryousato 0:df1e1f84ded8 52 DigitalOut addr0(P0_17);
ryousato 0:df1e1f84ded8 53 DigitalOut addr1(P0_18);
ryousato 0:df1e1f84ded8 54 DigitalOut addr2(P0_19);
ryousato 0:df1e1f84ded8 55
ryousato 0:df1e1f84ded8 56 DigitalOut SCT_AMP(P0_10);
ryousato 0:df1e1f84ded8 57 DigitalOut WLATn(P0_23);
ryousato 0:df1e1f84ded8 58 DigitalOut SHDNn(P1_15);
ryousato 0:df1e1f84ded8 59
ryousato 3:d55ebd20d750 60 AnalogIn AD_TRANS_IN(P0_11); //AD_TRANS_IN
ryousato 3:d55ebd20d750 61 AnalogIn AD_CT_IN(P0_12); //AD_CT_IN
ryousato 3:d55ebd20d750 62
ryousato 0:df1e1f84ded8 63
ryousato 1:88f0bc1e1aff 64 SPI spi(P0_9, P0_8, P0_6);
ryousato 2:5e6613f149d4 65
ryousato 1:88f0bc1e1aff 66 void setup() {
ryousato 2:5e6613f149d4 67 spi.format(16,0);
ryousato 3:d55ebd20d750 68 wait(0.02);
ryousato 2:5e6613f149d4 69 spi.frequency(1000000);
ryousato 1:88f0bc1e1aff 70 device.baud(115200);
ryousato 0:df1e1f84ded8 71
ryousato 3:d55ebd20d750 72 coilEN1 = 0; //50Hz
ryousato 3:d55ebd20d750 73 coilEN2 = 0; //TRANS_OUT調整
ryousato 3:d55ebd20d750 74 coilEN3 = 0; //CT1,2_OUT調整
ryousato 3:d55ebd20d750 75 coilEN4 = 0; //CT1,2_OUT選択
ryousato 3:d55ebd20d750 76 coilEN5 = 0; //±5V,±15 OFF
ryousato 3:d55ebd20d750 77 coilEN6 = 0; //未使用
ryousato 3:d55ebd20d750 78 coilEN7 = 0; //未使用
ryousato 0:df1e1f84ded8 79
ryousato 3:d55ebd20d750 80 ENn = 1; //CD74HC4051E CSをディセーブル
ryousato 0:df1e1f84ded8 81 addr0 = 0;
ryousato 0:df1e1f84ded8 82 addr1 = 0;
ryousato 0:df1e1f84ded8 83 addr2 = 0;
ryousato 0:df1e1f84ded8 84
ryousato 3:d55ebd20d750 85 WLATn = 1; //MCP41HV51-503EST ワイパーラッチ
ryousato 3:d55ebd20d750 86 SCT_AMP = 0; //CT入力アンプ 60Aレベル切替え
ryousato 5:5d7483b46cda 87 SHDNn = 1; //電流帰還アンプ シャットダウンしない
ryousato 2:5e6613f149d4 88 }
ryousato 0:df1e1f84ded8 89
ryousato 2:5e6613f149d4 90 void serialstart(){
ryousato 3:d55ebd20d750 91 wait(0.02);
ryousato 3:d55ebd20d750 92 serial.printf("\r\nReady!\r\n");
ryousato 3:d55ebd20d750 93 wait(0.02);
ryousato 0:df1e1f84ded8 94 }
ryousato 0:df1e1f84ded8 95
ryousato 0:df1e1f84ded8 96 void helpwrite(){
ryousato 3:d55ebd20d750 97 serial.printf("\r\n------------------");
ryousato 3:d55ebd20d750 98 //serial.printf("\r\ncmd");
ryousato 3:d55ebd20d750 99 serial.printf("\r\nhelp");
ryousato 3:d55ebd20d750 100 //serial.printf("\r\n?");
ryousato 3:d55ebd20d750 101 serial.printf("\r\ninitial");
ryousato 3:d55ebd20d750 102 serial.printf("\r\nV_OFF");
ryousato 3:d55ebd20d750 103 serial.printf("\r\nV_ON");
ryousato 3:d55ebd20d750 104 serial.printf("\r\n50Hz");
ryousato 3:d55ebd20d750 105 serial.printf("\r\n60Hz");
ryousato 3:d55ebd20d750 106 serial.printf("\r\nTRANS_OUT_ADINT");
ryousato 3:d55ebd20d750 107 serial.printf("\r\nCT1_OUT_ADINT");
ryousato 3:d55ebd20d750 108 serial.printf("\r\nCT2_OUT_ADINT");
ryousato 3:d55ebd20d750 109 serial.printf("\r\nTRANS_OUT_EXT");
ryousato 4:e69f73c66598 110 serial.printf("\r\nCT_OUT_EXT");
ryousato 4:e69f73c66598 111 serial.printf("\r\nTRANS_offset");
ryousato 4:e69f73c66598 112 serial.printf("\r\nCT1_offset");
ryousato 4:e69f73c66598 113 serial.printf("\r\nCT2_offset");
ryousato 4:e69f73c66598 114 serial.printf("\r\ndispVref");
ryousato 3:d55ebd20d750 115 serial.printf("\r\nTRANS_ADJ");
ryousato 3:d55ebd20d750 116 serial.printf("\r\nCT1_ADJ");
ryousato 3:d55ebd20d750 117 serial.printf("\r\nCT2_ADJ");
ryousato 3:d55ebd20d750 118 serial.printf("\r\nMANUAL_TRANS_ADJ");
ryousato 3:d55ebd20d750 119 serial.printf("\r\nMANUAL_CT1_ADJ");
ryousato 3:d55ebd20d750 120 serial.printf("\r\nMANUAL_CT2_ADJ");
ryousato 3:d55ebd20d750 121 serial.printf("\r\n------------------");
ryousato 0:df1e1f84ded8 122 }
ryousato 0:df1e1f84ded8 123
ryousato 3:d55ebd20d750 124 //MCP41HV51コマンド
ryousato 3:d55ebd20d750 125 //デバッグ用
ryousato 3:d55ebd20d750 126 void TCON(){ //端子スイッチ接続
ryousato 2:5e6613f149d4 127 int whoami = spi.write(0x40FF);
ryousato 3:d55ebd20d750 128 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 2:5e6613f149d4 129 }
ryousato 2:5e6613f149d4 130
ryousato 3:d55ebd20d750 131 //デバッグ用
ryousato 2:5e6613f149d4 132 void TCONread(){
ryousato 2:5e6613f149d4 133 int whoami = spi.write(0x4C00);
ryousato 3:d55ebd20d750 134 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 3:d55ebd20d750 135 }
ryousato 3:d55ebd20d750 136
ryousato 3:d55ebd20d750 137 //デバッグ用
ryousato 3:d55ebd20d750 138 void read(){
ryousato 3:d55ebd20d750 139 int read_val = spi.write(0x0C00);
ryousato 3:d55ebd20d750 140 serial.printf("\r\nread_val = 0x%X", read_val);
ryousato 3:d55ebd20d750 141 }
ryousato 3:d55ebd20d750 142
ryousato 3:d55ebd20d750 143 //デバッグ用
ryousato 3:d55ebd20d750 144 void write00(){
ryousato 3:d55ebd20d750 145 int whoami = spi.write(0x0000);
ryousato 3:d55ebd20d750 146 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 2:5e6613f149d4 147 }
ryousato 2:5e6613f149d4 148
ryousato 3:d55ebd20d750 149 //デバッグ用
ryousato 3:d55ebd20d750 150 void write7F(){
ryousato 3:d55ebd20d750 151 int whoami = spi.write(0x007F);
ryousato 3:d55ebd20d750 152 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 2:5e6613f149d4 153 }
ryousato 2:5e6613f149d4 154
ryousato 3:d55ebd20d750 155 //デバッグ用
ryousato 3:d55ebd20d750 156 void writeFF(){
ryousato 2:5e6613f149d4 157 int whoami = spi.write(0x00FF);
ryousato 3:d55ebd20d750 158 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 3:d55ebd20d750 159 }
ryousato 3:d55ebd20d750 160
ryousato 3:d55ebd20d750 161 //デバッグ用
ryousato 3:d55ebd20d750 162 void TENinc(){
ryousato 3:d55ebd20d750 163 int readval = spi.write(0x0C00);
ryousato 3:d55ebd20d750 164 int incval = readval & 0xFF;
ryousato 3:d55ebd20d750 165 incval = incval + 10;
ryousato 3:d55ebd20d750 166 int whoami = spi.write(incval);
ryousato 3:d55ebd20d750 167 serial.printf("\r\nWHOAMI register = 0x%X", whoami);
ryousato 2:5e6613f149d4 168 }
ryousato 2:5e6613f149d4 169
ryousato 2:5e6613f149d4 170 void WLAT(){
ryousato 2:5e6613f149d4 171 WLATn = 0;
ryousato 3:d55ebd20d750 172 wait(0.02);
ryousato 3:d55ebd20d750 173 WLATn = 1;
ryousato 3:d55ebd20d750 174 //serial.printf("\r\n OK(WLAT)");
ryousato 3:d55ebd20d750 175 }
ryousato 3:d55ebd20d750 176
ryousato 3:d55ebd20d750 177 //CD74HC4051Eのイネーブル
ryousato 3:d55ebd20d750 178 void CS(int cs){
ryousato 3:d55ebd20d750 179 ENn = cs;
ryousato 3:d55ebd20d750 180 serial.printf("\r\n OK(CS)");
ryousato 3:d55ebd20d750 181 }
ryousato 3:d55ebd20d750 182
ryousato 3:d55ebd20d750 183 /******************************************************************************/
ryousato 3:d55ebd20d750 184 //CD74HC4051Eのアドレスセレクト
ryousato 3:d55ebd20d750 185 /******************************************************************************/
ryousato 3:d55ebd20d750 186 void ADDR(int addr){
ryousato 3:d55ebd20d750 187 ENn = 1; //CSをディセーブルにしておく
ryousato 3:d55ebd20d750 188 wait(0.02);
ryousato 3:d55ebd20d750 189 if(addr == 0){
ryousato 3:d55ebd20d750 190 addr0 = 0;
ryousato 3:d55ebd20d750 191 addr1 = 0;
ryousato 3:d55ebd20d750 192 addr2 = 0;
ryousato 3:d55ebd20d750 193 }
ryousato 3:d55ebd20d750 194 else if(addr == 1){
ryousato 5:5d7483b46cda 195 addr0 = 0;
ryousato 5:5d7483b46cda 196 addr1 = 1;
ryousato 3:d55ebd20d750 197 addr2 = 0;
ryousato 3:d55ebd20d750 198 }
ryousato 3:d55ebd20d750 199 else if(addr == 2){
ryousato 5:5d7483b46cda 200 addr0 = 1;
ryousato 5:5d7483b46cda 201 addr1 = 0;
ryousato 3:d55ebd20d750 202 addr2 = 0;
ryousato 3:d55ebd20d750 203 }
ryousato 3:d55ebd20d750 204 else if(addr == 3){
ryousato 3:d55ebd20d750 205 addr0 = 1;
ryousato 3:d55ebd20d750 206 addr1 = 1;
ryousato 3:d55ebd20d750 207 addr2 = 0;
ryousato 3:d55ebd20d750 208 }
ryousato 3:d55ebd20d750 209 else if(addr == 4){
ryousato 3:d55ebd20d750 210 addr0 = 0;
ryousato 3:d55ebd20d750 211 addr1 = 0;
ryousato 3:d55ebd20d750 212 addr2 = 1;
ryousato 3:d55ebd20d750 213 }
ryousato 3:d55ebd20d750 214 else if(addr == 5){
ryousato 3:d55ebd20d750 215 addr0 = 1;
ryousato 3:d55ebd20d750 216 addr1 = 0;
ryousato 3:d55ebd20d750 217 addr2 = 1;
ryousato 3:d55ebd20d750 218 }
ryousato 3:d55ebd20d750 219 else if(addr == 6){
ryousato 3:d55ebd20d750 220 addr0 = 0;
ryousato 3:d55ebd20d750 221 addr1 = 1;
ryousato 3:d55ebd20d750 222 addr2 = 1;
ryousato 3:d55ebd20d750 223 }
ryousato 3:d55ebd20d750 224 else if(addr == 7){
ryousato 3:d55ebd20d750 225 addr0 = 1;
ryousato 3:d55ebd20d750 226 addr1 = 1;
ryousato 3:d55ebd20d750 227 addr2 = 1;
ryousato 3:d55ebd20d750 228 }
ryousato 3:d55ebd20d750 229 wait(0.02);
ryousato 3:d55ebd20d750 230 ENn = 0; //イネーブル
ryousato 3:d55ebd20d750 231 wait(0.02);
ryousato 3:d55ebd20d750 232 //serial.printf("\r\n OK(ADDR%d)", addr);
ryousato 3:d55ebd20d750 233 }
ryousato 3:d55ebd20d750 234
ryousato 3:d55ebd20d750 235 /******************************************************************************/
ryousato 3:d55ebd20d750 236 //POT制御
ryousato 3:d55ebd20d750 237 //指定したPOTの現在値から、指定した量を増減する
ryousato 3:d55ebd20d750 238 /******************************************************************************/
ryousato 3:d55ebd20d750 239 void incdec(int incr, int val, int CorF, int mode){ //incr [0:1][-:+], val [0~255], CorF [2:1][C:F], mode [1:2:3][trans:ct1:ct2]
ryousato 3:d55ebd20d750 240 //現在の設定値読み取り
ryousato 3:d55ebd20d750 241 ADDR(mode * 2 + CorF -2);
ryousato 3:d55ebd20d750 242 int read_val = spi.write(0x0C00);
ryousato 3:d55ebd20d750 243 read_val &= 0x00FF;
ryousato 3:d55ebd20d750 244
ryousato 3:d55ebd20d750 245 //現在の設定値から増減値書き込み
ryousato 3:d55ebd20d750 246 int write_val;
ryousato 3:d55ebd20d750 247 if(incr == 1){write_val = read_val + val;}
ryousato 3:d55ebd20d750 248 else if(incr == 0){write_val = read_val - val;}
ryousato 3:d55ebd20d750 249 spi.write(write_val);
ryousato 3:d55ebd20d750 250
ryousato 3:d55ebd20d750 251 wait(0.001);
ryousato 3:d55ebd20d750 252
ryousato 3:d55ebd20d750 253 //粗、微 読み取り
ryousato 3:d55ebd20d750 254 ADDR(mode * 2); //TRANS粗調整POT
ryousato 3:d55ebd20d750 255 int read_val_Coarse = spi.write(0x0C00);
ryousato 3:d55ebd20d750 256 read_val_Coarse &= 0x00FF;
ryousato 3:d55ebd20d750 257
ryousato 3:d55ebd20d750 258 wait(0.001);
ryousato 3:d55ebd20d750 259
ryousato 3:d55ebd20d750 260 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 3:d55ebd20d750 261 int read_val_Fine = spi.write(0x0C00);
ryousato 3:d55ebd20d750 262 read_val_Fine &= 0x00FF;
ryousato 3:d55ebd20d750 263
ryousato 3:d55ebd20d750 264 WLAT();
ryousato 3:d55ebd20d750 265
ryousato 3:d55ebd20d750 266 wait(0.001);
ryousato 3:d55ebd20d750 267
ryousato 3:d55ebd20d750 268 ENn = 1; //ディセーブル
ryousato 3:d55ebd20d750 269
ryousato 3:d55ebd20d750 270 serial.printf("\r\n Status --- Coarse[%d/255], Fine[%d/255] ---", read_val_Coarse, read_val_Fine);
ryousato 3:d55ebd20d750 271 }
ryousato 3:d55ebd20d750 272
ryousato 3:d55ebd20d750 273 /******************************************************************************/
ryousato 3:d55ebd20d750 274 //AD変換
ryousato 3:d55ebd20d750 275 //デバッグ用
ryousato 3:d55ebd20d750 276 /******************************************************************************/
ryousato 3:d55ebd20d750 277
ryousato 3:d55ebd20d750 278 void AD(int ad){
ryousato 3:d55ebd20d750 279 unsigned short AD_Val;
ryousato 3:d55ebd20d750 280 float AD_Val_f;
ryousato 3:d55ebd20d750 281 if(ad == 1){
ryousato 3:d55ebd20d750 282 AD_Val = (AD_TRANS_IN.read_u16() >> 6); //右シフト「>> 6」で10bit分解能に合わせる
ryousato 3:d55ebd20d750 283 AD_Val_f = AD_TRANS_IN.read();
ryousato 3:d55ebd20d750 284 }
ryousato 3:d55ebd20d750 285 else if(ad == 2){
ryousato 3:d55ebd20d750 286 AD_Val = (AD_CT_IN.read_u16() >> 6); //右シフト「>> 6」で10bit分解能に合わせる
ryousato 3:d55ebd20d750 287 AD_Val_f = AD_CT_IN.read();
ryousato 3:d55ebd20d750 288 }
ryousato 3:d55ebd20d750 289 wait(0.02);
ryousato 4:e69f73c66598 290 serial.printf("\r\nAD_Val : %1f [V] / (%d)d / (%x)h",(AD_Val*Vcc/1023),AD_Val,AD_Val);
ryousato 3:d55ebd20d750 291 serial.printf("\r\nAD_Val_f : %1f [V] / (%f)d",(AD_Val_f*Vcc),AD_Val_f);
ryousato 3:d55ebd20d750 292 }
ryousato 3:d55ebd20d750 293
ryousato 3:d55ebd20d750 294
ryousato 3:d55ebd20d750 295
ryousato 3:d55ebd20d750 296 void AD_CT(){
ryousato 3:d55ebd20d750 297 float AD_Val;
ryousato 3:d55ebd20d750 298 AD_Val = AD_TRANS_IN.read();
ryousato 3:d55ebd20d750 299 wait(0.02);
ryousato 3:d55ebd20d750 300 serial.printf("\r\n%1.3f",AD_Val);
ryousato 3:d55ebd20d750 301 }
ryousato 3:d55ebd20d750 302
ryousato 3:d55ebd20d750 303 /******************************************************************************/
ryousato 3:d55ebd20d750 304 //各POT初期設定
ryousato 3:d55ebd20d750 305 //mode 1:TRANS 2:CT1 3:CT2
ryousato 3:d55ebd20d750 306 /******************************************************************************/
ryousato 3:d55ebd20d750 307 void POTini(int mode){
ryousato 3:d55ebd20d750 308 ADDR(mode * 2); //TRANS粗調整POT
ryousato 3:d55ebd20d750 309 if(mode==1){spi.write(0x0076);}
ryousato 3:d55ebd20d750 310 else if(mode==2 || mode==3){spi.write(0x006B);}
ryousato 3:d55ebd20d750 311
ryousato 3:d55ebd20d750 312 wait(0.001);
ryousato 3:d55ebd20d750 313
ryousato 3:d55ebd20d750 314 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 3:d55ebd20d750 315 spi.write(0x007F);
ryousato 3:d55ebd20d750 316
ryousato 3:d55ebd20d750 317 WLAT();
ryousato 3:d55ebd20d750 318
ryousato 3:d55ebd20d750 319 wait(0.001);
ryousato 3:d55ebd20d750 320
ryousato 3:d55ebd20d750 321 ENn = 1; //ディセーブル
ryousato 3:d55ebd20d750 322 }
ryousato 3:d55ebd20d750 323
ryousato 3:d55ebd20d750 324 /******************************************************************************/
ryousato 3:d55ebd20d750 325 //初期設定
ryousato 3:d55ebd20d750 326 //TRANS_OUT,CT1,2_OUTを初期値(50Hz,AC100V,60A相当)に調整
ryousato 3:d55ebd20d750 327 /******************************************************************************/
ryousato 3:d55ebd20d750 328 void initial(){
ryousato 3:d55ebd20d750 329 //全てのPOTの端子スイッチをONにする(TCON)
ryousato 3:d55ebd20d750 330 ADDR(1); //TRANS微調整POT
ryousato 3:d55ebd20d750 331 spi.write(0x40FF);
ryousato 3:d55ebd20d750 332 ADDR(2); //TRANS粗調整POT
ryousato 3:d55ebd20d750 333 spi.write(0x40FF);
ryousato 3:d55ebd20d750 334 ADDR(3); //CT1微調整POT
ryousato 3:d55ebd20d750 335 spi.write(0x40FF);
ryousato 3:d55ebd20d750 336 ADDR(4); //CT1粗調整POT
ryousato 3:d55ebd20d750 337 spi.write(0x40FF);
ryousato 3:d55ebd20d750 338 ADDR(5); //CT2微調整POT
ryousato 3:d55ebd20d750 339 spi.write(0x40FF);
ryousato 3:d55ebd20d750 340 ADDR(6); //CT2粗調整POT
ryousato 3:d55ebd20d750 341 spi.write(0x40FF);
ryousato 3:d55ebd20d750 342 wait(0.02);
ryousato 3:d55ebd20d750 343 ENn = 1; //CSをディセーブル
ryousato 3:d55ebd20d750 344
ryousato 3:d55ebd20d750 345 coilEN5 = 1; //±5V,±15VをON
ryousato 3:d55ebd20d750 346
ryousato 3:d55ebd20d750 347 coilEN1 = 0; //50Hz切替え
ryousato 3:d55ebd20d750 348
ryousato 3:d55ebd20d750 349 SCT_AMP = 0; //CT入力アンプ 60Aレベル切替え
ryousato 5:5d7483b46cda 350 SHDNn = 1; //電流帰還アンプ シャットダウンしない
ryousato 3:d55ebd20d750 351
ryousato 3:d55ebd20d750 352 //TRANS_OUT初期設定
ryousato 3:d55ebd20d750 353 coilEN2 = 0; //TRANS_OUTをAD入力方向へ切替え
ryousato 3:d55ebd20d750 354
ryousato 3:d55ebd20d750 355 ADDR(2); //TRANS粗調整POT
ryousato 3:d55ebd20d750 356 spi.write(0x0076);
ryousato 3:d55ebd20d750 357 read();
ryousato 3:d55ebd20d750 358 ADDR(1); //TRANS微調整POT
ryousato 3:d55ebd20d750 359 spi.write(0x007F);
ryousato 3:d55ebd20d750 360 read();
ryousato 3:d55ebd20d750 361 WLAT(); //設定したワイパーをラッチ
ryousato 3:d55ebd20d750 362 wait(0.02);
ryousato 3:d55ebd20d750 363 ENn = 1; //CSをディセーブル
ryousato 3:d55ebd20d750 364
ryousato 3:d55ebd20d750 365 //CT1_OUT初期設定
ryousato 3:d55ebd20d750 366 coilEN3 = 0; //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 367 coilEN4 = 0; //CT1を選択
ryousato 3:d55ebd20d750 368
ryousato 3:d55ebd20d750 369 ADDR(4); //CT1粗調整POT
ryousato 3:d55ebd20d750 370 spi.write(0x006B);
ryousato 3:d55ebd20d750 371 read();
ryousato 3:d55ebd20d750 372 ADDR(3); //CT1微調整POT
ryousato 3:d55ebd20d750 373 spi.write(0x007F);
ryousato 3:d55ebd20d750 374 read();
ryousato 3:d55ebd20d750 375 WLAT(); //設定したワイパーをラッチ
ryousato 3:d55ebd20d750 376 wait(0.02);
ryousato 3:d55ebd20d750 377 ENn = 1; //CSをディセーブル
ryousato 3:d55ebd20d750 378
ryousato 3:d55ebd20d750 379 //CT2_OUT初期設定
ryousato 3:d55ebd20d750 380 coilEN3 = 0; //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 381 coilEN4 = 1; //CT2を選択
ryousato 3:d55ebd20d750 382
ryousato 3:d55ebd20d750 383 POTini(3);
ryousato 3:d55ebd20d750 384 ADDR(6); //CT2粗調整POT
ryousato 3:d55ebd20d750 385 spi.write(0x006B);
ryousato 3:d55ebd20d750 386 read();
ryousato 3:d55ebd20d750 387 ADDR(5); //CT2微調整POT
ryousato 3:d55ebd20d750 388 spi.write(0x007F);
ryousato 3:d55ebd20d750 389 read();
ryousato 3:d55ebd20d750 390 WLAT(); //設定したワイパーをラッチ
ryousato 3:d55ebd20d750 391 wait(0.02);
ryousato 3:d55ebd20d750 392 ENn = 1; //CSをディセーブル
ryousato 3:d55ebd20d750 393
ryousato 3:d55ebd20d750 394 coilEN2 = 1; //TRANS_OUT出力
ryousato 3:d55ebd20d750 395 coilEN3 = 1; //CT1,2_OUT出力
ryousato 4:e69f73c66598 396 coilEN4 = 0;
ryousato 4:e69f73c66598 397
ryousato 4:e69f73c66598 398 /*
ryousato 3:d55ebd20d750 399 for(int i=0; i<10*2; i++){
ryousato 3:d55ebd20d750 400 led1 = !led1;
ryousato 2:5e6613f149d4 401 wait(0.1);
ryousato 3:d55ebd20d750 402 }
ryousato 3:d55ebd20d750 403 led1 = 0;
ryousato 4:e69f73c66598 404 */
ryousato 3:d55ebd20d750 405 serial.printf("\r\n OK(initial)");
ryousato 2:5e6613f149d4 406 }
ryousato 2:5e6613f149d4 407
ryousato 3:d55ebd20d750 408 /******************************************************************************/
ryousato 3:d55ebd20d750 409 //手動調整
ryousato 3:d55ebd20d750 410 /******************************************************************************/
ryousato 3:d55ebd20d750 411 void manual_adj(int mode){
ryousato 3:d55ebd20d750 412 if(mode == 2 || mode == 3){
ryousato 3:d55ebd20d750 413 serial.printf("\r\n Select range mode. Type '60A' or '120A'.");
ryousato 3:d55ebd20d750 414 while(1){
ryousato 3:d55ebd20d750 415 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 416 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 417 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 418
ryousato 3:d55ebd20d750 419 if(count == 5 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 420 moji[5] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 421 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 422 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 423 }
ryousato 3:d55ebd20d750 424
ryousato 3:d55ebd20d750 425 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 426
ryousato 3:d55ebd20d750 427 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 428 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 429 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 430 if (strcmp(moji, "60A") == 0){
ryousato 3:d55ebd20d750 431 SCT_AMP = 0; //CT入力アンプ 60Aレベル切替え
ryousato 3:d55ebd20d750 432 break;}
ryousato 3:d55ebd20d750 433 else if(strcmp(moji, "120A") == 0){
ryousato 3:d55ebd20d750 434 SCT_AMP = 1; //CT入力アンプ 120Aレベル切替え
ryousato 3:d55ebd20d750 435 break;}
ryousato 3:d55ebd20d750 436 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 437 }
ryousato 3:d55ebd20d750 438 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 439 }
ryousato 3:d55ebd20d750 440 }
ryousato 3:d55ebd20d750 441 serial.printf("\r\n OK");
ryousato 3:d55ebd20d750 442 }
ryousato 3:d55ebd20d750 443
ryousato 3:d55ebd20d750 444 /*
ryousato 3:d55ebd20d750 445 if(mode == 1){coilEN2 = 0;} //TRANS_OUTをAD入力方向へ切替え
ryousato 3:d55ebd20d750 446 else if(mode == 2){coilEN3 = 0; coilEN4 = 0;} //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 447 else if(mode == 3){coilEN3 = 0; coilEN4 = 1;} //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 448 */
ryousato 3:d55ebd20d750 449
ryousato 3:d55ebd20d750 450 //POTの状態を確認し、ステータス情報に表示する
ryousato 3:d55ebd20d750 451 ADDR(mode * 2); //TRANS粗調整POT
ryousato 3:d55ebd20d750 452 wait(0.2);
ryousato 3:d55ebd20d750 453 int read_val_Coarse = spi.write(0x0C00);
ryousato 3:d55ebd20d750 454 read_val_Coarse &= 0x00FF;
ryousato 3:d55ebd20d750 455
ryousato 3:d55ebd20d750 456 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 3:d55ebd20d750 457 wait(0.2);
ryousato 3:d55ebd20d750 458 int read_val_Fine = spi.write(0x0C00);
ryousato 3:d55ebd20d750 459 read_val_Fine &= 0x00FF;
ryousato 3:d55ebd20d750 460 ENn = 1; //CSをディセーブル
ryousato 3:d55ebd20d750 461 serial.printf("\r\n\r\n Status --- Coarse[%d/255], Fine[%d/255] ---\r\n", read_val_Coarse, read_val_Fine);
ryousato 3:d55ebd20d750 462
ryousato 3:d55ebd20d750 463
ryousato 3:d55ebd20d750 464 //ループスタート
ryousato 3:d55ebd20d750 465 while(1){ //ループ1
ryousato 3:d55ebd20d750 466 serial.printf("\r\n Select mode '+-' or 'num'. ('q' quit)\r\n");
ryousato 3:d55ebd20d750 467 while(1){ //adjmode
ryousato 3:d55ebd20d750 468 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 469 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 470 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 471
ryousato 3:d55ebd20d750 472 if(count == 4 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 473 moji[4] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 474 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 475 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 476 }
ryousato 3:d55ebd20d750 477
ryousato 3:d55ebd20d750 478 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 479
ryousato 3:d55ebd20d750 480 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 481 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 482 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 483 if (strcmp(moji,"+-") == 0){
ryousato 3:d55ebd20d750 484 adjmode = 1;
ryousato 3:d55ebd20d750 485 break;}
ryousato 3:d55ebd20d750 486 else if(strcmp(moji,"num") == 0){
ryousato 3:d55ebd20d750 487 adjmode = 2;
ryousato 3:d55ebd20d750 488 break;}
ryousato 3:d55ebd20d750 489 else if(strcmp(moji,"q") == 0){break;}
ryousato 3:d55ebd20d750 490 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 491 }
ryousato 3:d55ebd20d750 492 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 493 }
ryousato 3:d55ebd20d750 494 } //adjmode
ryousato 3:d55ebd20d750 495
ryousato 3:d55ebd20d750 496 if(strcmp(moji,"q")==0){serial.printf("\r\n quit\r\n"); break;} //ループ1ブレイク
ryousato 3:d55ebd20d750 497
ryousato 3:d55ebd20d750 498 while(1){ //ループ2
ryousato 3:d55ebd20d750 499 serial.printf("\r\n Type 'C' for Coarse or 'F' for Fine. ('q' quit, 'b' back)\r\n");
ryousato 3:d55ebd20d750 500 while(1){ //CorF setting
ryousato 3:d55ebd20d750 501 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 502 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 503 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 504
ryousato 3:d55ebd20d750 505 if(count == 2 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 506 moji[2] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 507 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 508 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 509 }
ryousato 3:d55ebd20d750 510
ryousato 3:d55ebd20d750 511 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 512
ryousato 3:d55ebd20d750 513 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 514 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 515 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 516 if (strcmp(moji, "C") == 0){
ryousato 3:d55ebd20d750 517 CorF = 2; //粗調整
ryousato 3:d55ebd20d750 518 serial.printf("\r\n---Coarse Setting---");
ryousato 3:d55ebd20d750 519 break;}
ryousato 3:d55ebd20d750 520 else if(strcmp(moji, "F") == 0){
ryousato 3:d55ebd20d750 521 CorF = 1; //微調整
ryousato 3:d55ebd20d750 522 serial.printf("\r\n---Fine Setting---");
ryousato 3:d55ebd20d750 523 break;}
ryousato 3:d55ebd20d750 524 else if(strcmp(moji,"b")==0 || strcmp(moji,"q")==0){break;}
ryousato 3:d55ebd20d750 525 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 526 }
ryousato 3:d55ebd20d750 527 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 528 }
ryousato 3:d55ebd20d750 529 }//CorF setting
ryousato 3:d55ebd20d750 530
ryousato 3:d55ebd20d750 531 if(strcmp(moji,"b")==0){
ryousato 3:d55ebd20d750 532 serial.printf("\r\n return\r\n");
ryousato 3:d55ebd20d750 533 break; //ループ2ブレイク
ryousato 3:d55ebd20d750 534 }
ryousato 3:d55ebd20d750 535 else if(strcmp(moji,"q")==0){break;} //ループ2ブレイク
ryousato 3:d55ebd20d750 536
ryousato 3:d55ebd20d750 537 while(1){ //ループ3
ryousato 3:d55ebd20d750 538 if(adjmode == 1){
ryousato 3:d55ebd20d750 539 serial.printf("\r\n Type '+' for increment, '-' for decrement. ('q' quit, 'b' back)");
ryousato 3:d55ebd20d750 540 while(1){ //+-モード
ryousato 3:d55ebd20d750 541 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 542 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 543 serial.printf("\r\n%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 544 moji[1] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 545 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 546
ryousato 3:d55ebd20d750 547 if(strcmp(moji,"b")==0 || strcmp(moji,"q")==0){break;}
ryousato 3:d55ebd20d750 548 else if(strcmp(moji,"\n") == 0){}
ryousato 3:d55ebd20d750 549 else if(strcmp(moji,"+") == 0){incdec(1,1,CorF,mode);}
ryousato 3:d55ebd20d750 550 else if(strcmp(moji,"-") == 0){incdec(0,1,CorF,mode);}
ryousato 3:d55ebd20d750 551 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 552 }
ryousato 3:d55ebd20d750 553 } //+-モード
ryousato 3:d55ebd20d750 554 if(strcmp(moji,"b")==0){
ryousato 3:d55ebd20d750 555 serial.printf("\r\n return\r\n");
ryousato 3:d55ebd20d750 556 break; //ループ3ブレイク
ryousato 3:d55ebd20d750 557 }
ryousato 3:d55ebd20d750 558 else if(strcmp(moji,"q")==0){break;} //ループ3ブレイク
ryousato 3:d55ebd20d750 559 }
ryousato 3:d55ebd20d750 560 else if(adjmode == 2){
ryousato 3:d55ebd20d750 561 while(1){ //ループ4
ryousato 3:d55ebd20d750 562 serial.printf("\r\n Type '+' for increase, '-' for decrease. ('q' quit, 'b' back)");
ryousato 3:d55ebd20d750 563 while(1){ //numモード
ryousato 3:d55ebd20d750 564 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 565 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 566 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 567
ryousato 3:d55ebd20d750 568 if(count == 2 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 569 moji[2] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 570 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 571 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 572 }
ryousato 3:d55ebd20d750 573
ryousato 3:d55ebd20d750 574 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 575
ryousato 3:d55ebd20d750 576 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 577 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 578 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 579 if (strcmp(moji, "+") == 0){
ryousato 3:d55ebd20d750 580 incr = 1; //増加
ryousato 3:d55ebd20d750 581 serial.printf("\r\n---increase---");
ryousato 3:d55ebd20d750 582 break;}
ryousato 3:d55ebd20d750 583 else if(strcmp(moji, "-") == 0){
ryousato 3:d55ebd20d750 584 incr = 0; //減少
ryousato 3:d55ebd20d750 585 serial.printf("\r\n---decrease---");
ryousato 3:d55ebd20d750 586 break;}
ryousato 3:d55ebd20d750 587 else if(strcmp(moji,"b")==0 || strcmp(moji,"q")==0){break;}
ryousato 3:d55ebd20d750 588 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 589 }
ryousato 3:d55ebd20d750 590 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 591 }
ryousato 3:d55ebd20d750 592 } //numモード
ryousato 3:d55ebd20d750 593 if(strcmp(moji,"b")==0 || strcmp(moji,"q")==0){break;} //ループ4ブレイク
ryousato 3:d55ebd20d750 594 while(1){ //ループ5
ryousato 3:d55ebd20d750 595 serial.printf("\r\n Type number [0-255]. ('q' quit, 'b' back)");
ryousato 3:d55ebd20d750 596 for(int i=0; i<3; i++){moji[i] = '0';}
ryousato 3:d55ebd20d750 597
ryousato 3:d55ebd20d750 598 while(1){ //numモード2
ryousato 3:d55ebd20d750 599 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 600 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 601 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 602
ryousato 3:d55ebd20d750 603 if(count == 4 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 604 moji[4] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 605 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 606 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 607 }
ryousato 3:d55ebd20d750 608 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 609 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 610 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 611 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 612 if(strcmp(moji,"b")==0 || strcmp(moji,"q")==0){break;}
ryousato 3:d55ebd20d750 613 for(int i=0; i<3; i++){suuji[i] = 0;}
ryousato 3:d55ebd20d750 614 for(int i=0; i<3; i++){
ryousato 3:d55ebd20d750 615 suuji[i] = moji[i];
ryousato 3:d55ebd20d750 616 suuji[i] -= 48;
ryousato 3:d55ebd20d750 617 }
ryousato 3:d55ebd20d750 618 for(int i=0; i<3; i++){moji[i] = '0';}
ryousato 3:d55ebd20d750 619 if(suuji[0]>=0&&suuji[0]<=9){
ryousato 3:d55ebd20d750 620 if(suuji[1]>=0&&suuji[1]<=9){
ryousato 3:d55ebd20d750 621 if(suuji[2]>=0&&suuji[2]<=9){
ryousato 3:d55ebd20d750 622 suuji[0] *= 100;
ryousato 3:d55ebd20d750 623 suuji[1] *= 10;
ryousato 3:d55ebd20d750 624 }
ryousato 3:d55ebd20d750 625 else{
ryousato 3:d55ebd20d750 626 suuji[0] *= 10;
ryousato 3:d55ebd20d750 627 suuji[2] = 0;
ryousato 3:d55ebd20d750 628 }
ryousato 3:d55ebd20d750 629 }
ryousato 3:d55ebd20d750 630 else{
ryousato 3:d55ebd20d750 631 suuji[1] = 0;
ryousato 3:d55ebd20d750 632 suuji[2] = 0;
ryousato 3:d55ebd20d750 633 }
ryousato 3:d55ebd20d750 634 }
ryousato 3:d55ebd20d750 635 else{serial.printf("\r\n\r\n NG!\r\n"); break;}
ryousato 3:d55ebd20d750 636
ryousato 3:d55ebd20d750 637 wa = suuji[0]+suuji[1]+suuji[2];
ryousato 3:d55ebd20d750 638
ryousato 3:d55ebd20d750 639 incdec(incr,wa,CorF,mode);
ryousato 3:d55ebd20d750 640
ryousato 3:d55ebd20d750 641 }
ryousato 3:d55ebd20d750 642 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 643 }
ryousato 3:d55ebd20d750 644 } //numモード2
ryousato 3:d55ebd20d750 645 if(strcmp(moji,"b")==0){
ryousato 3:d55ebd20d750 646 serial.printf("\r\n return\r\n");
ryousato 3:d55ebd20d750 647 break; //ループ5ブレイク
ryousato 3:d55ebd20d750 648 }
ryousato 3:d55ebd20d750 649 else if(strcmp(moji,"q")==0){break;}
ryousato 3:d55ebd20d750 650 } //ループ5
ryousato 3:d55ebd20d750 651 if(strcmp(moji,"q")==0){break;} //ループ5→4ブレイク
ryousato 3:d55ebd20d750 652 } //ループ4
ryousato 3:d55ebd20d750 653 if(strcmp(moji,"b")==0){
ryousato 3:d55ebd20d750 654 serial.printf("\r\n return\r\n");
ryousato 3:d55ebd20d750 655 break; //ループ4→3ブレイク
ryousato 3:d55ebd20d750 656 }
ryousato 3:d55ebd20d750 657 else if(strcmp(moji,"q")==0){break;} //ループ4→3ブレイク
ryousato 3:d55ebd20d750 658 } //if文
ryousato 3:d55ebd20d750 659 } //ループ3
ryousato 3:d55ebd20d750 660 if(strcmp(moji,"q")==0){break;} //ループ3→2ブレイク
ryousato 3:d55ebd20d750 661 } //ループ2
ryousato 3:d55ebd20d750 662 if(strcmp(moji,"q")==0){
ryousato 3:d55ebd20d750 663 serial.printf("\r\n quit\r\n");
ryousato 3:d55ebd20d750 664 break; //ループ2→1ブレイク
ryousato 3:d55ebd20d750 665 }
ryousato 3:d55ebd20d750 666 } //ループ1
ryousato 3:d55ebd20d750 667
ryousato 3:d55ebd20d750 668 serial.printf("\r\n MANUAL_ADJ END");
ryousato 3:d55ebd20d750 669 }
ryousato 3:d55ebd20d750 670
ryousato 3:d55ebd20d750 671 /******************************************************************************/
ryousato 3:d55ebd20d750 672 //タイマー割込み https://monoist.atmarkit.co.jp/mn/articles/1506/19/news001_2.html
ryousato 3:d55ebd20d750 673 /******************************************************************************/
ryousato 3:d55ebd20d750 674 /*
ryousato 3:d55ebd20d750 675 void attime(){
ryousato 3:d55ebd20d750 676 led1 = !led1;
ryousato 3:d55ebd20d750 677 }
ryousato 3:d55ebd20d750 678 */
ryousato 3:d55ebd20d750 679 /******************************************************************************/
ryousato 3:d55ebd20d750 680 //タイマー割込み
ryousato 3:d55ebd20d750 681 //オフセット補正したActualVrefを求める (平均値を出しているだけ)
ryousato 3:d55ebd20d750 682 /******************************************************************************/
ryousato 3:d55ebd20d750 683 void AVrefcal(){
ryousato 3:d55ebd20d750 684 led1 = !led1;
ryousato 3:d55ebd20d750 685
ryousato 3:d55ebd20d750 686 if(mode_p == 1){AD_val = AD_TRANS_IN.read();}
ryousato 3:d55ebd20d750 687 else if(mode_p==2 || mode_p==3){AD_val = AD_CT_IN.read();}
ryousato 3:d55ebd20d750 688
ryousato 3:d55ebd20d750 689 AD_val = AD_val * Vcc; //(val)
ryousato 3:d55ebd20d750 690 AD_flag = 1;
ryousato 3:d55ebd20d750 691
ryousato 3:d55ebd20d750 692 //serial.printf("\r\n AD_val = %f",AD_val);
ryousato 2:5e6613f149d4 693 }
ryousato 2:5e6613f149d4 694
ryousato 3:d55ebd20d750 695 ////////////////////////////
ryousato 3:d55ebd20d750 696 //サンプリング ActualVref
ryousato 3:d55ebd20d750 697 //mode 1:TRANS 2:CT1 3:CT2
ryousato 3:d55ebd20d750 698 ////////////////////////////
ryousato 3:d55ebd20d750 699 void offsetcal(int mode){
ryousato 3:d55ebd20d750 700 AD_count = 0;
ryousato 3:d55ebd20d750 701 AD_flag = 0;
ryousato 3:d55ebd20d750 702 AD_val = 0;
ryousato 3:d55ebd20d750 703 AD_val_sum = 0;
ryousato 3:d55ebd20d750 704
ryousato 3:d55ebd20d750 705 mode_p = mode;
ryousato 3:d55ebd20d750 706 if(mode == 1){coilEN2 = 0;} //TRANS_OUTをAD入力方向へ切替え
ryousato 3:d55ebd20d750 707 else if(mode == 2){coilEN3 = 0; coilEN4 = 0;} //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 708 else if(mode == 3){coilEN3 = 0; coilEN4 = 1;} //CT1_OUT1と2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 709
ryousato 3:d55ebd20d750 710 wait(0.05);
ryousato 3:d55ebd20d750 711
ryousato 5:5d7483b46cda 712
ryousato 5:5d7483b46cda 713 //timerint.attach(&AVrefcal,0.020408); //49Hz
ryousato 5:5d7483b46cda 714 timerint.attach(&AVrefcal,0.008); //125Hz
ryousato 3:d55ebd20d750 715
ryousato 3:d55ebd20d750 716 timecount.start();
ryousato 3:d55ebd20d750 717
ryousato 3:d55ebd20d750 718 while(1){
ryousato 5:5d7483b46cda 719 if(AD_count < 250 && AD_flag == 1){ //サンプリング数0~Nで、サンプル取得されたとき
ryousato 3:d55ebd20d750 720 AD_count ++;
ryousato 3:d55ebd20d750 721 AD_val_sum += AD_val;
ryousato 3:d55ebd20d750 722 AD_flag = 0;
ryousato 3:d55ebd20d750 723 if(AD_count == 0){timecount.start();} //0~Nのサンプリング時間計測用スタート時
ryousato 5:5d7483b46cda 724 else if(AD_count == 250){ //0~Nのサンプリング時間計測用ストップ時
ryousato 3:d55ebd20d750 725 timecount.stop();
ryousato 5:5d7483b46cda 726 serial.printf("\r\n t = %f",timecount.read()); //計測時間表示
ryousato 3:d55ebd20d750 727 timecount.reset();
ryousato 3:d55ebd20d750 728 }
ryousato 3:d55ebd20d750 729 }
ryousato 5:5d7483b46cda 730 else if(AD_count < 250 && AD_flag == 0){} //サンプリング数0~Nで、サンプル取得されてないとき
ryousato 3:d55ebd20d750 731 else{ //サンプリング完了時
ryousato 3:d55ebd20d750 732 Vref = AD_val_sum / AD_count;
ryousato 3:d55ebd20d750 733 ActualVref[mode_p] = Vref; //格納
ryousato 4:e69f73c66598 734 serial.printf("\r\n Vref%d = %f",mode_p,ActualVref[mode_p]);
ryousato 3:d55ebd20d750 735 break;
ryousato 3:d55ebd20d750 736 }
ryousato 3:d55ebd20d750 737 }
ryousato 3:d55ebd20d750 738 timerint.detach();
ryousato 3:d55ebd20d750 739 led1 = 0;
ryousato 3:d55ebd20d750 740 }
ryousato 3:d55ebd20d750 741
ryousato 4:e69f73c66598 742 void dispVref(){
ryousato 4:e69f73c66598 743 serial.printf("\r\n TRANS_Vref = %f",ActualVref[1]);
ryousato 4:e69f73c66598 744 serial.printf("\r\n CT1___Vref = %f",ActualVref[2]);
ryousato 4:e69f73c66598 745 serial.printf("\r\n CT2___Vref = %f",ActualVref[3]);
ryousato 3:d55ebd20d750 746 }
ryousato 3:d55ebd20d750 747 /******************************************************************************/
ryousato 3:d55ebd20d750 748 //タイマー割込み
ryousato 3:d55ebd20d750 749 //AD変換によりVrmsを求める
ryousato 3:d55ebd20d750 750 /******************************************************************************/
ryousato 3:d55ebd20d750 751 //タイマー割込み実行関数
ryousato 3:d55ebd20d750 752 void timerAD(){
ryousato 3:d55ebd20d750 753 led1 = !led1;
ryousato 4:e69f73c66598 754 //serial.printf("\r\n mode_p = %d",mode_p);
ryousato 4:e69f73c66598 755 //serial.printf("\r\n ActualVref = %f",ActualVref[mode_p]);
ryousato 3:d55ebd20d750 756
ryousato 3:d55ebd20d750 757 if(mode_p == 1){AD_val = AD_TRANS_IN.read();}
ryousato 3:d55ebd20d750 758 else if(mode_p==2 || mode_p==3){AD_val = AD_CT_IN.read();}
ryousato 3:d55ebd20d750 759
ryousato 3:d55ebd20d750 760 //serial.printf("\r\n AD_val = %f",AD_val);
ryousato 3:d55ebd20d750 761
ryousato 3:d55ebd20d750 762 AD_val *= Vcc;
ryousato 3:d55ebd20d750 763 AD_val -= ActualVref[mode_p];
ryousato 3:d55ebd20d750 764 //serial.printf("\r\n AD_val*Vcc-Vref = %f",AD_val);
ryousato 3:d55ebd20d750 765 AD_val *= AD_val;
ryousato 3:d55ebd20d750 766 AD_flag = 1;
ryousato 3:d55ebd20d750 767
ryousato 3:d55ebd20d750 768 //serial.printf("\r\n AD_val = %f",AD_val);
ryousato 3:d55ebd20d750 769 }
ryousato 3:d55ebd20d750 770 ////////////////////////////
ryousato 3:d55ebd20d750 771 //サンプリング Vrms
ryousato 3:d55ebd20d750 772 //mode 1:TRANS 2:CT1 3:CT2
ryousato 3:d55ebd20d750 773 ////////////////////////////
ryousato 3:d55ebd20d750 774 void ADVrms(int mode){
ryousato 3:d55ebd20d750 775 AD_count = 0;
ryousato 3:d55ebd20d750 776 AD_flag = 0;
ryousato 3:d55ebd20d750 777 AD_val = 0;
ryousato 3:d55ebd20d750 778 AD_val_sum = 0;
ryousato 3:d55ebd20d750 779
ryousato 3:d55ebd20d750 780 mode_p = mode;
ryousato 3:d55ebd20d750 781 if(mode == 1){coilEN2 = 0;} //TRANS_OUTをAD入力方向へ切替え
ryousato 3:d55ebd20d750 782 else if(mode == 2){coilEN3 = 0; coilEN4 = 0;} //CT1_OUT1をAD入力方向へ切替え
ryousato 3:d55ebd20d750 783 else if(mode == 3){coilEN3 = 0; coilEN4 = 1;} //CT1_OUT2をAD入力方向へ切替え
ryousato 3:d55ebd20d750 784
ryousato 3:d55ebd20d750 785 wait(0.05);
ryousato 3:d55ebd20d750 786
ryousato 5:5d7483b46cda 787 // timerint.attach(&timerAD,0.020408);
ryousato 5:5d7483b46cda 788 timerint.attach(&timerAD,0.008); //125Hz
ryousato 3:d55ebd20d750 789
ryousato 3:d55ebd20d750 790 timecount.start();
ryousato 3:d55ebd20d750 791
ryousato 3:d55ebd20d750 792 while(1){
ryousato 5:5d7483b46cda 793 if(AD_count < 250 && AD_flag == 1){ //サンプリング数0~Nで、サンプル取得されたとき
ryousato 3:d55ebd20d750 794 AD_count ++;
ryousato 3:d55ebd20d750 795 AD_val_sum += AD_val;
ryousato 3:d55ebd20d750 796 AD_flag = 0;
ryousato 3:d55ebd20d750 797 if(AD_count == 0){timecount.start();} //0~Nのサンプリング時間計測用スタート時
ryousato 5:5d7483b46cda 798 else if(AD_count == 250){ //0~Nのサンプリング時間計測用ストップ時
ryousato 3:d55ebd20d750 799 timecount.stop();
ryousato 3:d55ebd20d750 800 //serial.printf("\r\n t = %f",timecount.read());
ryousato 3:d55ebd20d750 801 timecount.reset();
ryousato 3:d55ebd20d750 802 }
ryousato 3:d55ebd20d750 803 }
ryousato 5:5d7483b46cda 804 else if(AD_count < 250 && AD_flag == 0){}//サンプリング数0~Nで、サンプル取得されてないとき
ryousato 3:d55ebd20d750 805 else{ //サンプリング完了時
ryousato 3:d55ebd20d750 806 AD_val_sum /= AD_count;
ryousato 3:d55ebd20d750 807 Vrms = sqrtf(AD_val_sum);
ryousato 3:d55ebd20d750 808 //serial.printf("\r\n AD_val_sum = %f",AD_val_sum);
ryousato 3:d55ebd20d750 809 serial.printf("\r\n Vrms = %f",Vrms);
ryousato 3:d55ebd20d750 810 break;
ryousato 3:d55ebd20d750 811 }
ryousato 3:d55ebd20d750 812 }
ryousato 3:d55ebd20d750 813 timerint.detach();
ryousato 3:d55ebd20d750 814 led1 = 0;
ryousato 2:5e6613f149d4 815 }
ryousato 2:5e6613f149d4 816
ryousato 3:d55ebd20d750 817 //デバッグ用
ryousato 3:d55ebd20d750 818 void att(int mode){
ryousato 3:d55ebd20d750 819 mode_p = mode;
ryousato 5:5d7483b46cda 820 //timerint.attach(&timerAD,0.020408); //サンプリング数=49 20.4ms周期
ryousato 5:5d7483b46cda 821 timerint.attach(&timerAD,0.008);
ryousato 3:d55ebd20d750 822 }
ryousato 3:d55ebd20d750 823 void det(){timerint.detach();}
ryousato 3:d55ebd20d750 824
ryousato 3:d55ebd20d750 825 /******************************************************************************/
ryousato 3:d55ebd20d750 826 //自動調整
ryousato 3:d55ebd20d750 827 //TRANS_OUT設定範囲 : AC 50~138V
ryousato 3:d55ebd20d750 828 //CT1,2_OUT設定範囲 : AC 10~120A
ryousato 3:d55ebd20d750 829 /******************************************************************************/
ryousato 3:d55ebd20d750 830 void auto_adj(int mode){
ryousato 3:d55ebd20d750 831
ryousato 5:5d7483b46cda 832 int CTrange = 0; //[60A:120A] [0:1]
ryousato 5:5d7483b46cda 833
ryousato 3:d55ebd20d750 834 ///////////////////////////////////////////////////////////////////////////////
ryousato 3:d55ebd20d750 835 POTini(mode); //POTを初期値に設定
ryousato 3:d55ebd20d750 836 ///////////////////////////////////////////////////////////////////////////////
ryousato 3:d55ebd20d750 837
ryousato 3:d55ebd20d750 838 //'60A' or '120A'
ryousato 3:d55ebd20d750 839 if(mode == 2 || mode == 3){
ryousato 3:d55ebd20d750 840 serial.printf("\r\n Select range mode. Type '60A' or '120A'.");
ryousato 3:d55ebd20d750 841 while(1){
ryousato 3:d55ebd20d750 842 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 843 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 844 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 845
ryousato 3:d55ebd20d750 846 if(count == 5 ){ // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 847 moji[5] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 848 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 849 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 850 }
ryousato 3:d55ebd20d750 851
ryousato 3:d55ebd20d750 852 else if(moji[0] == '\n'){count = 0;}
ryousato 3:d55ebd20d750 853
ryousato 3:d55ebd20d750 854 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 855 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 856 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 857 if (strcmp(moji, "60A") == 0){
ryousato 3:d55ebd20d750 858 SCT_AMP = 0; //CT入力アンプ 60Aレベル切替え
ryousato 5:5d7483b46cda 859 CTrange = 0;
ryousato 3:d55ebd20d750 860 break;}
ryousato 3:d55ebd20d750 861 else if(strcmp(moji, "120A") == 0){
ryousato 3:d55ebd20d750 862 SCT_AMP = 1; //CT入力アンプ 120Aレベル切替え
ryousato 5:5d7483b46cda 863 CTrange = 1;
ryousato 3:d55ebd20d750 864 break;}
ryousato 3:d55ebd20d750 865 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 866 }
ryousato 3:d55ebd20d750 867 else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 868 }
ryousato 3:d55ebd20d750 869 }
ryousato 3:d55ebd20d750 870 serial.printf("\r\n OK");
ryousato 3:d55ebd20d750 871 } //'60A' or '120A'
ryousato 3:d55ebd20d750 872
ryousato 3:d55ebd20d750 873 while(1) { //ループ1
ryousato 3:d55ebd20d750 874 int adjnum = 0;
ryousato 3:d55ebd20d750 875
ryousato 3:d55ebd20d750 876 //シリアル表示
ryousato 3:d55ebd20d750 877 if(mode == 1) {
ryousato 3:d55ebd20d750 878 serial.printf("\r\n Type number AC [50-138] V. ('q' quit)");
ryousato 3:d55ebd20d750 879 } else if(mode==2 || mode==3) {
ryousato 3:d55ebd20d750 880 serial.printf("\r\n Type number AC [10-120] A. ('q' quit)\r\n (If 61~120A, range mode change 120A automatically.)");
ryousato 3:d55ebd20d750 881 }
ryousato 3:d55ebd20d750 882
ryousato 3:d55ebd20d750 883 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 884 moji[i] = '0'; //mojiを初期化
ryousato 3:d55ebd20d750 885 }
ryousato 3:d55ebd20d750 886
ryousato 3:d55ebd20d750 887 while(1) { //adjnumループ
ryousato 3:d55ebd20d750 888 if(serial.readable()) { // 受信確認
ryousato 3:d55ebd20d750 889 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 890 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 891
ryousato 3:d55ebd20d750 892 if(count == 4 ) { // ①文字数が既定の個数になった場合
ryousato 3:d55ebd20d750 893 moji[4] = '\0'; // 末尾に終端文字を入れる
ryousato 3:d55ebd20d750 894 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 895 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 896 } else if(moji[0] == '\n') {
ryousato 3:d55ebd20d750 897 count = 0;
ryousato 3:d55ebd20d750 898 } else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 899 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 900 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 901 if(strcmp(moji,"q")==0) {
ryousato 3:d55ebd20d750 902 break;
ryousato 3:d55ebd20d750 903 }
ryousato 3:d55ebd20d750 904 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 905 suuji[i] = 0; //suujiを初期化
ryousato 3:d55ebd20d750 906 }
ryousato 3:d55ebd20d750 907 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 908 suuji[i] = moji[i];
ryousato 3:d55ebd20d750 909 suuji[i] -= 48; //ASCII → 10進
ryousato 3:d55ebd20d750 910 }
ryousato 3:d55ebd20d750 911 for(int i=0; i<3; i++) {
ryousato 3:d55ebd20d750 912 moji[i] = '0'; //mojiを初期化
ryousato 3:d55ebd20d750 913 }
ryousato 3:d55ebd20d750 914
ryousato 3:d55ebd20d750 915 //数字であるか判定
ryousato 3:d55ebd20d750 916 if(suuji[0]>=0 && suuji[0]<=9) {
ryousato 3:d55ebd20d750 917 if(suuji[1]>=0&&suuji[1]<=9) {
ryousato 3:d55ebd20d750 918 if(suuji[2]>=0&&suuji[2]<=9) {
ryousato 3:d55ebd20d750 919 suuji[0] *= 100;
ryousato 3:d55ebd20d750 920 suuji[1] *= 10;
ryousato 3:d55ebd20d750 921 } else {
ryousato 3:d55ebd20d750 922 suuji[0] *= 10;
ryousato 3:d55ebd20d750 923 suuji[2] = 0;
ryousato 3:d55ebd20d750 924 }
ryousato 3:d55ebd20d750 925 } else {
ryousato 3:d55ebd20d750 926 suuji[1] = 0;
ryousato 3:d55ebd20d750 927 suuji[2] = 0;
ryousato 3:d55ebd20d750 928 }
ryousato 3:d55ebd20d750 929 } else {
ryousato 3:d55ebd20d750 930 serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 931 adjnum = 1;
ryousato 3:d55ebd20d750 932 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 933 }
ryousato 3:d55ebd20d750 934
ryousato 3:d55ebd20d750 935 setval = suuji[0]+suuji[1]+suuji[2];
ryousato 3:d55ebd20d750 936
ryousato 3:d55ebd20d750 937 //設定範囲判定 と Vrms換算
ryousato 3:d55ebd20d750 938 if(mode == 1){
ryousato 3:d55ebd20d750 939 if(setval >= 50 && setval <= 138){
ryousato 3:d55ebd20d750 940 setval = setval * 0.12 * 0.196078; //0.12:トランス比 0.196078:分圧抵抗比
ryousato 3:d55ebd20d750 941 //serial.printf("\r\n %f",setval);
ryousato 3:d55ebd20d750 942 setval /= 2;
ryousato 3:d55ebd20d750 943 setval /= sqrtf(2);
ryousato 3:d55ebd20d750 944 serial.printf("\r\n setval = %f",setval);
ryousato 3:d55ebd20d750 945 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 946 }
ryousato 3:d55ebd20d750 947 else{
ryousato 3:d55ebd20d750 948 serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 949 adjnum = 1;
ryousato 3:d55ebd20d750 950 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 951 }
ryousato 3:d55ebd20d750 952 }
ryousato 3:d55ebd20d750 953 else if(mode==2 || mode==3){
ryousato 3:d55ebd20d750 954 if(setval >= 10 && setval <= 120){
ryousato 5:5d7483b46cda 955 if(setval >= 61 && setval <= 120){SCT_AMP = 1; CTrange = 1;}
ryousato 5:5d7483b46cda 956 if(CTrange == 0){
ryousato 5:5d7483b46cda 957 setval = setval / 3000 * 10 * 5.666667; //3000:CT比 10:終端抵抗 5.666667:分圧抵抗比
ryousato 5:5d7483b46cda 958 }
ryousato 5:5d7483b46cda 959 else if(CTrange == 1){
ryousato 5:5d7483b46cda 960 setval = setval / 3000 * 10 * 2.833333; //3000:CT比 10:終端抵抗 2.833333:分圧抵抗比
ryousato 5:5d7483b46cda 961 }
ryousato 3:d55ebd20d750 962 serial.printf("\r\n setval = %f",setval);
ryousato 3:d55ebd20d750 963 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 964 }
ryousato 3:d55ebd20d750 965 else{
ryousato 3:d55ebd20d750 966 serial.printf("\r\n\r\n NG!\r\n");
ryousato 3:d55ebd20d750 967 adjnum = 1;
ryousato 3:d55ebd20d750 968 break; //adjnumループ ブレイク
ryousato 3:d55ebd20d750 969 }
ryousato 3:d55ebd20d750 970 }
ryousato 3:d55ebd20d750 971 } else count++; // 文字カウンタに1加算
ryousato 3:d55ebd20d750 972 } //if
ryousato 3:d55ebd20d750 973 } //adjnumループ
ryousato 3:d55ebd20d750 974 if(adjnum==0 || strcmp(moji,"q")==0){break;} //ループ1ブレイク
ryousato 3:d55ebd20d750 975 } //ループ1
ryousato 3:d55ebd20d750 976
ryousato 3:d55ebd20d750 977 int adjcount = 0; //ループ2上限変数
ryousato 3:d55ebd20d750 978
ryousato 3:d55ebd20d750 979 while(1){ //ループ2
ryousato 3:d55ebd20d750 980 if(strcmp(moji,"q")==0){
ryousato 3:d55ebd20d750 981 serial.printf("\r\n quit");
ryousato 3:d55ebd20d750 982 break; //ループ2ブレイク
ryousato 3:d55ebd20d750 983 }
ryousato 4:e69f73c66598 984 else if(adjcount >= 15){ //ループ2上限値
ryousato 3:d55ebd20d750 985 serial.printf("\r\n\r\n ERROR!\r\n");
ryousato 3:d55ebd20d750 986 break; //ループ2ブレイク
ryousato 3:d55ebd20d750 987 }
ryousato 3:d55ebd20d750 988
ryousato 3:d55ebd20d750 989 ADVrms(mode); //現在のVrms値
ryousato 3:d55ebd20d750 990
ryousato 3:d55ebd20d750 991 diff = setval - Vrms; //差分
ryousato 3:d55ebd20d750 992 //serial.printf("\r\n diff = %f",diff);
ryousato 3:d55ebd20d750 993
ryousato 3:d55ebd20d750 994 //増減方向判定
ryousato 3:d55ebd20d750 995 if(diff > 0){incr = 1;} //増
ryousato 3:d55ebd20d750 996 else if(diff < 0){
ryousato 3:d55ebd20d750 997 incr = 0; //減
ryousato 3:d55ebd20d750 998 diff *= -1; //絶対値
ryousato 3:d55ebd20d750 999 }
ryousato 3:d55ebd20d750 1000 else if(diff == 0){break;} //差分無し ループ2ブレイク
ryousato 3:d55ebd20d750 1001 serial.printf("\r\n diff = %f",diff);
ryousato 3:d55ebd20d750 1002 serial.printf("\r\n incr = %d",incr);
ryousato 5:5d7483b46cda 1003
ryousato 5:5d7483b46cda 1004
ryousato 5:5d7483b46cda 1005 //粗、微 読み取り
ryousato 5:5d7483b46cda 1006 ADDR(mode * 2); //TRANS粗調整POT
ryousato 5:5d7483b46cda 1007 int read_val_Coarse = spi.write(0x0C00);
ryousato 5:5d7483b46cda 1008 read_val_Coarse &= 0x00FF;
ryousato 5:5d7483b46cda 1009
ryousato 5:5d7483b46cda 1010 wait(0.001);
ryousato 5:5d7483b46cda 1011
ryousato 5:5d7483b46cda 1012 ADDR(mode * 2 - 1); //TRANS微調整POT
ryousato 5:5d7483b46cda 1013 int read_val_Fine = spi.write(0x0C00);
ryousato 5:5d7483b46cda 1014 read_val_Fine &= 0x00FF;
ryousato 3:d55ebd20d750 1015
ryousato 5:5d7483b46cda 1016 //serial.printf("\r\n read_val_Coarse = %d",read_val_Coarse);
ryousato 5:5d7483b46cda 1017 //serial.printf("\r\n read_val_Fine = %d",read_val_Fine);
ryousato 5:5d7483b46cda 1018
ryousato 5:5d7483b46cda 1019
ryousato 5:5d7483b46cda 1020 if(mode == 1){
ryousato 5:5d7483b46cda 1021 //粗・微 調整判定
ryousato 5:5d7483b46cda 1022 float diffref_C = 0.000412 / 255 * read_val_Fine + 0.0032;
ryousato 5:5d7483b46cda 1023 float diffref_F = 0.000412 / 255 * read_val_Coarse + 0.000165;
ryousato 5:5d7483b46cda 1024 float diffcom = diffref_C * 1.5;
ryousato 5:5d7483b46cda 1025 //serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 5:5d7483b46cda 1026 //serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 5:5d7483b46cda 1027 //serial.printf("\r\n diffcom = %f",diffcom);
ryousato 5:5d7483b46cda 1028 if(diff >= diffcom){CorF = 2;} //粗
ryousato 5:5d7483b46cda 1029 else if(diff < diffcom){
ryousato 5:5d7483b46cda 1030 CorF = 1; //微
ryousato 5:5d7483b46cda 1031 if(diff < 0.001){break;}//差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 5:5d7483b46cda 1032 }
ryousato 5:5d7483b46cda 1033 serial.printf("\r\n CorF = %d",CorF);
ryousato 5:5d7483b46cda 1034
ryousato 5:5d7483b46cda 1035 //調整tap値算出
ryousato 5:5d7483b46cda 1036 if(CorF == 2){val = diff / diffref_C;}
ryousato 5:5d7483b46cda 1037 else if(CorF == 1){val = diff / diffref_F;}
ryousato 5:5d7483b46cda 1038 serial.printf("\r\n tap(val) = %d",val);
ryousato 3:d55ebd20d750 1039 }
ryousato 5:5d7483b46cda 1040 else if(mode==2 || mode==3){
ryousato 5:5d7483b46cda 1041 if(CTrange == 0){ //60Aのとき
ryousato 5:5d7483b46cda 1042 //粗・微 調整判定
ryousato 5:5d7483b46cda 1043 float diffref_C = 0.001966 / 255 * read_val_Fine + 0.00885;
ryousato 5:5d7483b46cda 1044 float diffref_F = 0.001966 / 255 * read_val_Coarse + 0.000145;
ryousato 5:5d7483b46cda 1045 float diffcom = diffref_C * 1.5;
ryousato 5:5d7483b46cda 1046 serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 5:5d7483b46cda 1047 serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 5:5d7483b46cda 1048 serial.printf("\r\n diffcom = %f",diffcom);
ryousato 5:5d7483b46cda 1049 if(diff >= diffcom){CorF = 2;} //粗
ryousato 5:5d7483b46cda 1050 else if(diff < diffcom){
ryousato 5:5d7483b46cda 1051 CorF = 1; //微
ryousato 5:5d7483b46cda 1052 if(diff < 0.001){break;}//差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 5:5d7483b46cda 1053 }
ryousato 5:5d7483b46cda 1054 serial.printf("\r\n CorF = %d",CorF);
ryousato 3:d55ebd20d750 1055
ryousato 5:5d7483b46cda 1056 //調整tap値算出
ryousato 5:5d7483b46cda 1057 if(CorF == 2){val = diff / diffref_C;}
ryousato 5:5d7483b46cda 1058 else if(CorF == 1){val = diff / diffref_F;}
ryousato 5:5d7483b46cda 1059 serial.printf("\r\n tap(val) = %d",val);
ryousato 5:5d7483b46cda 1060 }
ryousato 5:5d7483b46cda 1061 else if(CTrange == 1){ //120Aのとき
ryousato 5:5d7483b46cda 1062 //粗・微 調整判定
ryousato 5:5d7483b46cda 1063 float diffref_C = 0.000983 / 255 * read_val_Fine + 0.0044;
ryousato 5:5d7483b46cda 1064 float diffref_F = 0.000983 / 255 * read_val_Coarse + 0.0000993;
ryousato 5:5d7483b46cda 1065 float diffcom = diffref_C * 1.5;
ryousato 5:5d7483b46cda 1066 serial.printf("\r\n diffref_C = %f",diffref_C);
ryousato 5:5d7483b46cda 1067 serial.printf("\r\n diffref_F = %f",diffref_F);
ryousato 5:5d7483b46cda 1068 serial.printf("\r\n diffcom = %f",diffcom);
ryousato 5:5d7483b46cda 1069 if(diff >= diffcom){CorF = 2;} //粗
ryousato 5:5d7483b46cda 1070 else if(diff < diffcom){
ryousato 5:5d7483b46cda 1071 CorF = 1; //微
ryousato 5:5d7483b46cda 1072 if(diff < 0.001){break;}//差分微小 ループ2ブレイク(通常最終ゴール)
ryousato 5:5d7483b46cda 1073 }
ryousato 5:5d7483b46cda 1074 serial.printf("\r\n CorF = %d",CorF);
ryousato 3:d55ebd20d750 1075
ryousato 5:5d7483b46cda 1076 //調整tap値算出
ryousato 5:5d7483b46cda 1077 if(CorF == 2){val = diff / diffref_C;}
ryousato 5:5d7483b46cda 1078 else if(CorF == 1){val = diff / diffref_F;}
ryousato 5:5d7483b46cda 1079 serial.printf("\r\n tap(val) = %d",val);
ryousato 5:5d7483b46cda 1080 }
ryousato 5:5d7483b46cda 1081 }
ryousato 3:d55ebd20d750 1082 //ワイパー位置移動
ryousato 3:d55ebd20d750 1083 incdec(incr, val, CorF, mode);
ryousato 3:d55ebd20d750 1084
ryousato 3:d55ebd20d750 1085 adjcount ++;
ryousato 3:d55ebd20d750 1086
ryousato 3:d55ebd20d750 1087 } //ループ2
ryousato 3:d55ebd20d750 1088
ryousato 5:5d7483b46cda 1089 if(mode==1){coilEN2 = 1;} //TRANS_OUTを外部出力へ切替え
ryousato 5:5d7483b46cda 1090 else if(mode==2 || mode==3){coilEN3 = 1; coilEN4 = 0;} //CT1_OUT1と2を外部出力へ切替え
ryousato 3:d55ebd20d750 1091
ryousato 3:d55ebd20d750 1092 serial.printf("\r\n ADJ END");
ryousato 3:d55ebd20d750 1093 }
ryousato 3:d55ebd20d750 1094
ryousato 4:e69f73c66598 1095 void Vswitch(int a){
ryousato 4:e69f73c66598 1096 coilEN5 = a;
ryousato 4:e69f73c66598 1097 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1098 }
ryousato 4:e69f73c66598 1099 void Fswitch(int a){
ryousato 4:e69f73c66598 1100 coilEN1 = a;
ryousato 4:e69f73c66598 1101 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1102 }
ryousato 4:e69f73c66598 1103 void Tswitch(int a){
ryousato 4:e69f73c66598 1104 coilEN2 = a;
ryousato 4:e69f73c66598 1105 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1106 }
ryousato 4:e69f73c66598 1107 void Cswitch(int a,int b){
ryousato 4:e69f73c66598 1108 coilEN3 = a;
ryousato 4:e69f73c66598 1109 coilEN4 = b;
ryousato 4:e69f73c66598 1110 serial.printf("\r\n OK");
ryousato 4:e69f73c66598 1111 }
ryousato 5:5d7483b46cda 1112 void Rswitch(int a){
ryousato 5:5d7483b46cda 1113 SCT_AMP = a;
ryousato 5:5d7483b46cda 1114 serial.printf("\r\n OK");
ryousato 5:5d7483b46cda 1115 }
ryousato 4:e69f73c66598 1116
ryousato 3:d55ebd20d750 1117 /******************************************************************************/
ryousato 3:d55ebd20d750 1118 //シリアル入力受付 [メイン]
ryousato 3:d55ebd20d750 1119 /******************************************************************************/
ryousato 0:df1e1f84ded8 1120 void serial_inout(){
ryousato 0:df1e1f84ded8 1121 if(serial.readable()) { // 受信確認
ryousato 0:df1e1f84ded8 1122 moji[count] = serial.getc(); //キーボード入力文字を1文字ずつmojiに代入
ryousato 3:d55ebd20d750 1123 serial.printf("%c", moji[count]); //シリアル出力表示
ryousato 3:d55ebd20d750 1124 // serial.printf("%c(%d)", moji[count],count); //シリアル出力表示
ryousato 0:df1e1f84ded8 1125
ryousato 0:df1e1f84ded8 1126 if(count == 31 ){ // ①文字数が既定の個数になった場合
ryousato 0:df1e1f84ded8 1127 moji[31] = '\0'; // 末尾に終端文字を入れる
ryousato 0:df1e1f84ded8 1128 count = 0; // 文字カウンタをリセット
ryousato 3:d55ebd20d750 1129 serial.printf("\r\n\r\n ERROR!");
ryousato 0:df1e1f84ded8 1130 }
ryousato 0:df1e1f84ded8 1131
ryousato 1:88f0bc1e1aff 1132 else if(moji[0] == '\n'){count = 0;}
ryousato 0:df1e1f84ded8 1133
ryousato 0:df1e1f84ded8 1134 else if((moji[count] == '\r')) { // ②CRを受信した場合
ryousato 3:d55ebd20d750 1135 moji[count] = '\0'; //末尾に終端文字を入れる
ryousato 3:d55ebd20d750 1136 count = 0; //文字カウンタをリセット
ryousato 3:d55ebd20d750 1137 if (strcmp(moji, "cmd") == 0){helpwrite();} //コマンド一覧表示
ryousato 3:d55ebd20d750 1138 else if(strcmp(moji, "help") == 0){helpwrite();} //コマンド一覧表示
ryousato 3:d55ebd20d750 1139 else if(strcmp(moji, "?") == 0){helpwrite();} //コマンド一覧表示
ryousato 3:d55ebd20d750 1140 else if(strcmp(moji, "initial") == 0){initial();} //初期化
ryousato 4:e69f73c66598 1141
ryousato 4:e69f73c66598 1142 else if(strcmp(moji, "V_OFF") == 0){Vswitch(0);} //±5V,±15Vオフ
ryousato 4:e69f73c66598 1143 else if(strcmp(moji, "V_ON") == 0){Vswitch(1);} //±5V,±15Vオン
ryousato 4:e69f73c66598 1144 else if(strcmp(moji, "50Hz") == 0){Fswitch(0);} //周波数切替
ryousato 4:e69f73c66598 1145 else if(strcmp(moji, "60Hz") == 0){Fswitch(1);} //周波数切替
ryousato 4:e69f73c66598 1146 else if(strcmp(moji, "TRANS_OUT_ADINT") == 0){Tswitch(0);} //TRANS_OUT内部AD入力
ryousato 4:e69f73c66598 1147 else if(strcmp(moji, "TRANS_OUT_EXT") == 0){Tswitch(1);} //TRANS_OUT外部出力
ryousato 4:e69f73c66598 1148 else if(strcmp(moji, "CT1_OUT_ADINT") == 0){Cswitch(0,0);} //CT1_OUT内部AD入力
ryousato 4:e69f73c66598 1149 else if(strcmp(moji, "CT2_OUT_ADINT") == 0){Cswitch(0,1);} //CT2_OUT内部AD入力
ryousato 4:e69f73c66598 1150 else if(strcmp(moji, "CT_OUT_EXT") == 0){Cswitch(1,0);} //CT1,2_OUT外部出力
ryousato 5:5d7483b46cda 1151 else if(strcmp(moji, "CTrange_60A") == 0){Rswitch(0);} //CT入力アンプゲイン60A
ryousato 5:5d7483b46cda 1152 else if(strcmp(moji, "CTrange_120A") == 0){Rswitch(0);} //CT入力アンプゲイン120A
ryousato 4:e69f73c66598 1153
ryousato 4:e69f73c66598 1154 else if(strcmp(moji, "TRANS_offset") == 0){offsetcal(1);} //TRANS_OUT ADオフセット補正
ryousato 4:e69f73c66598 1155 else if(strcmp(moji, "CT1_offset") == 0){offsetcal(2);} //CT1_OUT ADオフセット補正
ryousato 4:e69f73c66598 1156 else if(strcmp(moji, "CT2_offset") == 0){offsetcal(3);} //CT2_OUT ADオフセット補正
ryousato 4:e69f73c66598 1157 else if(strcmp(moji, "dispVref") == 0){dispVref();} //各Vref表示
ryousato 3:d55ebd20d750 1158 else if(strcmp(moji, "TRANS_ADJ") == 0){auto_adj(1);} //TRANS_OUT調整モードに移行
ryousato 3:d55ebd20d750 1159 else if(strcmp(moji, "CT1_ADJ") == 0){auto_adj(2);} //CT1_OUT調整モードに移行
ryousato 3:d55ebd20d750 1160 else if(strcmp(moji, "CT2_ADJ") == 0){auto_adj(3);} //CT2_OUT調整モードに移行
ryousato 3:d55ebd20d750 1161 else if(strcmp(moji, "MANUAL_TRANS_ADJ") == 0){manual_adj(1);} //TRANS_OUT手動調整モードに移行
ryousato 3:d55ebd20d750 1162 else if(strcmp(moji, "MANUAL_CT1_ADJ") == 0){manual_adj(2);} //CT1_OUT手動調整モードに移行
ryousato 3:d55ebd20d750 1163 else if(strcmp(moji, "MANUAL_CT2_ADJ") == 0){manual_adj(3);} //CT1_OU2手動調整モードに移行
ryousato 3:d55ebd20d750 1164
ryousato 3:d55ebd20d750 1165 //デバッグ用
ryousato 2:5e6613f149d4 1166 else if(strcmp(moji, "TCON") == 0){TCON();}
ryousato 2:5e6613f149d4 1167 else if(strcmp(moji, "TCONread") == 0){TCONread();}
ryousato 2:5e6613f149d4 1168 else if(strcmp(moji, "read") == 0){read();}
ryousato 3:d55ebd20d750 1169 else if(strcmp(moji, "write00") == 0){write00();}
ryousato 3:d55ebd20d750 1170 else if(strcmp(moji, "write7F") == 0){write7F();}
ryousato 3:d55ebd20d750 1171 else if(strcmp(moji, "writeFF") == 0){writeFF();}
ryousato 2:5e6613f149d4 1172 else if(strcmp(moji, "WLAT") == 0){WLAT();}
ryousato 3:d55ebd20d750 1173 else if(strcmp(moji, "CS0") == 0){CS(0);}
ryousato 3:d55ebd20d750 1174 else if(strcmp(moji, "CS1") == 0){CS(1);}
ryousato 3:d55ebd20d750 1175 else if(strcmp(moji, "AD1") == 0){AD(1);}
ryousato 3:d55ebd20d750 1176 else if(strcmp(moji, "AD2") == 0){AD(2);}
ryousato 3:d55ebd20d750 1177 else if(strcmp(moji, "TENinc") == 0){TENinc();}
ryousato 3:d55ebd20d750 1178 else if(strcmp(moji, "att1") == 0){att(1);}
ryousato 3:d55ebd20d750 1179 else if(strcmp(moji, "att2") == 0){att(2);}
ryousato 3:d55ebd20d750 1180 else if(strcmp(moji, "att3") == 0){att(3);}
ryousato 3:d55ebd20d750 1181 else if(strcmp(moji, "det") == 0){det();}
ryousato 3:d55ebd20d750 1182 else if(strcmp(moji, "AD1_Vrms") == 0){ADVrms(1);}
ryousato 3:d55ebd20d750 1183 else if(strcmp(moji, "AD2_Vrms") == 0){ADVrms(2);}
ryousato 3:d55ebd20d750 1184 else if(strcmp(moji, "AD3_Vrms") == 0){ADVrms(3);}
ryousato 5:5d7483b46cda 1185 else if(strcmp(moji, "ADDR1") == 0){ADDR(1);}
ryousato 5:5d7483b46cda 1186 else if(strcmp(moji, "ADDR2") == 0){ADDR(2);}
ryousato 5:5d7483b46cda 1187 else if(strcmp(moji, "ADDR3") == 0){ADDR(3);}
ryousato 5:5d7483b46cda 1188 else if(strcmp(moji, "ADDR4") == 0){ADDR(4);}
ryousato 5:5d7483b46cda 1189 else if(strcmp(moji, "ADDR5") == 0){ADDR(5);}
ryousato 5:5d7483b46cda 1190 else if(strcmp(moji, "ADDR6") == 0){ADDR(6);}
ryousato 5:5d7483b46cda 1191
ryousato 4:e69f73c66598 1192
ryousato 3:d55ebd20d750 1193 else serial.printf("\r\n\r\n NG!\r\n");
ryousato 0:df1e1f84ded8 1194 }
ryousato 3:d55ebd20d750 1195 else count++; // 文字カウンタに1加算
ryousato 0:df1e1f84ded8 1196 }
ryousato 0:df1e1f84ded8 1197 }
ryousato 0:df1e1f84ded8 1198
ryousato 3:d55ebd20d750 1199 /******************************************************************************/
ryousato 3:d55ebd20d750 1200 //メインプログラム
ryousato 3:d55ebd20d750 1201 /******************************************************************************/
ryousato 0:df1e1f84ded8 1202 int main() {
ryousato 3:d55ebd20d750 1203 pAVrefcal = &ActualVref[0];
ryousato 3:d55ebd20d750 1204 pmode = &mode_p;
ryousato 3:d55ebd20d750 1205
ryousato 3:d55ebd20d750 1206 led1 = 1;
ryousato 3:d55ebd20d750 1207 wait(0.2);
ryousato 0:df1e1f84ded8 1208 setup();
ryousato 3:d55ebd20d750 1209 initial();
ryousato 4:e69f73c66598 1210 offsetcal(1);
ryousato 4:e69f73c66598 1211 offsetcal(2);
ryousato 4:e69f73c66598 1212 offsetcal(3);
ryousato 4:e69f73c66598 1213 led1 = 1;
ryousato 4:e69f73c66598 1214 coilEN2 = 1; //TRANS_OUT出力
ryousato 4:e69f73c66598 1215 coilEN3 = 1; //CT1,2_OUT出力
ryousato 4:e69f73c66598 1216 coilEN4 = 0;
ryousato 4:e69f73c66598 1217 led1 = 0;
ryousato 2:5e6613f149d4 1218 serialstart();
ryousato 2:5e6613f149d4 1219
ryousato 3:d55ebd20d750 1220 //*(volatile int *)0x4004402C = 0x2; // (レジスタ値を直接入力) アドレス0x4004402Cに値を代入
ryousato 3:d55ebd20d750 1221 //*(volatile int *)0x4004402C;
ryousato 3:d55ebd20d750 1222 //serial.printf( "data in 0x4004402C is 0x%08X\n", *(volatile int *)0x4004402C ); // アドレス0x4004402Cの値を表示
ryousato 3:d55ebd20d750 1223
ryousato 0:df1e1f84ded8 1224 while(1){
ryousato 0:df1e1f84ded8 1225 serial_inout();
ryousato 0:df1e1f84ded8 1226 }
ryousato 3:d55ebd20d750 1227
ryousato 0:df1e1f84ded8 1228
ryousato 3:d55ebd20d750 1229 }