ILF / Mbed 2 deprecated mbed_ILF

Dependencies:   mbed SDFileSystem

Committer:
Kujira
Date:
Wed Apr 20 01:40:07 2022 +0000
Revision:
5:569cfdb08f5b
Parent:
ILF.cpp@4:24481ebef1c4
Child:
6:cd0b4dc7eeb2
ILF3 ver3.0.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kujira 0:1977c2310ef7 1 #include "mbed.h"
Kujira 0:1977c2310ef7 2 #include "SDFileSystem.h"
Kujira 0:1977c2310ef7 3
Kujira 0:1977c2310ef7 4 //difine_mbed_LPC1768
Kujira 0:1977c2310ef7 5
Kujira 0:1977c2310ef7 6 /*******************************************************************************
Kujira 0:1977c2310ef7 7
Kujira 4:24481ebef1c4 8 2022.4.8
Kujira 4:24481ebef1c4 9 ILF V3 Iop汎用器
Kujira 4:24481ebef1c4 10
Kujira 4:24481ebef1c4 11 ver3.0.0 2022.4.8 tanaka
Kujira 4:24481ebef1c4 12 mbed_ILF ver1.2.5を引継ぎ
Kujira 4:24481ebef1c4 13 ILF3のハードに合せて改編する
Kujira 4:24481ebef1c4 14
Kujira 4:24481ebef1c4 15 1.EEPROMの変更 ONsemi製CAT24M01WI-GT3
Kujira 4:24481ebef1c4 16 the CAT24M01 is a 1024kb serial CMOS EEPROM
Kujira 4:24481ebef1c4 17 addres: 101010**
Kujira 4:24481ebef1c4 18
Kujira 4:24481ebef1c4 19 2.電圧測定の平均化
Kujira 4:24481ebef1c4 20
Kujira 4:24481ebef1c4 21
Kujira 4:24481ebef1c4 22
Kujira 4:24481ebef1c4 23 ******************************************************************************/
Kujira 4:24481ebef1c4 24 /*
Kujira 0:1977c2310ef7 25 仕様
Kujira 0:1977c2310ef7 26 電圧/抵抗測定:12bit
Kujira 0:1977c2310ef7 27 電流測定:14bit
Kujira 0:1977c2310ef7 28
Kujira 0:1977c2310ef7 29 割込みはP0~P2で可能
Kujira 0:1977c2310ef7 30 シーケンサスタート信号は、回路図「seq_yobi]で対応
Kujira 0:1977c2310ef7 31
Kujira 3:639e05fcfa0b 32 ver1.2.5
Kujira 3:639e05fcfa0b 33 IOP測定値にO.L追加 ±100uA
Kujira 3:639e05fcfa0b 34
Kujira 1:f6a9410c46d2 35 ver1.2.4
Kujira 1:f6a9410c46d2 36 ver1.2.3のDEB_EN=0としたもの。
Kujira 1:f6a9410c46d2 37 公開用。
Kujira 1:f6a9410c46d2 38
Kujira 0:1977c2310ef7 39 ver1.2.3
Kujira 0:1977c2310ef7 40 EEPROM通信のコードを修正。
Kujira 0:1977c2310ef7 41 debug mode の追加
Kujira 0:1977c2310ef7 42
Kujira 0:1977c2310ef7 43 ver1.2.2
Kujira 0:1977c2310ef7 44 過充電防止検査の上限規格の判定追加
Kujira 0:1977c2310ef7 45 CAL情報登録画面において、登録項目の順序入替え(過充電防止上限規格の挿入)
Kujira 0:1977c2310ef7 46 過充電防止上限規格ゼロの場合、判定しない
Kujira 0:1977c2310ef7 47
Kujira 0:1977c2310ef7 48 ver1.2.1
Kujira 0:1977c2310ef7 49 過充電防止検査の上限規格を新たに設置。
Kujira 0:1977c2310ef7 50 それに伴い、規格値のメモリ割り当てと、上限規格設定画面を追加。
Kujira 0:1977c2310ef7 51
Kujira 0:1977c2310ef7 52 ver1.2.0
Kujira 0:1977c2310ef7 53
Kujira 0:1977c2310ef7 54 2021.9.7
Kujira 0:1977c2310ef7 55
Kujira 0:1977c2310ef7 56 CAL.LJ21(A1098A05)専用
Kujira 0:1977c2310ef7 57 発電検出時、高照度条件下でVSS電圧がIC耐圧超える為、VHD-VDD短絡する仕様へ変更(A05)
Kujira 0:1977c2310ef7 58 200lx下でもVHD-VDD短絡の電圧条件を満たす為、ILFも対応。
Kujira 0:1977c2310ef7 59 VSS端子でVOC測定をする。その為、VOC測定時以外はVSS端子と測定器を切り離すリレーを
Kujira 0:1977c2310ef7 60 サブ基板へ取り付け、制御プログラムを追加した。
Kujira 0:1977c2310ef7 61 CH1:P1_23(LPC1768) (led3_on)
Kujira 0:1977c2310ef7 62 CH2:P1_22(LPC1768) (led3_off)
Kujira 0:1977c2310ef7 63
Kujira 0:1977c2310ef7 64 アンテナ測定時にアンテナ測定端子切り離し用リレーのON/OFF制御を追加
Kujira 0:1977c2310ef7 65 (led4_on)
Kujira 0:1977c2310ef7 66 (led4_off)
Kujira 0:1977c2310ef7 67
Kujira 0:1977c2310ef7 68 ver1.1.0
Kujira 0:1977c2310ef7 69 1)VFD_SW23 SW31がタッチ感度故障の為、配置替え
Kujira 0:1977c2310ef7 70 CAL登録画面とMANUAL測定画面
Kujira 0:1977c2310ef7 71 2)DELETE EEPROM ボタンの配置変更
Kujira 0:1977c2310ef7 72 3)シーケンサ判定IOの変更
Kujira 0:1977c2310ef7 73
Kujira 0:1977c2310ef7 74 ver1.1.1
Kujira 0:1977c2310ef7 75 void auto_meas において初期 R[i]の値をクリアすることを追加
Kujira 0:1977c2310ef7 76 自動測定時、タッチパネルでスタートをやめる(外部IO入力のみ)
Kujira 0:1977c2310ef7 77
Kujira 0:1977c2310ef7 78 ver1.1.2
Kujira 0:1977c2310ef7 79 過充電防止検査時の電源電圧:VOC検査時の電圧となっていたのを修正。
Kujira 0:1977c2310ef7 80
Kujira 0:1977c2310ef7 81 ver1.1.3
Kujira 0:1977c2310ef7 82 1)SDカード未挿入の表示を削除
Kujira 0:1977c2310ef7 83
Kujira 0:1977c2310ef7 84 2)R=Hの時間を0.2sから1sへ変更
Kujira 0:1977c2310ef7 85
Kujira 0:1977c2310ef7 86 R5186 ver2.0.3の内容を反映。
Kujira 0:1977c2310ef7 87
Kujira 0:1977c2310ef7 88 未)フラグでR5186系と切替え
Kujira 0:1977c2310ef7 89 未)測定部ごとにクラス分け(過充電防止のところだけでも)
Kujira 0:1977c2310ef7 90
Kujira 0:1977c2310ef7 91 *******************************************************************************/
Kujira 0:1977c2310ef7 92 //
Kujira 0:1977c2310ef7 93 //各種定数
Kujira 3:639e05fcfa0b 94 #define O_L 100 //[uA]電流測定値のオーバーロード値 //ver1.2.5
Kujira 3:639e05fcfa0b 95 /*
Kujira 3:639e05fcfa0b 96 #define CAP 20 //[uF] 積分回路のコンデンサ容量
Kujira 3:639e05fcfa0b 97 #define TIME_INT 2 //[s]積分時間
Kujira 3:639e05fcfa0b 98 #define GAIN_I 0.2 //電流測定プリアンプのGAIN
Kujira 3:639e05fcfa0b 99 #define LSB_I 0.00025 //[V] MCP3424 LSB size of 14bit conversion rate setting
Kujira 3:639e05fcfa0b 100 #define MINCODE_I -8192 //Minimum output code of MCP3424
Kujira 3:639e05fcfa0b 101 #define MAXCODE_I 8191 //Maximum output code of MCP3424
Kujira 3:639e05fcfa0b 102 #define GAIN_V 0.2 //電流測定プリアンプのGAIN
Kujira 3:639e05fcfa0b 103 */
Kujira 1:f6a9410c46d2 104 #define DEB_EN 0 //デバッグイネーブル:1 ディスイネーブル:0 ver1.2.3
Kujira 0:1977c2310ef7 105 #define RL_EN 1 //1:io[]を外付けのリードリレー制御用に使用する場合は1.以外は0. ver1.2.3
Kujira 0:1977c2310ef7 106 #define SEQ_EN 0 //1:シーケンサ接続仕様 0:シーケンサ未接続仕様
Kujira 0:1977c2310ef7 107 #define period_pwm 200 //*us
Kujira 0:1977c2310ef7 108 #define COP 0.005 //pwm_duty(%) = COP * DATA(0~255)
Kujira 0:1977c2310ef7 109 #define rsense 1000 //抵抗測定回路のプルアップ抵抗値 1kΩ
Kujira 0:1977c2310ef7 110 #define res_vref 0x800 //抵抗測定回路のリファレンス電圧 2.048V
Kujira 0:1977c2310ef7 111 #define dac_vref 2500 //DACのリファレンス電圧 単位[mV]
Kujira 0:1977c2310ef7 112 #define number_of_channels 2 //測定チャンネル数(MAX 4)
Kujira 0:1977c2310ef7 113 #define time_discharge 0.5 //discharging time(s)
Kujira 0:1977c2310ef7 114 #define time_integral 2 //integral time(s)
Kujira 0:1977c2310ef7 115 #define touch 5 //GU-D タッチパネル感度 0~7で設定。低いほど敏感。
Kujira 4:24481ebef1c4 116 #define wait_voc_1 0.5 //[s]VOC測定電圧設定後からリセットまでの時間
Kujira 0:1977c2310ef7 117 #define wait_reset 0.3 //[s]リセット解除からVOC測定までの時間
Kujira 0:1977c2310ef7 118 #define wait_poweron 4 //[s]電源投入からリセットまでの時間
Kujira 0:1977c2310ef7 119 #define time_reset 0.5 //reset Hの時間 ver1.1.3
Kujira 0:1977c2310ef7 120 #define TIME_RELAY_ON 0.5 //外付けリードリレー用 Ton[s]
Kujira 0:1977c2310ef7 121 #define TIME_RELAY_OFF 0.2 //外付けリードリレー用 Toff[s]
Kujira 4:24481ebef1c4 122 const int ton_rr = 0.1; //内蔵リードリレー ton[s]
Kujira 4:24481ebef1c4 123 const int toff_rr = 0.1; //内蔵リードリレー toff]
Kujira 0:1977c2310ef7 124
Kujira 0:1977c2310ef7 125 /***************************************
Kujira 0:1977c2310ef7 126 RESOLUTION SETTINGS VS. LSB
Kujira 0:1977c2310ef7 127 -----------------------------------
Kujira 0:1977c2310ef7 128 |Resolution Setting | LSB |
Kujira 0:1977c2310ef7 129 -----------------------------------
Kujira 0:1977c2310ef7 130 | 12bits(00) | 1mv |
Kujira 0:1977c2310ef7 131 | 14bits(01) | 250uV |
Kujira 0:1977c2310ef7 132 | 16bits(10) | 62.5uV |
Kujira 0:1977c2310ef7 133 | 18bits(11) | 15.625uV |
Kujira 0:1977c2310ef7 134 -----------------------------------
Kujira 0:1977c2310ef7 135 ****************************************/
Kujira 4:24481ebef1c4 136 //soft ver
Kujira 4:24481ebef1c4 137 const int version_major = 3;
Kujira 4:24481ebef1c4 138 const int version_minor = 0;
Kujira 4:24481ebef1c4 139 const int version_build = 0;
Kujira 4:24481ebef1c4 140
Kujira 4:24481ebef1c4 141 /*******************************************************************************
Kujira 4:24481ebef1c4 142
Kujira 4:24481ebef1c4 143 LPC1768 PIN MAPPING
Kujira 4:24481ebef1c4 144
Kujira 4:24481ebef1c4 145 *******************************************************************************/
Kujira 0:1977c2310ef7 146 //繰り返しタイマー割り込み
Kujira 0:1977c2310ef7 147 Ticker flipper; /* 初期化 */
Kujira 0:1977c2310ef7 148 //one shot timer
Kujira 0:1977c2310ef7 149 Timeout oneshot1;
Kujira 0:1977c2310ef7 150 Timeout oneshot2;
Kujira 0:1977c2310ef7 151 Timeout oneshot3;
Kujira 0:1977c2310ef7 152 Timeout oneshot4;
Kujira 4:24481ebef1c4 153
Kujira 4:24481ebef1c4 154 /*** SD-CARD ***/
Kujira 0:1977c2310ef7 155 SDFileSystem sd(P0_9, P0_8, P0_7, P0_6, "sd"); //SDFileSystem name(mosi, miso, sck, cs, mount);
Kujira 4:24481ebef1c4 156
Kujira 4:24481ebef1c4 157 /*** I2C ***/
Kujira 4:24481ebef1c4 158 I2C i2c(P0_10,P0_11); //(PinName sda, PinName scl) I2Cを定義
Kujira 4:24481ebef1c4 159
Kujira 4:24481ebef1c4 160 /*** UART ver3 ***/
Kujira 4:24481ebef1c4 161 Serial uart(P0_15,P0_16,9600);
Kujira 4:24481ebef1c4 162
Kujira 4:24481ebef1c4 163 /*** interruput ***/
Kujira 0:1977c2310ef7 164 InterruptIn seq_yobi(P0_19);
Kujira 4:24481ebef1c4 165
Kujira 4:24481ebef1c4 166 /*** start sw ***/
Kujira 0:1977c2310ef7 167 DigitalIn sw_start(P0_4);
Kujira 4:24481ebef1c4 168
Kujira 4:24481ebef1c4 169 /*** DigitalOut ***/
Kujira 0:1977c2310ef7 170 DigitalOut houden[] = { // 配列を用意します
Kujira 0:1977c2310ef7 171 DigitalOut( P2_1 ), //houden1 配列の1番目の要素を**で初期化したDigitalOutに
Kujira 0:1977c2310ef7 172 DigitalOut( P2_0 ), //houden2
Kujira 0:1977c2310ef7 173 DigitalOut( P1_28 ), //houden3
Kujira 0:1977c2310ef7 174 DigitalOut( P1_29 ) //houden4
Kujira 0:1977c2310ef7 175 };
Kujira 0:1977c2310ef7 176
Kujira 4:24481ebef1c4 177 DigitalOut io[] = {
Kujira 4:24481ebef1c4 178 DigitalOut( P2_11 ), //io1
Kujira 4:24481ebef1c4 179 DigitalOut( P2_12 ), //io2
Kujira 4:24481ebef1c4 180 DigitalOut( P1_18 ), //io3
Kujira 4:24481ebef1c4 181 DigitalOut( P1_19 ), //io4
Kujira 4:24481ebef1c4 182 DigitalOut( P0_17 ), //io5
Kujira 4:24481ebef1c4 183 DigitalOut( P0_18 ), //io6
Kujira 4:24481ebef1c4 184 DigitalOut( P1_30 ), //io7
Kujira 4:24481ebef1c4 185 DigitalOut( P1_31 ), //io8
Kujira 4:24481ebef1c4 186 DigitalOut( P1_22 ), //io9
Kujira 4:24481ebef1c4 187 DigitalOut( P1_23 ), //io10
Kujira 4:24481ebef1c4 188 DigitalOut( P1_24 ), //io11
Kujira 4:24481ebef1c4 189 DigitalOut( P1_25 ), //io12
Kujira 4:24481ebef1c4 190 DigitalOut( P0_23 ), //io13
Kujira 4:24481ebef1c4 191 DigitalOut( P0_24 ), //io14
Kujira 4:24481ebef1c4 192 DigitalOut( P0_25 ), //io15
Kujira 4:24481ebef1c4 193 DigitalOut( P0_26 ) //io16
Kujira 4:24481ebef1c4 194 };
Kujira 4:24481ebef1c4 195
Kujira 4:24481ebef1c4 196 /*
Kujira 0:1977c2310ef7 197 DigitalOut io[] = { // 配列を用意します
Kujira 0:1977c2310ef7 198 DigitalOut( P0_25 ), //io1 配列の1番目の要素をP0_25で初期化したDigitalOutに
Kujira 0:1977c2310ef7 199 DigitalOut( P0_26 ), //io2
Kujira 0:1977c2310ef7 200 DigitalOut( P0_23 ), //io3
Kujira 0:1977c2310ef7 201 DigitalOut( P0_24 ), //io4
Kujira 0:1977c2310ef7 202 DigitalOut( P1_22 ), //io5
Kujira 0:1977c2310ef7 203 DigitalOut( P1_23 ), //io6
Kujira 0:1977c2310ef7 204 DigitalOut( P1_24 ), //io7
Kujira 0:1977c2310ef7 205 DigitalOut( P1_25 ) //io8
Kujira 0:1977c2310ef7 206 };
Kujira 4:24481ebef1c4 207 */
Kujira 0:1977c2310ef7 208
Kujira 0:1977c2310ef7 209 DigitalOut range[] = { // 配列を用意します
Kujira 0:1977c2310ef7 210 DigitalOut( P2_3 ), //range1 配列の1番目の要素を**で初期化したDigitalOutに
Kujira 0:1977c2310ef7 211 DigitalOut( P2_2 ), //range2
Kujira 0:1977c2310ef7 212 DigitalOut( P1_26 ), //range3
Kujira 0:1977c2310ef7 213 DigitalOut( P1_27 ) //range4
Kujira 0:1977c2310ef7 214 };
Kujira 0:1977c2310ef7 215
Kujira 0:1977c2310ef7 216 DigitalOut led_green[] = {
Kujira 0:1977c2310ef7 217 DigitalOut( P0_17 ),
Kujira 0:1977c2310ef7 218 DigitalOut( P1_31 ),
Kujira 0:1977c2310ef7 219 DigitalOut( P2_11 ),
Kujira 0:1977c2310ef7 220 DigitalOut( P1_18 )
Kujira 0:1977c2310ef7 221 };
Kujira 0:1977c2310ef7 222
Kujira 0:1977c2310ef7 223 DigitalOut led_red[] = {
Kujira 0:1977c2310ef7 224 DigitalOut( P0_18 ),
Kujira 0:1977c2310ef7 225 DigitalOut( P1_30 ),
Kujira 0:1977c2310ef7 226 DigitalOut( P2_12 ),
Kujira 0:1977c2310ef7 227 DigitalOut( P1_19 )
Kujira 0:1977c2310ef7 228 };
Kujira 4:24481ebef1c4 229
Kujira 4:24481ebef1c4 230 /*** PLC ver3 ***/
Kujira 4:24481ebef1c4 231 DigitalIn seq_in[] = {
Kujira 4:24481ebef1c4 232 DigitalIn(P0_19), //si1
Kujira 4:24481ebef1c4 233 DigitalIn(P2_9), //si2
Kujira 4:24481ebef1c4 234 DigitalIn(P2_13), //si3
Kujira 4:24481ebef1c4 235 DigitalIn(P4_28), //si4
Kujira 4:24481ebef1c4 236 DigitalIn(P0_29), //si5
Kujira 4:24481ebef1c4 237 DigitalIn(P0_30) //si6
Kujira 4:24481ebef1c4 238 };
Kujira 4:24481ebef1c4 239
Kujira 4:24481ebef1c4 240 DigitalOut seq_out[] = {
Kujira 4:24481ebef1c4 241 DigitalOut( P0_21 ), //so1
Kujira 4:24481ebef1c4 242 DigitalOut( P0_22 ), //so2
Kujira 4:24481ebef1c4 243 DigitalOut( P3_25 ), //so3
Kujira 4:24481ebef1c4 244 DigitalOut( P3_26 ), //so4
Kujira 4:24481ebef1c4 245 DigitalOut( P0_20 ), //so5
Kujira 4:24481ebef1c4 246 DigitalOut( P2_6 ), //so6
Kujira 4:24481ebef1c4 247 DigitalOut( P2_7 ), //so7
Kujira 4:24481ebef1c4 248 DigitalOut( P2_8 ) //so8
Kujira 4:24481ebef1c4 249 };
Kujira 4:24481ebef1c4 250
Kujira 0:1977c2310ef7 251 //ver1.1.0
Kujira 4:24481ebef1c4 252 /*
Kujira 0:1977c2310ef7 253 DigitalOut seq_hantei[] = {
Kujira 0:1977c2310ef7 254 DigitalOut( P0_21 ),
Kujira 0:1977c2310ef7 255 DigitalOut( P0_22 ),
Kujira 0:1977c2310ef7 256 DigitalOut( P3_25 ),
Kujira 0:1977c2310ef7 257 DigitalOut( P3_26 )
Kujira 0:1977c2310ef7 258 };
Kujira 0:1977c2310ef7 259
Kujira 0:1977c2310ef7 260 DigitalOut seq_busy(P0_20);
Kujira 0:1977c2310ef7 261 //DigitalIn
Kujira 0:1977c2310ef7 262 DigitalIn seq_start(P4_28);
Kujira 0:1977c2310ef7 263 DigitalIn seq_cal_a(P2_6);
Kujira 0:1977c2310ef7 264 DigitalIn seq_cal_b(P2_7);
Kujira 0:1977c2310ef7 265 DigitalIn seq_cal_c(P2_8);
Kujira 0:1977c2310ef7 266 DigitalIn seq_kosuu_a(P2_13);
Kujira 0:1977c2310ef7 267 DigitalIn seq_kosuu_b(P2_9);
Kujira 0:1977c2310ef7 268 //DigitalIn seq_yobi(P0_19);
Kujira 4:24481ebef1c4 269 */
Kujira 4:24481ebef1c4 270
Kujira 4:24481ebef1c4 271 /*** PWM ***/
Kujira 0:1977c2310ef7 272 PwmOut leds[] = { //配列を用意
Kujira 0:1977c2310ef7 273 PwmOut(P2_5), //LED1
Kujira 0:1977c2310ef7 274 PwmOut(P2_4), //LED2
Kujira 0:1977c2310ef7 275 PwmOut(P1_21), //LED3
Kujira 0:1977c2310ef7 276 PwmOut(P1_20) //LED4
Kujira 0:1977c2310ef7 277 };
Kujira 0:1977c2310ef7 278
Kujira 4:24481ebef1c4 279 //RELAY ver3.0.0
Kujira 4:24481ebef1c4 280 DigitalOut rlen[] = {
Kujira 4:24481ebef1c4 281 DigitalOut( P1_4 ), //RLCNT1
Kujira 4:24481ebef1c4 282 DigitalOut( P1_8 ), //RLCNT2
Kujira 4:24481ebef1c4 283 DigitalOut( P1_9 ), //RLCNT3
Kujira 4:24481ebef1c4 284 DigitalOut( P1_10 ), //RLCNT4
Kujira 4:24481ebef1c4 285 DigitalOut( P1_14 ), //RLCNT5
Kujira 4:24481ebef1c4 286 DigitalOut( P1_15 ), //RLCNT6
Kujira 4:24481ebef1c4 287 DigitalOut( P1_16 ), //RLCNT7
Kujira 4:24481ebef1c4 288 DigitalOut( P1_17 ), //RLCNT8
Kujira 4:24481ebef1c4 289 };
Kujira 4:24481ebef1c4 290
Kujira 4:24481ebef1c4 291 /*******************************************************************************
Kujira 4:24481ebef1c4 292
Kujira 0:1977c2310ef7 293 SD Card
Kujira 4:24481ebef1c4 294
Kujira 4:24481ebef1c4 295 *******************************************************************************/
Kujira 0:1977c2310ef7 296 void sd_writetext(char* text);
Kujira 4:24481ebef1c4 297
Kujira 4:24481ebef1c4 298 /*******************************************************************************
Kujira 4:24481ebef1c4 299
Kujira 4:24481ebef1c4 300 gu-D(表示器) addr:50H
Kujira 4:24481ebef1c4 301
Kujira 4:24481ebef1c4 302 *******************************************************************************/
Kujira 0:1977c2310ef7 303 //parameter_gu256X128C-D903M
Kujira 0:1977c2310ef7 304 const int addr_gu = 0x50 << 1; // Address of gu256X128C-D903M
Kujira 0:1977c2310ef7 305 //
Kujira 0:1977c2310ef7 306 //prototype
Kujira 0:1977c2310ef7 307 const int Proportional1 = 0x02;
Kujira 0:1977c2310ef7 308 //const int Proportional2 = 0x03;
Kujira 0:1977c2310ef7 309 //const int Proportional3 = 0x04;
Kujira 0:1977c2310ef7 310 //
Kujira 0:1977c2310ef7 311 void gu_cls();
Kujira 0:1977c2310ef7 312 void gu_drawButton(int x, int y, int w, int h, const char *data);
Kujira 0:1977c2310ef7 313 void gu_cursor(int x, int y);
Kujira 0:1977c2310ef7 314 void gu_fontsize(const char code);
Kujira 0:1977c2310ef7 315 void gu_print_dot(int x, int y, const char *ptext);
Kujira 0:1977c2310ef7 316 void gu_fontWidth(const char fontWidth);
Kujira 0:1977c2310ef7 317 void gu_print(const char t[] );
Kujira 0:1977c2310ef7 318 void gu_fontReverse(int code);
Kujira 0:1977c2310ef7 319 void gu_RealTimeImage_dot(int x, int y, int w, int h, const char data[]);
Kujira 0:1977c2310ef7 320 void gu_RealTimeImage(int w, int h, char data[]);
Kujira 0:1977c2310ef7 321 void gu_magnify(int x, int y);
Kujira 0:1977c2310ef7 322 //
Kujira 0:1977c2310ef7 323 //オリジナルgu用関数
Kujira 0:1977c2310ef7 324 void gu_print1(const char* ptext);
Kujira 0:1977c2310ef7 325 void gu_luminance(const char* cl);
Kujira 0:1977c2310ef7 326 void gu_touchPara(int x,int y);
Kujira 0:1977c2310ef7 327 void gu_sendOneByte(char data);
Kujira 0:1977c2310ef7 328 void utility(); //輝度調整サブルーチン
Kujira 0:1977c2310ef7 329 void gu_CRLF();
Kujira 0:1977c2310ef7 330 void gu_reverse(char x);
Kujira 0:1977c2310ef7 331 void gu_drawbutton_cursor(char x,char y);
Kujira 0:1977c2310ef7 332 void gu_onebyte(char data);
Kujira 0:1977c2310ef7 333 //
Kujira 0:1977c2310ef7 334 //Button Trig Function
Kujira 0:1977c2310ef7 335 void adjust_illumination();//LED輝度調整サブ
Kujira 0:1977c2310ef7 336 void gu_initial();//初期設定サブ
Kujira 0:1977c2310ef7 337 void gu_set_button(char sw_num,char* text);//SWナンバーと表示テキストを指定
Kujira 0:1977c2310ef7 338 void gu_set_button_font1(char sw_num,char* text);//fontsize = 1
Kujira 0:1977c2310ef7 339 void gu_button_up(char sw_num); //upボタン表示
Kujira 0:1977c2310ef7 340 void gu_button_down(char sw_num);//downボタン表示
Kujira 0:1977c2310ef7 341 void gu_Button_up1();
Kujira 0:1977c2310ef7 342 void gu_Button_up2();
Kujira 0:1977c2310ef7 343 void gu_Button_up3();
Kujira 0:1977c2310ef7 344 void gu_Button_up4();
Kujira 0:1977c2310ef7 345 void gu_button_up_on(char sw_num);
Kujira 0:1977c2310ef7 346 void gu_Button_up_on2();
Kujira 0:1977c2310ef7 347 void gu_Button_down1();
Kujira 0:1977c2310ef7 348 void gu_Button_down2();
Kujira 0:1977c2310ef7 349 void gu_Button_down3();
Kujira 0:1977c2310ef7 350 void gu_Button_down4();
Kujira 0:1977c2310ef7 351 void gu_button_down_on(char sw_num);
Kujira 0:1977c2310ef7 352 void gu_Button_down_on2();
Kujira 0:1977c2310ef7 353 void gu_Button_power_on();
Kujira 0:1977c2310ef7 354 void gu_Button_power_off();
Kujira 4:24481ebef1c4 355 //
Kujira 4:24481ebef1c4 356 //******************************************************************************
Kujira 4:24481ebef1c4 357
Kujira 4:24481ebef1c4 358 // CAT24M01(EEPROM)
Kujira 4:24481ebef1c4 359 // ver3.0.0 2022.4.8
Kujira 4:24481ebef1c4 360
Kujira 4:24481ebef1c4 361 const static int eeprom_adrs = 0xA8; //0x2A << 2 Address of PCAS08A(EEPROM) 6/8bit
Kujira 4:24481ebef1c4 362
Kujira 4:24481ebef1c4 363 int slave_adrs; //i2c slave address 8bit
Kujira 4:24481ebef1c4 364
Kujira 4:24481ebef1c4 365 char rdata[17]; //EEPROMからのリードデータ
Kujira 4:24481ebef1c4 366 char wdata[17]; //EEPROMへのライトデータ
Kujira 4:24481ebef1c4 367 int Jyushin; //受信成功時 Jyushin=0
Kujira 4:24481ebef1c4 368 int Soushin; //送信成功時 Soushin=0
Kujira 4:24481ebef1c4 369
Kujira 4:24481ebef1c4 370 const static char adrs_kido[]={0x00,0x00}; //VFDの輝度
Kujira 4:24481ebef1c4 371 const static char adrs_syoudo[]={0x00,0x10}; //測定用LED照度の値を保存しているアドレス
Kujira 4:24481ebef1c4 372 const static char adrs_calnum[]={0x00,0x20}; //CPUにロードしているCALの登録番号
Kujira 4:24481ebef1c4 373 const static char adrs_calinfo[]={0x01,0x00}; //CAL情報 0x0100~0x032FFを割り当て。1page256byte。No.1~No.50まで登録
Kujira 4:24481ebef1c4 374 //
Kujira 4:24481ebef1c4 375 // CAL情報登録 -> EEPROM
Kujira 4:24481ebef1c4 376 //
Kujira 4:24481ebef1c4 377 #define caliber_number 50 /* CAL登録数 */
Kujira 4:24481ebef1c4 378 //
Kujira 4:24481ebef1c4 379 //#define caliber_number 6 /* CAL登録数 */
Kujira 4:24481ebef1c4 380 //#define addr_calnum 0x20 /* 起動時に選択するCALnumber */
Kujira 4:24481ebef1c4 381 //#define addr_cal1 0x80 /* CAL.No1の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1 */
Kujira 4:24481ebef1c4 382 //#define addr_cal2 0x90 /* CAL.No2の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1*/
Kujira 4:24481ebef1c4 383 //#define addr_cal3 0xA0 /* CAL.No3の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1*/
Kujira 4:24481ebef1c4 384 //#define addr_cal4 0xB0 /* CAL.No4の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1*/
Kujira 4:24481ebef1c4 385 //#define addr_cal5 0xC0 /* CAL.No5の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1*/
Kujira 4:24481ebef1c4 386 //#define addr_cal6 0xD0 /* CAL.No6の情報を保存しているEEPROMのアドレス PCA24S08A BLOCK1*/
Kujira 4:24481ebef1c4 387 //ver1.2.1
Kujira 4:24481ebef1c4 388 //EEPROM BLOCK2へのアドレッシングは、別で初期8bitも制御する必要がある。
Kujira 4:24481ebef1c4 389 //#define addr_cal1_2 0x00 /* CAL.No1の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
Kujira 4:24481ebef1c4 390 //#define addr_cal2_2 0x10 /* CAL.No2の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
Kujira 4:24481ebef1c4 391 //#define addr_cal3_2 0x20 /* CAL.No3の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
Kujira 4:24481ebef1c4 392 //#define addr_cal4_2 0x30 /* CAL.No4の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
Kujira 4:24481ebef1c4 393 //#define addr_cal5_2 0x40 /* CAL.No5の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
Kujira 4:24481ebef1c4 394 //#define addr_cal6_2 0x50 /* CAL.No6の情報を保存しているEEPROMのアドレス 追加分 PCA24S08A BLOCK2*/
Kujira 4:24481ebef1c4 395 //
Kujira 4:24481ebef1c4 396 /******************************************************************************/
Kujira 4:24481ebef1c4 397
Kujira 4:24481ebef1c4 398 //******************************************************************************
Kujira 4:24481ebef1c4 399 //
Kujira 0:1977c2310ef7 400 /***************************
Kujira 0:1977c2310ef7 401 LCP1768(EEPROM) addr:15H
Kujira 0:1977c2310ef7 402 ***************************/
Kujira 0:1977c2310ef7 403 //parameter_PCAS08A(EEPROM)
Kujira 0:1977c2310ef7 404 //const int addr_EEPROM = 0x15 << 3; // Address of PCAS08A(EEPROM) コメント化 ver1.2.1
Kujira 4:24481ebef1c4 405 //char rdata[17]; //EEPROMからのリードデータ
Kujira 4:24481ebef1c4 406 //char wdata[17]; //EEPROMへのライトデータ
Kujira 4:24481ebef1c4 407 //int Jyushin; //受信成功時 Jyushin=0
Kujira 4:24481ebef1c4 408 //int Soushin; //送信成功時 Soushin=0
Kujira 4:24481ebef1c4 409 //const int eeprom_adrs = 0x15 << 3; // Address of PCAS08A(EEPROM) 始めの5bit ver1.2.1
Kujira 4:24481ebef1c4 410 //int slave_adrs; //slave address ver1.2.1
Kujira 4:24481ebef1c4 411 //
Kujira 0:1977c2310ef7 412 /***************************
Kujira 0:1977c2310ef7 413 MCP3424(ADC)
Kujira 0:1977c2310ef7 414 ***************************/
Kujira 0:1977c2310ef7 415 //parameter_ADC(MCP3424)
Kujira 0:1977c2310ef7 416 const int addr_ADC1 = 0x6C <<1;//電圧抵抗測定No.1,No.2用ADC
Kujira 0:1977c2310ef7 417 const int addr_ADC2 = 0x6A <<1;//電圧抵抗測定No.3,No.4用ADC
Kujira 0:1977c2310ef7 418 const int addr_ADC3 = 0x68 <<1;//電流測定No.1,No.2
Kujira 0:1977c2310ef7 419 const int addr_ADC4 = 0x6E <<1;//電流測定No.3,No.4
Kujira 0:1977c2310ef7 420 //
Kujira 0:1977c2310ef7 421 char hd[] = "0123456789ABCDEF" ;
Kujira 0:1977c2310ef7 422 //
Kujira 0:1977c2310ef7 423 //関数
Kujira 0:1977c2310ef7 424 void general_call(char com); //power on reset
Kujira 0:1977c2310ef7 425 char adc_config(char ch, char rate);
Kujira 0:1977c2310ef7 426 //
Kujira 0:1977c2310ef7 427 /***************************
Kujira 0:1977c2310ef7 428 AD5625RBUZ(DAC) addr:1F
Kujira 0:1977c2310ef7 429 ***************************/
Kujira 0:1977c2310ef7 430 const char addr_dac = 0x1F <<1;
Kujira 0:1977c2310ef7 431 void dac_out(short mvolt, char addr);
Kujira 0:1977c2310ef7 432 void dac_init();
Kujira 0:1977c2310ef7 433 //
Kujira 0:1977c2310ef7 434 /***************************
Kujira 0:1977c2310ef7 435 表示
Kujira 0:1977c2310ef7 436 関数
Kujira 0:1977c2310ef7 437 ***************************/
Kujira 0:1977c2310ef7 438 void select_cal();//CAL選択画面
Kujira 0:1977c2310ef7 439 void setup_cal_information(char cal_num);//CAL情報登録画面
Kujira 0:1977c2310ef7 440 void manual_int_hyouji();
Kujira 0:1977c2310ef7 441 void auto_int_hyouji();
Kujira 0:1977c2310ef7 442 /***************************
Kujira 0:1977c2310ef7 443 測定関係
Kujira 0:1977c2310ef7 444 関数
Kujira 0:1977c2310ef7 445 ***************************/
Kujira 0:1977c2310ef7 446 void set_pullup();//シーケンサからの入力ピンのプルアップ設定
Kujira 0:1977c2310ef7 447 void trigger();//シーケンサからのスタート信号割込みサブ
Kujira 0:1977c2310ef7 448 void calibration();
Kujira 0:1977c2310ef7 449 void compute_adc(int adc_con, long *avg);//(ADCのCONFIG, 計算結果)
Kujira 0:1977c2310ef7 450 void gu_putdec(short* x);//2byteを10進で表示
Kujira 0:1977c2310ef7 451 void gu_putdeck(short* x);//2byteを10進で表示。1/1000.
Kujira 0:1977c2310ef7 452 void gu_putdeci(float* x);// ver1.1.4
Kujira 0:1977c2310ef7 453 void gu_putdeci_mA(float* x);// ver1.1.4
Kujira 0:1977c2310ef7 454 void meas_current_automode(char amount);//AutoMOdeの電流測定サブ iop ocp共通
Kujira 0:1977c2310ef7 455 void auto_run();//自動測定モード
Kujira 0:1977c2310ef7 456 void auto_meas(char noc);//一括測定。ch:測定する総チャンネル数
Kujira 0:1977c2310ef7 457 void meas_sub();//自動測定モード内の繰り返し処理
Kujira 0:1977c2310ef7 458 void manual();//手動測定モード
Kujira 0:1977c2310ef7 459 void hantei(char noc);//規格値比較エラーフラグ立てる
Kujira 0:1977c2310ef7 460 void select_ich(char ch);//電流測定chの選択と設定
Kujira 0:1977c2310ef7 461 short read_adc(char addr);//指定addressから2byte読込み
Kujira 0:1977c2310ef7 462 short meas_voltage(char ch);//測定チャンネルを指定して、測定値(2byte)を返す
Kujira 0:1977c2310ef7 463 short meas_resistor(char ch);//測定チャンネルを指定して、測定値(2byte)を返す
Kujira 0:1977c2310ef7 464 void display_resistor(short sdata);//測定値を表示する。
Kujira 0:1977c2310ef7 465 void led_off();//判定用LED全消灯
Kujira 0:1977c2310ef7 466 void read_syoudo(char* c);//EEPROMから照度データ(PwmDuty)を読み込んでセットする
Kujira 0:1977c2310ef7 467
Kujira 0:1977c2310ef7 468 //
Kujira 0:1977c2310ef7 469 /***************************
Kujira 0:1977c2310ef7 470 測定関係
Kujira 0:1977c2310ef7 471 変数
Kujira 0:1977c2310ef7 472 ***************************/
Kujira 0:1977c2310ef7 473 char io_voc; //VOC測定時のIO操作。ON(=VDD)の場合は”0x01"OFF(=OPEN)は"0x00"
Kujira 0:1977c2310ef7 474 char err_f[4];//ch1~4 規格外発生時のフラグ 0or1
Kujira 0:1977c2310ef7 475 short V[4];//ADC入力値を3倍した値 測定値[V] 16進数
Kujira 0:1977c2310ef7 476 float I[4];//電流測定値チャンネル毎の
Kujira 0:1977c2310ef7 477 short R[4];//抵抗測定値
Kujira 0:1977c2310ef7 478 short voc[4];//ADC入力値を3倍した値 測定値[mV] 16進数
Kujira 0:1977c2310ef7 479 short vocp[4];//過充電防止確認用電圧
Kujira 0:1977c2310ef7 480 float iop[4];//2byte 補数あり 測定値 1bit 0.01uA
Kujira 0:1977c2310ef7 481 float ocp[4];//2byte 補数あり 測定値
Kujira 0:1977c2310ef7 482 char ch_num ;//選択中の測定チャネル(0~3)
Kujira 0:1977c2310ef7 483
Kujira 0:1977c2310ef7 484 /**********************
Kujira 0:1977c2310ef7 485 暫定
Kujira 0:1977c2310ef7 486 **********************/
Kujira 0:1977c2310ef7 487 /*
Kujira 0:1977c2310ef7 488 #define vss_voc 3600
Kujira 0:1977c2310ef7 489 #define vss_iop 2800
Kujira 0:1977c2310ef7 490 #define vss_ocp 3600
Kujira 0:1977c2310ef7 491 #define wait_vss 4
Kujira 0:1977c2310ef7 492 #define wait_io 2
Kujira 0:1977c2310ef7 493 #define low_limit_voc 0xCE4//[mv] HEX
Kujira 0:1977c2310ef7 494 #define low_limit_iop 0x44C//11uA換算:1100*0.01
Kujira 0:1977c2310ef7 495 #define low_limit_ocp 0xFFE2//-0.3uA換算
Kujira 0:1977c2310ef7 496 */
Kujira 0:1977c2310ef7 497
Kujira 0:1977c2310ef7 498 //structure
Kujira 0:1977c2310ef7 499 struct cal_info {
Kujira 4:24481ebef1c4 500 char name[3]; // CAL NAME ASCII CODE ver3
Kujira 4:24481ebef1c4 501 short number; // CAL.No.
Kujira 4:24481ebef1c4 502 short vss_iop; // IOP測定時のVss電圧 1bit * 0.01uA
Kujira 4:24481ebef1c4 503 short vss_ocp; // 過充電防止(over charge protection)測定時のVss電圧
Kujira 4:24481ebef1c4 504 short vss_voc; // VOC測定時のVss電圧
Kujira 4:24481ebef1c4 505 short low_limit_voc; // 1bit * 1mv
Kujira 4:24481ebef1c4 506 short low_limit_iop; // 1bit * 0.01uA
Kujira 4:24481ebef1c4 507 short low_limit_ocp; // 過充電防止検査の下規格値(プラス側)
Kujira 4:24481ebef1c4 508 short up_limit_ocp; // 過充電防止検査の上限規格値(マイナス側)ver1.2.1追加
Kujira 4:24481ebef1c4 509 float wait_iop; // Iop測定前の待機時間[s] 1bit 1s 換算
Kujira 4:24481ebef1c4 510 float wait_ocp; // 過充電防止時消電測定前の待機時間[s] 1bit 1s換算
Kujira 4:24481ebef1c4 511 short low_limit_resistor; // アンテナ抵抗規格 1bit 10Ω
Kujira 4:24481ebef1c4 512 short up_limit_resistor; // アンテナ抵抗規格 1bit 10Ω
Kujira 4:24481ebef1c4 513 short low_limit_ocp_v; // 過充電防止検査の下限規格[V] ver3
Kujira 4:24481ebef1c4 514 short up_limit_ocp_v; // 過充電防止検査の上限規格[V] ver3
Kujira 4:24481ebef1c4 515 float wait_voc; // VOC測定前の待機時間[s] 1bit 1s 換算 ver3
Kujira 0:1977c2310ef7 516 } ;
Kujira 4:24481ebef1c4 517
Kujira 0:1977c2310ef7 518 //parameter
Kujira 0:1977c2310ef7 519 struct cal_info calinfo;
Kujira 0:1977c2310ef7 520 char reg_num; /* 選択中の登録CALナンバー */
Kujira 0:1977c2310ef7 521 //function
Kujira 0:1977c2310ef7 522 void erace_calinfo();
Kujira 0:1977c2310ef7 523 void read_regnum();
Kujira 0:1977c2310ef7 524 void read_caliber(cal_info *cal, int num);
Kujira 0:1977c2310ef7 525 void write_caliber_information(cal_info *cal, int num);
Kujira 0:1977c2310ef7 526
Kujira 3:639e05fcfa0b 527 /*******************************
Kujira 3:639e05fcfa0b 528
Kujira 3:639e05fcfa0b 529 ver1.2.5
Kujira 3:639e05fcfa0b 530 convert code to Ampare
Kujira 3:639e05fcfa0b 531
Kujira 3:639e05fcfa0b 532 *******************************
Kujira 3:639e05fcfa0b 533 float cul_ADC(short code){
Kujira 3:639e05fcfa0b 534
Kujira 3:639e05fcfa0b 535 float analog_data;
Kujira 3:639e05fcfa0b 536
Kujira 3:639e05fcfa0b 537 analog_data = code * LSB_I / GAIN_I / TIME_INT * CAP ;
Kujira 3:639e05fcfa0b 538
Kujira 3:639e05fcfa0b 539 return( analog_data );
Kujira 3:639e05fcfa0b 540
Kujira 3:639e05fcfa0b 541 }
Kujira 3:639e05fcfa0b 542 */
Kujira 3:639e05fcfa0b 543
Kujira 0:1977c2310ef7 544 /*******************************
Kujira 0:1977c2310ef7 545
Kujira 0:1977c2310ef7 546 set mode interruptin/degitalin
Kujira 0:1977c2310ef7 547
Kujira 0:1977c2310ef7 548 *******************************/
Kujira 0:1977c2310ef7 549 void set_pullup()
Kujira 0:1977c2310ef7 550 {
Kujira 4:24481ebef1c4 551 /*** ver3 ***/
Kujira 4:24481ebef1c4 552 for (int i = 0; i <= 5; i++){
Kujira 4:24481ebef1c4 553 seq_in[i].mode(PullUp);
Kujira 4:24481ebef1c4 554 }
Kujira 4:24481ebef1c4 555
Kujira 4:24481ebef1c4 556 /*
Kujira 0:1977c2310ef7 557 sw_start.mode(PullUp);
Kujira 0:1977c2310ef7 558 seq_start.mode(PullUp);//シーケンサからのスタート信号
Kujira 0:1977c2310ef7 559 seq_cal_a.mode(PullUp);
Kujira 0:1977c2310ef7 560 seq_cal_b.mode(PullUp);
Kujira 0:1977c2310ef7 561 seq_cal_c.mode(PullUp);
Kujira 0:1977c2310ef7 562 seq_kosuu_a.mode(PullUp);
Kujira 0:1977c2310ef7 563 seq_kosuu_b.mode(PullUp);
Kujira 4:24481ebef1c4 564 */
Kujira 0:1977c2310ef7 565 }
Kujira 0:1977c2310ef7 566 /*******************************
Kujira 0:1977c2310ef7 567
Kujira 0:1977c2310ef7 568 Sequence Mode main screen
Kujira 0:1977c2310ef7 569
Kujira 0:1977c2310ef7 570 *******************************/
Kujira 0:1977c2310ef7 571 void seq()
Kujira 0:1977c2310ef7 572 {
Kujira 0:1977c2310ef7 573 gu_cls();//clear screen
Kujira 0:1977c2310ef7 574 gu_fontsize(2);
Kujira 0:1977c2310ef7 575 gu_print1("Sequenser Mode");
Kujira 0:1977c2310ef7 576
Kujira 0:1977c2310ef7 577 //seq_start.fall(&trigger);//スタート信号立下りで割込み
Kujira 0:1977c2310ef7 578
Kujira 0:1977c2310ef7 579 //シーケンサのトリガ以外は受け付けない
Kujira 0:1977c2310ef7 580 while(1) {
Kujira 4:24481ebef1c4 581 /*** ver3 ***/
Kujira 4:24481ebef1c4 582 //if( seq_start == 0 ) {
Kujira 4:24481ebef1c4 583 if ( seq_in[0] == 0 ){
Kujira 0:1977c2310ef7 584
Kujira 0:1977c2310ef7 585 trigger();
Kujira 0:1977c2310ef7 586
Kujira 0:1977c2310ef7 587 }
Kujira 0:1977c2310ef7 588
Kujira 0:1977c2310ef7 589 wait(0.3);
Kujira 0:1977c2310ef7 590
Kujira 0:1977c2310ef7 591 }//while(1)
Kujira 0:1977c2310ef7 592 }
Kujira 0:1977c2310ef7 593
Kujira 0:1977c2310ef7 594
Kujira 0:1977c2310ef7 595 /*******************************
Kujira 0:1977c2310ef7 596
Kujira 0:1977c2310ef7 597 Strart Sequence
Kujira 0:1977c2310ef7 598
Kujira 0:1977c2310ef7 599 *******************************/
Kujira 0:1977c2310ef7 600 void trigger()
Kujira 0:1977c2310ef7 601 {
Kujira 0:1977c2310ef7 602 char meas_num;//測定個数
Kujira 0:1977c2310ef7 603 char cal_num; //CAL選択ナンバー
Kujira 0:1977c2310ef7 604 //char cmd_gu[2];
Kujira 0:1977c2310ef7 605
Kujira 0:1977c2310ef7 606 gu_cls();//clear screen
Kujira 0:1977c2310ef7 607 gu_fontsize(2);
Kujira 0:1977c2310ef7 608 gu_print1("Sequenser Mode");
Kujira 0:1977c2310ef7 609 gu_fontsize(1);
Kujira 0:1977c2310ef7 610 gu_cursor(0,3);
Kujira 0:1977c2310ef7 611 gu_print1("start ");
Kujira 0:1977c2310ef7 612 gu_cursor(128,0);
Kujira 0:1977c2310ef7 613 gu_print1("CAL.");
Kujira 0:1977c2310ef7 614
Kujira 0:1977c2310ef7 615 //シーケンサからCAL選択bit読込と表示
Kujira 4:24481ebef1c4 616 /*
Kujira 0:1977c2310ef7 617 cal_num = ( seq_cal_c << 2 ) + ( seq_cal_b << 1 ) + seq_cal_a;
Kujira 0:1977c2310ef7 618
Kujira 0:1977c2310ef7 619 cal_num = ( ~ cal_num ) & 0x7 ; //3bit入力の負論理
Kujira 4:24481ebef1c4 620 */
Kujira 4:24481ebef1c4 621
Kujira 4:24481ebef1c4 622 /*** v3 debug ***/
Kujira 4:24481ebef1c4 623 cal_num = 1;
Kujira 0:1977c2310ef7 624
Kujira 0:1977c2310ef7 625 //read caliber infomation from eeprom
Kujira 0:1977c2310ef7 626 if( cal_num >= 1 && cal_num <= 6 ) {
Kujira 0:1977c2310ef7 627 read_caliber(&calinfo, cal_num);
Kujira 0:1977c2310ef7 628 gu_onebyte( cal_num + 0x30 );//CAL.No.確認用
Kujira 0:1977c2310ef7 629 } else {
Kujira 0:1977c2310ef7 630 gu_cls();
Kujira 0:1977c2310ef7 631 gu_fontsize(1);
Kujira 0:1977c2310ef7 632 gu_print1("Cal number error");
Kujira 0:1977c2310ef7 633 wait(1);
Kujira 0:1977c2310ef7 634
Kujira 0:1977c2310ef7 635 }
Kujira 0:1977c2310ef7 636
Kujira 4:24481ebef1c4 637 /*** v3 debag ***/
Kujira 4:24481ebef1c4 638 //meas_num = ( ~(( seq_kosuu_b << 1 ) + seq_kosuu_a )) & 0x3; //2bit負論理
Kujira 4:24481ebef1c4 639 meas_num = ( ~(( seq_in[2] << 1 ) + seq_in[3] )) & 0x3; //2bit負論理
Kujira 4:24481ebef1c4 640 /******/
Kujira 0:1977c2310ef7 641
Kujira 0:1977c2310ef7 642 gu_cursor(128,1);
Kujira 0:1977c2310ef7 643 gu_print1("n=");
Kujira 0:1977c2310ef7 644 gu_onebyte( meas_num + 0x30 );//測定個数確認用
Kujira 0:1977c2310ef7 645
Kujira 4:24481ebef1c4 646 /*** ver3 ***/
Kujira 4:24481ebef1c4 647 //seq_busy = 1;//DegitalOut busy
Kujira 4:24481ebef1c4 648 seq_out[4] = 1;
Kujira 0:1977c2310ef7 649
Kujira 0:1977c2310ef7 650 auto_meas( meas_num );
Kujira 0:1977c2310ef7 651
Kujira 0:1977c2310ef7 652 //判定結果をシーケンサへ出力
Kujira 0:1977c2310ef7 653 hantei( meas_num );
Kujira 0:1977c2310ef7 654
Kujira 0:1977c2310ef7 655 wait(0.1);
Kujira 0:1977c2310ef7 656
Kujira 4:24481ebef1c4 657 //測定終了ver3
Kujira 4:24481ebef1c4 658 //seq_busy = 0;//DegitalOut busy
Kujira 4:24481ebef1c4 659 seq_out[4] = 1;
Kujira 0:1977c2310ef7 660
Kujira 0:1977c2310ef7 661 //終了表示
Kujira 0:1977c2310ef7 662 gu_fontsize(1);
Kujira 0:1977c2310ef7 663 gu_cursor(0,3);
Kujira 0:1977c2310ef7 664 gu_print1("ready ");
Kujira 0:1977c2310ef7 665
Kujira 0:1977c2310ef7 666 }
Kujira 0:1977c2310ef7 667
Kujira 4:24481ebef1c4 668 /*******************************************************************************
Kujira 0:1977c2310ef7 669
Kujira 0:1977c2310ef7 670 EEPROMへCAL情報(struct)を保存
Kujira 4:24481ebef1c4 671
Kujira 4:24481ebef1c4 672 ver3. CAT24M01用に改修 2022.4.12
Kujira 4:24481ebef1c4 673
Kujira 4:24481ebef1c4 674 1page(256byte)につき1Cal分の品種情報を登録する。
Kujira 4:24481ebef1c4 675 BYTE_ADDRESS上位9bitでpage指定。下位8bitはpage内アドレス。
Kujira 4:24481ebef1c4 676
Kujira 4:24481ebef1c4 677 argument
Kujira 4:24481ebef1c4 678 num : CAL登録ナンバー(1~50)
Kujira 4:24481ebef1c4 679 cal_info : 測定条件
Kujira 4:24481ebef1c4 680
Kujira 4:24481ebef1c4 681 *******************************************************************************/
Kujira 0:1977c2310ef7 682 void write_caliber_information(cal_info *cal, int num)
Kujira 0:1977c2310ef7 683 {
Kujira 4:24481ebef1c4 684 char cdata[28]; //1byte*x
Kujira 4:24481ebef1c4 685 int adrs_init;
Kujira 4:24481ebef1c4 686 int adrs;
Kujira 4:24481ebef1c4 687
Kujira 4:24481ebef1c4 688 adrs_init = ((adrs_calinfo[0] << 8 ) & 0xFF00 ) + (adrs_calinfo[1] & 0xFF);
Kujira 4:24481ebef1c4 689
Kujira 4:24481ebef1c4 690 //EEPROM書込み page指定
Kujira 4:24481ebef1c4 691
Kujira 4:24481ebef1c4 692 adrs = adrs_init + 0x100 * ( num - 1 );
Kujira 4:24481ebef1c4 693 cdata[0] = ( (adrs & 0xFF00) >> 8 ) & 0xFF; //address 15~8 bit
Kujira 4:24481ebef1c4 694 cdata[1] = 0x00; //address 7~0 bit
Kujira 4:24481ebef1c4 695
Kujira 4:24481ebef1c4 696 //連続データ書込み BYTE_ADDRESS 下位8bit 0x00~0x0Bまで
Kujira 4:24481ebef1c4 697
Kujira 4:24481ebef1c4 698 cdata[2] = calinfo.vss_iop & 0xFF; //0x00
Kujira 4:24481ebef1c4 699 cdata[3] = ( calinfo.vss_iop >> 8 ) & 0xFF; //0x01
Kujira 4:24481ebef1c4 700
Kujira 4:24481ebef1c4 701 cdata[4] = calinfo.vss_ocp & 0xFF; //0x02
Kujira 4:24481ebef1c4 702 cdata[5] = ( calinfo.vss_ocp >> 8 ) & 0xFF; //0x03
Kujira 4:24481ebef1c4 703
Kujira 4:24481ebef1c4 704 cdata[6] = calinfo.vss_voc & 0xFF; //0x04
Kujira 4:24481ebef1c4 705 cdata[7] = ( calinfo.vss_voc >> 8 ) & 0xFF; //0x05
Kujira 4:24481ebef1c4 706
Kujira 4:24481ebef1c4 707 cdata[8] = calinfo.low_limit_voc & 0xFF; //0x06
Kujira 4:24481ebef1c4 708 cdata[9] = ( calinfo.low_limit_voc >> 8 ) & 0xFF; //0x07
Kujira 4:24481ebef1c4 709
Kujira 4:24481ebef1c4 710 cdata[10] = calinfo.low_limit_iop & 0xFF; //0x08
Kujira 4:24481ebef1c4 711 cdata[11] = ( calinfo.low_limit_iop >> 8 ) & 0xFF; //0x09
Kujira 4:24481ebef1c4 712
Kujira 4:24481ebef1c4 713 cdata[12] = calinfo.low_limit_ocp & 0xFF; //0x0A
Kujira 4:24481ebef1c4 714 cdata[13] = ( calinfo.low_limit_ocp >> 8 ) & 0xFF; //0x0B
Kujira 4:24481ebef1c4 715
Kujira 4:24481ebef1c4 716 cdata[14] = calinfo.up_limit_ocp & 0xFF; //0x0C
Kujira 4:24481ebef1c4 717 cdata[15] = ( calinfo.up_limit_ocp >> 8 ) & 0xFF; //0x0D
Kujira 4:24481ebef1c4 718
Kujira 4:24481ebef1c4 719 cdata[16] = calinfo.low_limit_ocp_v & 0xFF; //0x0E
Kujira 4:24481ebef1c4 720 cdata[17] = ( calinfo.low_limit_ocp_v >> 8 ) & 0xFF; //0x0F
Kujira 4:24481ebef1c4 721
Kujira 4:24481ebef1c4 722 cdata[18] = calinfo.up_limit_ocp_v & 0xFF; //0x10
Kujira 4:24481ebef1c4 723 cdata[19] = ( calinfo.up_limit_ocp_v >> 8 ) & 0xFF; //0x11
Kujira 4:24481ebef1c4 724
Kujira 4:24481ebef1c4 725 cdata[20] = calinfo.wait_iop; //0x12
Kujira 4:24481ebef1c4 726 cdata[21] = calinfo.wait_ocp; //0x13
Kujira 4:24481ebef1c4 727 cdata[22] = calinfo.wait_voc; //0x14
Kujira 4:24481ebef1c4 728
Kujira 4:24481ebef1c4 729 cdata[23] = calinfo.low_limit_resistor / 10; //0x15 1bitあたり10ohm
Kujira 4:24481ebef1c4 730 cdata[24] = calinfo.up_limit_resistor / 10; //0x16 1bitあたり10ohm
Kujira 4:24481ebef1c4 731
Kujira 4:24481ebef1c4 732 cdata[25] = calinfo.name[0]; //0x17
Kujira 4:24481ebef1c4 733 cdata[26] = calinfo.name[1]; //0x18
Kujira 4:24481ebef1c4 734 cdata[27] = calinfo.name[2]; //0x19
Kujira 4:24481ebef1c4 735 //cdata[28] = calinfo.name[3]; //0x1A
Kujira 4:24481ebef1c4 736
Kujira 4:24481ebef1c4 737 Soushin = i2c.write (eeprom_adrs, cdata, 28);
Kujira 4:24481ebef1c4 738
Kujira 4:24481ebef1c4 739 wait(0.2); //ver3
Kujira 0:1977c2310ef7 740
Kujira 0:1977c2310ef7 741 }
Kujira 4:24481ebef1c4 742 /*******************************************************************************
Kujira 0:1977c2310ef7 743
Kujira 0:1977c2310ef7 744 EEPROMからCAL情報を
Kujira 0:1977c2310ef7 745 読み出して構造体へ代入する
Kujira 0:1977c2310ef7 746
Kujira 4:24481ebef1c4 747 argument num:登録番号
Kujira 4:24481ebef1c4 748
Kujira 4:24481ebef1c4 749 ver3. CAT24M01用に改修 2022.4.12
Kujira 4:24481ebef1c4 750
Kujira 4:24481ebef1c4 751 *******************************************************************************/
Kujira 0:1977c2310ef7 752 void read_caliber(cal_info *cal, int num)
Kujira 0:1977c2310ef7 753 {
Kujira 0:1977c2310ef7 754 signed short sdata[16]; //CAL設定条件
Kujira 4:24481ebef1c4 755 int i;
Kujira 4:24481ebef1c4 756 int adrs_init;
Kujira 4:24481ebef1c4 757 int adrs;
Kujira 4:24481ebef1c4 758 char cdata[26];
Kujira 4:24481ebef1c4 759
Kujira 4:24481ebef1c4 760 adrs_init = ((adrs_calinfo[0] << 8 ) & 0xFF00) + (adrs_calinfo[1] & 0x00FF);
Kujira 4:24481ebef1c4 761
Kujira 4:24481ebef1c4 762 adrs = adrs_init + 0x100 * ( num - 1 );
Kujira 4:24481ebef1c4 763
Kujira 4:24481ebef1c4 764 wdata[0] = ( (adrs & 0xFF00) >> 8 ) & 0xFF; //address 15~8 bit
Kujira 4:24481ebef1c4 765 wdata[1] = 0x00; //address 7~0 bit
Kujira 4:24481ebef1c4 766
Kujira 4:24481ebef1c4 767 Soushin = i2c.write (eeprom_adrs, wdata, 2,true); //not set stpo at end
Kujira 4:24481ebef1c4 768 Jyushin = i2c.read ((eeprom_adrs + 0x01), cdata, 1);
Kujira 4:24481ebef1c4 769 Jyushin = i2c.read ((eeprom_adrs + 0x01), (cdata + 1), 26);//read 27byte
Kujira 4:24481ebef1c4 770
Kujira 4:24481ebef1c4 771 /*** ver3.0.0 debug***/
Kujira 4:24481ebef1c4 772 if ( Jyushin != 0 ){
Kujira 4:24481ebef1c4 773 gu_fontsize(1);
Kujira 4:24481ebef1c4 774 gu_cursor(0,2);
Kujira 4:24481ebef1c4 775 gu_print1("not read cal information");
Kujira 4:24481ebef1c4 776 }
Kujira 4:24481ebef1c4 777
Kujira 4:24481ebef1c4 778 //データ合成 EEPROM_BYTE 0x00~0x11まで2byte結合
Kujira 4:24481ebef1c4 779 for ( i = 0; i <= 8; i++ ) {
Kujira 4:24481ebef1c4 780 sdata[i] = cdata[i*2] | ( cdata[ i*2 + 1 ] << 8 );
Kujira 0:1977c2310ef7 781 }
Kujira 4:24481ebef1c4 782
Kujira 0:1977c2310ef7 783 cal -> number = num;
Kujira 4:24481ebef1c4 784 cal -> vss_iop = sdata[0]; //0x00
Kujira 4:24481ebef1c4 785 cal -> vss_ocp = sdata[1]; //0x02
Kujira 4:24481ebef1c4 786 cal -> vss_voc = sdata[2]; //0x04
Kujira 4:24481ebef1c4 787 cal -> low_limit_voc = sdata[3]; //0x06
Kujira 4:24481ebef1c4 788 cal -> low_limit_iop = sdata[4]; //0x08
Kujira 4:24481ebef1c4 789 cal -> low_limit_ocp = sdata[5]; //0x0A
Kujira 4:24481ebef1c4 790 cal -> up_limit_ocp = sdata[6]; //0x0C
Kujira 4:24481ebef1c4 791 cal -> low_limit_ocp_v = sdata[7]; //0x0E
Kujira 4:24481ebef1c4 792 cal -> up_limit_ocp_v = sdata[8]; //0x10
Kujira 4:24481ebef1c4 793
Kujira 4:24481ebef1c4 794 cal -> wait_iop = cdata[18]; //0x12 wait_iop
Kujira 4:24481ebef1c4 795 cal -> wait_ocp = cdata[19]; //0x13 wait_ocp
Kujira 4:24481ebef1c4 796 cal -> wait_voc = cdata[20]; //0x14 wait_voc
Kujira 4:24481ebef1c4 797
Kujira 4:24481ebef1c4 798 cal -> low_limit_resistor = cdata[21] * 10; //0x15 low_limit_resistor
Kujira 4:24481ebef1c4 799 cal -> up_limit_resistor = cdata[22] * 10; //0x16 up_limit_resistor
Kujira 4:24481ebef1c4 800
Kujira 4:24481ebef1c4 801 cal -> name[0] = cdata[23]; //0x17 cal name
Kujira 4:24481ebef1c4 802 cal -> name[1] = cdata[24]; //0x18 cal name
Kujira 4:24481ebef1c4 803 cal -> name[2] = cdata[25]; //0x19 cal name
Kujira 4:24481ebef1c4 804 //cal -> name[3] = cdata[26]; //0x1A cal name
Kujira 0:1977c2310ef7 805
Kujira 0:1977c2310ef7 806 }
Kujira 4:24481ebef1c4 807 /*******************************************************************************
Kujira 0:1977c2310ef7 808
Kujira 0:1977c2310ef7 809 EEPROMからCAL登録番号を読出し
Kujira 0:1977c2310ef7 810
Kujira 4:24481ebef1c4 811 ver3. CAT24M01用に改修 2022.4.11
Kujira 4:24481ebef1c4 812
Kujira 4:24481ebef1c4 813 *******************************************************************************/
Kujira 0:1977c2310ef7 814 void read_regnum()
Kujira 0:1977c2310ef7 815 {
Kujira 4:24481ebef1c4 816
Kujira 4:24481ebef1c4 817 //Selective Read Timing
Kujira 4:24481ebef1c4 818
Kujira 4:24481ebef1c4 819 Soushin = i2c.write (eeprom_adrs, adrs_calnum, 2,true); //ver3
Kujira 4:24481ebef1c4 820
Kujira 4:24481ebef1c4 821 Jyushin = i2c.read ((eeprom_adrs + 0x01), rdata, 1);//read 1byte
Kujira 0:1977c2310ef7 822
Kujira 0:1977c2310ef7 823 reg_num = rdata[0];
Kujira 0:1977c2310ef7 824 }
Kujira 4:24481ebef1c4 825 /*******************************************************************************
Kujira 4:24481ebef1c4 826
Kujira 4:24481ebef1c4 827 EEPROMからCAL登録情報全消去("0x00"書込み)
Kujira 4:24481ebef1c4 828
Kujira 4:24481ebef1c4 829 ver3. CAT24M01用に改修 2022.4.11
Kujira 4:24481ebef1c4 830 0x00000 ~ 0x032FF を消去
Kujira 4:24481ebef1c4 831
Kujira 4:24481ebef1c4 832 *******************************************************************************/
Kujira 0:1977c2310ef7 833 void erace_calinfo()
Kujira 0:1977c2310ef7 834 {
Kujira 0:1977c2310ef7 835 int i;
Kujira 4:24481ebef1c4 836 int j;
Kujira 4:24481ebef1c4 837
Kujira 4:24481ebef1c4 838 //init cal number ver3
Kujira 0:1977c2310ef7 839 reg_num = 0x01;
Kujira 4:24481ebef1c4 840 wdata[0] = adrs_calnum[0];
Kujira 4:24481ebef1c4 841 wdata[1] = adrs_calnum[1];
Kujira 4:24481ebef1c4 842 wdata[2] = reg_num;
Kujira 4:24481ebef1c4 843 Soushin = i2c.write (eeprom_adrs, wdata, 3);
Kujira 0:1977c2310ef7 844
Kujira 0:1977c2310ef7 845 wait(0.2);
Kujira 4:24481ebef1c4 846
Kujira 4:24481ebef1c4 847 //write "0x00" by 256 byte
Kujira 4:24481ebef1c4 848
Kujira 4:24481ebef1c4 849 char wd[258]; //DATA
Kujira 4:24481ebef1c4 850 int byte_adrs; //送信するBYTE ADDRESS I2C送信データの1,2BYTE目
Kujira 4:24481ebef1c4 851 const static int cal_adrs = 0x0100; //CAL情報を保存する開始アドレス
Kujira 4:24481ebef1c4 852 int page = 50; //page数
Kujira 4:24481ebef1c4 853
Kujira 4:24481ebef1c4 854 for ( j = 0; j < page; j++){
Kujira 4:24481ebef1c4 855
Kujira 4:24481ebef1c4 856 byte_adrs = cal_adrs + j * 256;
Kujira 4:24481ebef1c4 857 wd[0] = (byte_adrs & 0xFF00) >> 8;
Kujira 4:24481ebef1c4 858 wd[1] = byte_adrs & 0xFF;
Kujira 4:24481ebef1c4 859 for( i = 2; i <= 258; i++) { //write 1page(256byte)
Kujira 4:24481ebef1c4 860 wd[i] = 0x00;
Kujira 4:24481ebef1c4 861 }
Kujira 4:24481ebef1c4 862 Soushin = i2c.write (eeprom_adrs, wd, 258);
Kujira 4:24481ebef1c4 863
Kujira 4:24481ebef1c4 864 wait(0.2);
Kujira 4:24481ebef1c4 865
Kujira 0:1977c2310ef7 866 }
Kujira 0:1977c2310ef7 867
Kujira 0:1977c2310ef7 868 }
Kujira 4:24481ebef1c4 869 /*******************************************************************************
Kujira 0:1977c2310ef7 870
Kujira 0:1977c2310ef7 871 ADC(MCP3424) Configuration Register
Kujira 0:1977c2310ef7 872
Kujira 0:1977c2310ef7 873 ch : Channel Selection Bit
Kujira 0:1977c2310ef7 874 00 = Select Channel 1
Kujira 0:1977c2310ef7 875 01 = Select Channel 2
Kujira 0:1977c2310ef7 876 10 = Select Channel 3
Kujira 0:1977c2310ef7 877 11 = Select Channel 4
Kujira 0:1977c2310ef7 878
Kujira 0:1977c2310ef7 879 rate : Sample Rate Selection Bit
Kujira 0:1977c2310ef7 880 00 = 240 SPS(12bits)
Kujira 0:1977c2310ef7 881 01 = 60 SPS(14bits)
Kujira 0:1977c2310ef7 882 10 = 15 SPS(16bits)
Kujira 0:1977c2310ef7 883 11 = 3.75 SPS(18bits)
Kujira 0:1977c2310ef7 884
Kujira 4:24481ebef1c4 885 *******************************************************************************/
Kujira 0:1977c2310ef7 886 char adc_config(char ch, char rate)
Kujira 0:1977c2310ef7 887 {
Kujira 0:1977c2310ef7 888 char confreg; //Configuration Register 1byte
Kujira 0:1977c2310ef7 889
Kujira 0:1977c2310ef7 890 char rdy = 0; //Ready Bit
Kujira 0:1977c2310ef7 891 char cm = 1; //Conversion Mode Bit
Kujira 0:1977c2310ef7 892 char gain = 0; //PGA Gain Selection Bits
Kujira 0:1977c2310ef7 893
Kujira 0:1977c2310ef7 894 confreg = (( rdy & 0x1 ) << 7 ) + (( ch & 0x3) << 5 ) + (( cm & 0x1 ) << 4) + (( rate & 0x3 ) << 2) + ( gain & 0x3 ) ;
Kujira 0:1977c2310ef7 895
Kujira 0:1977c2310ef7 896 return( confreg );
Kujira 0:1977c2310ef7 897 }
Kujira 0:1977c2310ef7 898 /******************************************
Kujira 0:1977c2310ef7 899
Kujira 0:1977c2310ef7 900 ADC(MCP3424) Configuration Register
Kujira 0:1977c2310ef7 901 電流測定チャンネルの選択
Kujira 0:1977c2310ef7 902 char ch : 1~4ch
Kujira 0:1977c2310ef7 903
Kujira 0:1977c2310ef7 904 ******************************************/
Kujira 0:1977c2310ef7 905 void select_ich(char ch)
Kujira 0:1977c2310ef7 906 {
Kujira 0:1977c2310ef7 907 char com;
Kujira 0:1977c2310ef7 908
Kujira 0:1977c2310ef7 909 switch ( ch ) {
Kujira 0:1977c2310ef7 910 case 0:
Kujira 0:1977c2310ef7 911 com = adc_config( 0, 1 );//ADC3_ch1選択 14bits
Kujira 0:1977c2310ef7 912 i2c.write( addr_ADC3, &com, 1 );
Kujira 0:1977c2310ef7 913 break;
Kujira 0:1977c2310ef7 914 case 1:
Kujira 0:1977c2310ef7 915 com = adc_config( 1, 1 );//ADC3_ch2選択 14bits
Kujira 0:1977c2310ef7 916 i2c.write( addr_ADC3, &com, 1 );
Kujira 0:1977c2310ef7 917 break;
Kujira 0:1977c2310ef7 918 case 2:
Kujira 0:1977c2310ef7 919 com = adc_config( 0, 1 );//ADC4_ch1選択 14bits
Kujira 0:1977c2310ef7 920 i2c.write( addr_ADC4, &com, 1 );
Kujira 0:1977c2310ef7 921 break;
Kujira 0:1977c2310ef7 922 case 3:
Kujira 0:1977c2310ef7 923 com = adc_config( 1, 1 );//ADC4_ch2選択 14bits
Kujira 0:1977c2310ef7 924 i2c.write( addr_ADC4, &com, 1 );
Kujira 0:1977c2310ef7 925 break;
Kujira 0:1977c2310ef7 926 }
Kujira 0:1977c2310ef7 927 }
Kujira 4:24481ebef1c4 928 /*******************************************************************************
Kujira 0:1977c2310ef7 929
Kujira 0:1977c2310ef7 930 ADC(MCP3424)
Kujira 0:1977c2310ef7 931 指定addressから2byte読込み
Kujira 0:1977c2310ef7 932
Kujira 4:24481ebef1c4 933 *******************************************************************************/
Kujira 0:1977c2310ef7 934 short read_adc(char addr)//指定addressから2byte読込み
Kujira 0:1977c2310ef7 935 {
Kujira 0:1977c2310ef7 936 char cdata[2];//1byte
Kujira 0:1977c2310ef7 937 short sdata;//2byte
Kujira 0:1977c2310ef7 938
Kujira 0:1977c2310ef7 939 i2c.read( addr + 0x01, cdata, 2);
Kujira 0:1977c2310ef7 940
Kujira 0:1977c2310ef7 941 //connect 2byte
Kujira 0:1977c2310ef7 942 sdata = cdata[0] & 0xFF;
Kujira 0:1977c2310ef7 943 sdata = ( sdata << 8 ) | cdata[1];
Kujira 0:1977c2310ef7 944
Kujira 0:1977c2310ef7 945 return ( sdata );
Kujira 0:1977c2310ef7 946 }
Kujira 4:24481ebef1c4 947 /*******************************************************************************
Kujira 0:1977c2310ef7 948
Kujira 0:1977c2310ef7 949 AUTO/SEQ Mode
Kujira 0:1977c2310ef7 950
Kujira 0:1977c2310ef7 951 ワンショットタイマー発生イベント
Kujira 0:1977c2310ef7 952
Kujira 0:1977c2310ef7 953 For Current measurement
Kujira 0:1977c2310ef7 954 a recurring interrupt to repeatedly call a function at a specified rate.
Kujira 0:1977c2310ef7 955
Kujira 4:24481ebef1c4 956 *******************************************************************************/
Kujira 0:1977c2310ef7 957 void flip_ch1()
Kujira 0:1977c2310ef7 958 {
Kujira 0:1977c2310ef7 959 short sdata;
Kujira 0:1977c2310ef7 960
Kujira 0:1977c2310ef7 961 sdata = read_adc( addr_ADC3 );
Kujira 0:1977c2310ef7 962
Kujira 0:1977c2310ef7 963 I[0] = sdata * 5 * 0.25;
Kujira 0:1977c2310ef7 964
Kujira 0:1977c2310ef7 965 //次の測定chへ切替
Kujira 0:1977c2310ef7 966 select_ich(1);
Kujira 0:1977c2310ef7 967 }
Kujira 0:1977c2310ef7 968
Kujira 0:1977c2310ef7 969 void flip_ch2()
Kujira 0:1977c2310ef7 970 {
Kujira 0:1977c2310ef7 971 short sdata;
Kujira 0:1977c2310ef7 972
Kujira 0:1977c2310ef7 973 sdata = read_adc( addr_ADC3 );
Kujira 0:1977c2310ef7 974
Kujira 0:1977c2310ef7 975 I[1] = sdata * 5 * 0.25;
Kujira 0:1977c2310ef7 976
Kujira 0:1977c2310ef7 977 //次の測定chへ切替
Kujira 0:1977c2310ef7 978 select_ich(2);
Kujira 0:1977c2310ef7 979 }
Kujira 0:1977c2310ef7 980
Kujira 0:1977c2310ef7 981 void flip_ch3()
Kujira 0:1977c2310ef7 982 {
Kujira 0:1977c2310ef7 983 short sdata;
Kujira 0:1977c2310ef7 984
Kujira 0:1977c2310ef7 985 sdata = read_adc( addr_ADC4 );
Kujira 0:1977c2310ef7 986
Kujira 0:1977c2310ef7 987 I[2] = sdata * 5 * 0.25;
Kujira 0:1977c2310ef7 988
Kujira 0:1977c2310ef7 989 //次の測定chへ切替
Kujira 0:1977c2310ef7 990 select_ich(3);
Kujira 0:1977c2310ef7 991 }
Kujira 0:1977c2310ef7 992
Kujira 0:1977c2310ef7 993 void flip_ch4()
Kujira 0:1977c2310ef7 994 {
Kujira 0:1977c2310ef7 995 short sdata;
Kujira 0:1977c2310ef7 996
Kujira 0:1977c2310ef7 997 sdata = read_adc( addr_ADC4 );
Kujira 0:1977c2310ef7 998
Kujira 0:1977c2310ef7 999 I[3] = sdata * 5 * 0.25;
Kujira 0:1977c2310ef7 1000
Kujira 0:1977c2310ef7 1001 //次の測定chへ切替 無し
Kujira 0:1977c2310ef7 1002 }
Kujira 0:1977c2310ef7 1003
Kujira 4:24481ebef1c4 1004 /*******************************************************************************
Kujira 0:1977c2310ef7 1005
Kujira 0:1977c2310ef7 1006 Manual Mode
Kujira 0:1977c2310ef7 1007
Kujira 0:1977c2310ef7 1008 繰り返しタイマー発生イベント
Kujira 0:1977c2310ef7 1009
Kujira 0:1977c2310ef7 1010 For Current measurement
Kujira 0:1977c2310ef7 1011 a recurring interrupt to repeatedly call a function at a specified rate.
Kujira 0:1977c2310ef7 1012
Kujira 4:24481ebef1c4 1013 *******************************************************************************/
Kujira 0:1977c2310ef7 1014 void flip()
Kujira 0:1977c2310ef7 1015 {
Kujira 0:1977c2310ef7 1016 short sdata; //_2byte reading data of ADC
Kujira 0:1977c2310ef7 1017 float fdata; // ver1.1.4
Kujira 0:1977c2310ef7 1018
Kujira 0:1977c2310ef7 1019 switch ( ch_num ) {
Kujira 0:1977c2310ef7 1020 case 0:
Kujira 0:1977c2310ef7 1021 case 1:
Kujira 0:1977c2310ef7 1022 sdata = read_adc( addr_ADC3 );
Kujira 0:1977c2310ef7 1023 break;
Kujira 0:1977c2310ef7 1024 case 2:
Kujira 0:1977c2310ef7 1025 case 3:
Kujira 0:1977c2310ef7 1026 sdata = read_adc( addr_ADC4 );
Kujira 0:1977c2310ef7 1027 break;
Kujira 0:1977c2310ef7 1028 }
Kujira 0:1977c2310ef7 1029
Kujira 0:1977c2310ef7 1030 //sdata = sdata * 5 * 0.25;//プリアンプのGAINが1/5なのでここで5倍.ADC14bit分解能で、1bitあたり0.25mv
Kujira 0:1977c2310ef7 1031 /*ver1.1.4*/
Kujira 0:1977c2310ef7 1032 fdata = sdata * 5 * 0.25;//プリアンプのGAINが1/5なのでここで5倍.ADC14bit分解能で、1bitあたり0.25mv
Kujira 0:1977c2310ef7 1033
Kujira 0:1977c2310ef7 1034 gu_cursor(0,4);
Kujira 0:1977c2310ef7 1035 gu_print1(" ");
Kujira 0:1977c2310ef7 1036 /*ver1.1.4*/
Kujira 0:1977c2310ef7 1037 gu_putdeci(&fdata);
Kujira 0:1977c2310ef7 1038 //gu_putdeci(&sdata);
Kujira 0:1977c2310ef7 1039
Kujira 0:1977c2310ef7 1040 houden[ ch_num ] = 1; //Discharge
Kujira 0:1977c2310ef7 1041
Kujira 0:1977c2310ef7 1042 wait(time_discharge); //Discharge time
Kujira 0:1977c2310ef7 1043
Kujira 0:1977c2310ef7 1044 houden[ ch_num ] = 0; //charging
Kujira 0:1977c2310ef7 1045
Kujira 0:1977c2310ef7 1046 }
Kujira 0:1977c2310ef7 1047 /*********************************
Kujira 0:1977c2310ef7 1048 Manual Mode
Kujira 0:1977c2310ef7 1049 initial screen
Kujira 0:1977c2310ef7 1050 *********************************/
Kujira 0:1977c2310ef7 1051 void manual_int_hyouji()
Kujira 0:1977c2310ef7 1052 {
Kujira 0:1977c2310ef7 1053
Kujira 0:1977c2310ef7 1054 /* 画面表示 */
Kujira 0:1977c2310ef7 1055 gu_cls();
Kujira 0:1977c2310ef7 1056 gu_fontsize(2); //change fontsize
Kujira 0:1977c2310ef7 1057 gu_fontWidth(Proportional1);
Kujira 0:1977c2310ef7 1058 gu_print1("Manual Mode");
Kujira 0:1977c2310ef7 1059
Kujira 0:1977c2310ef7 1060 gu_cursor(0, 2);
Kujira 0:1977c2310ef7 1061 gu_print1("CH.");
Kujira 0:1977c2310ef7 1062 gu_cursor(40, 14);
Kujira 0:1977c2310ef7 1063 gu_print1("vss");
Kujira 0:1977c2310ef7 1064 gu_cursor(192, 14);
Kujira 0:1977c2310ef7 1065 gu_print1("ch.");
Kujira 0:1977c2310ef7 1066 /*
Kujira 0:1977c2310ef7 1067 gu_cursor(128, 14);
Kujira 0:1977c2310ef7 1068 gu_print1("slct ch.");
Kujira 0:1977c2310ef7 1069 */
Kujira 0:1977c2310ef7 1070
Kujira 0:1977c2310ef7 1071 //操作ボタン配置
Kujira 0:1977c2310ef7 1072 gu_Button_power_on();//メニューへ戻る
Kujira 0:1977c2310ef7 1073 gu_button_up(27);//印加電圧増加
Kujira 0:1977c2310ef7 1074 gu_button_down(28);//印加電圧減少
Kujira 0:1977c2310ef7 1075 gu_button_up(32);//ch切替
Kujira 0:1977c2310ef7 1076 //gu_button_down(32);//ch切替
Kujira 0:1977c2310ef7 1077
Kujira 0:1977c2310ef7 1078 //Show Reset button(LEFT)
Kujira 0:1977c2310ef7 1079 gu_set_button(25,"R");
Kujira 0:1977c2310ef7 1080
Kujira 0:1977c2310ef7 1081 }
Kujira 0:1977c2310ef7 1082 /*********************************
Kujira 0:1977c2310ef7 1083
Kujira 0:1977c2310ef7 1084 Manual Mode (Main)
Kujira 0:1977c2310ef7 1085
Kujira 0:1977c2310ef7 1086 *********************************/
Kujira 0:1977c2310ef7 1087 void manual()
Kujira 0:1977c2310ef7 1088 {
Kujira 0:1977c2310ef7 1089
Kujira 0:1977c2310ef7 1090 char cswnum; //SW_No. sw1->0x00 ~~ sw32->0x1F
Kujira 0:1977c2310ef7 1091 char cswdata; // 0x00 or 0x01
Kujira 0:1977c2310ef7 1092 char crdata[3];
Kujira 0:1977c2310ef7 1093 char *pcswnum = &cswnum;
Kujira 0:1977c2310ef7 1094 char *pcswdata = &cswdata;
Kujira 0:1977c2310ef7 1095 int i;
Kujira 0:1977c2310ef7 1096 int j;
Kujira 0:1977c2310ef7 1097 float interval;//繰り返し測定間隔(s) <- 積分時間と、繰り返し割込みサブ中のwait(放電時間)も足す
Kujira 0:1977c2310ef7 1098 short vss;
Kujira 0:1977c2310ef7 1099 short sdata;
Kujira 0:1977c2310ef7 1100 int r_flag;
Kujira 0:1977c2310ef7 1101 float ima;
Kujira 0:1977c2310ef7 1102 short ssdata;
Kujira 0:1977c2310ef7 1103
Kujira 0:1977c2310ef7 1104 ch_num = 0; //初期電流測定CH.
Kujira 0:1977c2310ef7 1105
Kujira 0:1977c2310ef7 1106 interval = time_integral + time_discharge ;//繰り返し割込みの間隔設定
Kujira 0:1977c2310ef7 1107 flipper.attach(&flip, interval);
Kujira 0:1977c2310ef7 1108
Kujira 0:1977c2310ef7 1109 read_regnum();//CAL登録No.読込
Kujira 0:1977c2310ef7 1110 read_caliber(&calinfo, reg_num);//指定したCAL登録No.の情報を読込後、calinfoへ代入
Kujira 0:1977c2310ef7 1111
Kujira 0:1977c2310ef7 1112 /* 初期表示 */
Kujira 0:1977c2310ef7 1113 manual_int_hyouji();
Kujira 0:1977c2310ef7 1114 //選択測定チャンネルの表示
Kujira 0:1977c2310ef7 1115 gu_fontsize(2); //change fontsize
Kujira 0:1977c2310ef7 1116 gu_cursor(24, 2);
Kujira 0:1977c2310ef7 1117 wdata[0] = ( ch_num + 1 ) + 0x30;
Kujira 0:1977c2310ef7 1118 i2c.write( addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 1119
Kujira 0:1977c2310ef7 1120 //初期測定設定
Kujira 0:1977c2310ef7 1121 //set range
Kujira 0:1977c2310ef7 1122 range[0] = 1;//ch.1 10uA測定レンジ
Kujira 0:1977c2310ef7 1123 //select channel
Kujira 0:1977c2310ef7 1124 wdata[0] = adc_config( 0, 1 );//ADC3_ch1選択 14bits
Kujira 0:1977c2310ef7 1125 i2c.write( addr_ADC3, wdata, 1 );
Kujira 0:1977c2310ef7 1126
Kujira 0:1977c2310ef7 1127 vss = calinfo.vss_iop;
Kujira 0:1977c2310ef7 1128
Kujira 0:1977c2310ef7 1129 //apply Vss to all channel
Kujira 0:1977c2310ef7 1130 for ( i = 0; i <= (number_of_channels - 1); i++) {
Kujira 0:1977c2310ef7 1131 dac_out( calinfo.vss_iop,i); //Vss設定 DAC
Kujira 0:1977c2310ef7 1132 }
Kujira 0:1977c2310ef7 1133
Kujira 0:1977c2310ef7 1134 gu_cursor(0,8);
Kujira 0:1977c2310ef7 1135 gu_print1("Vss ");
Kujira 0:1977c2310ef7 1136
Kujira 0:1977c2310ef7 1137 gu_cursor(64,8);
Kujira 0:1977c2310ef7 1138 sdata = -1 * vss;
Kujira 0:1977c2310ef7 1139 gu_putdeck( &sdata );
Kujira 0:1977c2310ef7 1140 gu_print1("V");
Kujira 0:1977c2310ef7 1141
Kujira 0:1977c2310ef7 1142 while(1) {
Kujira 0:1977c2310ef7 1143
Kujira 0:1977c2310ef7 1144 crdata[0] = 0;
Kujira 0:1977c2310ef7 1145 crdata[1] = 0;
Kujira 0:1977c2310ef7 1146 crdata[2] = 0;
Kujira 0:1977c2310ef7 1147
Kujira 0:1977c2310ef7 1148 //タッチパネルスイッチ読込
Kujira 0:1977c2310ef7 1149 Jyushin = i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 1150
Kujira 0:1977c2310ef7 1151 if (crdata[0] == 0x11 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。
Kujira 0:1977c2310ef7 1152 *pcswnum = crdata[1]; //スイッチ番号
Kujira 0:1977c2310ef7 1153 *pcswdata = crdata[2];//ON/OFF情報
Kujira 0:1977c2310ef7 1154
Kujira 0:1977c2310ef7 1155 if (cswdata == 0x01) { //タッチしたならば
Kujira 0:1977c2310ef7 1156 switch( cswnum ) { //SWの番号(位置)
Kujira 0:1977c2310ef7 1157
Kujira 0:1977c2310ef7 1158 case 26:
Kujira 0:1977c2310ef7 1159 //gu_reverse(0x01); //gu_リバース指定
Kujira 0:1977c2310ef7 1160 //gu_button_up(27);//印加電圧増加
Kujira 0:1977c2310ef7 1161
Kujira 0:1977c2310ef7 1162 if ( vss < 4500 ) {
Kujira 0:1977c2310ef7 1163 vss = vss + 100;
Kujira 0:1977c2310ef7 1164 }
Kujira 0:1977c2310ef7 1165
Kujira 0:1977c2310ef7 1166 //apply Vss to all channel
Kujira 0:1977c2310ef7 1167 for ( i = 0; i <= (number_of_channels - 1); i++) {
Kujira 0:1977c2310ef7 1168 dac_out( vss,i); //Vss設定 DAC
Kujira 0:1977c2310ef7 1169 }
Kujira 0:1977c2310ef7 1170
Kujira 0:1977c2310ef7 1171 gu_reverse(0x00);
Kujira 0:1977c2310ef7 1172 gu_cursor(64,8);
Kujira 0:1977c2310ef7 1173 sdata = -1 * vss;
Kujira 0:1977c2310ef7 1174 gu_putdeck( &sdata );
Kujira 0:1977c2310ef7 1175 gu_print1("V");
Kujira 0:1977c2310ef7 1176
Kujira 0:1977c2310ef7 1177 //gu_button_up(27);//印加電圧減少
Kujira 0:1977c2310ef7 1178
Kujira 0:1977c2310ef7 1179 wait(0.1);
Kujira 0:1977c2310ef7 1180
Kujira 0:1977c2310ef7 1181 break;
Kujira 0:1977c2310ef7 1182
Kujira 0:1977c2310ef7 1183 case 27:
Kujira 0:1977c2310ef7 1184 //gu_reverse(0x01); //gu_リバース指定
Kujira 0:1977c2310ef7 1185 //gu_button_down(28);//印加電圧減少
Kujira 0:1977c2310ef7 1186
Kujira 0:1977c2310ef7 1187 if ( vss >= 100 ) {
Kujira 0:1977c2310ef7 1188 vss = vss - 100;
Kujira 0:1977c2310ef7 1189 }
Kujira 0:1977c2310ef7 1190
Kujira 0:1977c2310ef7 1191 //apply Vss to all channel
Kujira 0:1977c2310ef7 1192 for ( i = 0; i <= (number_of_channels - 1); i++) {
Kujira 0:1977c2310ef7 1193 dac_out( vss,i); //Vss設定 DAC
Kujira 0:1977c2310ef7 1194 }
Kujira 0:1977c2310ef7 1195
Kujira 0:1977c2310ef7 1196 //gu_reverse(0x00); //gu_リバース指定
Kujira 0:1977c2310ef7 1197 gu_cursor(64,8);
Kujira 0:1977c2310ef7 1198 sdata = -1 * vss;
Kujira 0:1977c2310ef7 1199 gu_putdeck( &sdata );
Kujira 0:1977c2310ef7 1200 gu_print1("V");
Kujira 0:1977c2310ef7 1201
Kujira 0:1977c2310ef7 1202 //gu_button_down(28);//印加電圧減少
Kujira 0:1977c2310ef7 1203
Kujira 0:1977c2310ef7 1204 wait(0.1);
Kujira 0:1977c2310ef7 1205
Kujira 0:1977c2310ef7 1206 break;
Kujira 0:1977c2310ef7 1207
Kujira 0:1977c2310ef7 1208 case 0x07 ://Exit
Kujira 0:1977c2310ef7 1209
Kujira 0:1977c2310ef7 1210 gu_Button_power_off();//電源ボタンイメージ反転表示
Kujira 0:1977c2310ef7 1211
Kujira 0:1977c2310ef7 1212 //割り込み停止
Kujira 0:1977c2310ef7 1213 flipper.detach();
Kujira 0:1977c2310ef7 1214
Kujira 0:1977c2310ef7 1215 for( i = 0; i <= 3; i++) {
Kujira 0:1977c2310ef7 1216 houden[i] = 1;//discharge
Kujira 0:1977c2310ef7 1217 }
Kujira 0:1977c2310ef7 1218
Kujira 0:1977c2310ef7 1219 wait( time_discharge );
Kujira 0:1977c2310ef7 1220 //set measuring range
Kujira 0:1977c2310ef7 1221 for( i = 0; i <= 3; i++) {
Kujira 0:1977c2310ef7 1222 range[i] = 0;//range 1mA
Kujira 0:1977c2310ef7 1223 houden[i] = 0;//not discharge
Kujira 0:1977c2310ef7 1224 }
Kujira 0:1977c2310ef7 1225
Kujira 0:1977c2310ef7 1226 wait(0.2);
Kujira 0:1977c2310ef7 1227
Kujira 0:1977c2310ef7 1228 for ( i = 0; i <= 7; i++)
Kujira 0:1977c2310ef7 1229 io[i] = 0; //全てのio"L"
Kujira 0:1977c2310ef7 1230
Kujira 0:1977c2310ef7 1231 return;//この関数を抜ける
Kujira 0:1977c2310ef7 1232
Kujira 0:1977c2310ef7 1233 case 0x18 ://sw25 mv_reset
Kujira 0:1977c2310ef7 1234
Kujira 0:1977c2310ef7 1235 //gu_リバース指定
Kujira 0:1977c2310ef7 1236 gu_reverse(0x01);
Kujira 0:1977c2310ef7 1237 //Show Reset button(Left)
Kujira 0:1977c2310ef7 1238 gu_set_button(25,"R");
Kujira 0:1977c2310ef7 1239
Kujira 0:1977c2310ef7 1240 wait(0.1);
Kujira 0:1977c2310ef7 1241
Kujira 0:1977c2310ef7 1242 gu_reverse(0x00); //gu_リバース解除
Kujira 0:1977c2310ef7 1243 gu_set_button(25,"R"); //Show Reset button(Left)
Kujira 0:1977c2310ef7 1244
Kujira 0:1977c2310ef7 1245 io[ch_num] = 1;
Kujira 0:1977c2310ef7 1246
Kujira 0:1977c2310ef7 1247 //set measuring range ver1.1.0
Kujira 0:1977c2310ef7 1248 for( i = 0; i <= 3; i++)
Kujira 0:1977c2310ef7 1249 range[i] = 0;//range 1mA
Kujira 0:1977c2310ef7 1250
Kujira 0:1977c2310ef7 1251 r_flag = 1;
Kujira 0:1977c2310ef7 1252
Kujira 1:f6a9410c46d2 1253 //割り込み停止 電流測定用タイマー停止
Kujira 0:1977c2310ef7 1254 flipper.detach();
Kujira 0:1977c2310ef7 1255
Kujira 0:1977c2310ef7 1256 break;
Kujira 0:1977c2310ef7 1257
Kujira 0:1977c2310ef7 1258 case 31 ://sw32 CH選択
Kujira 0:1977c2310ef7 1259
Kujira 0:1977c2310ef7 1260 //gu_reverse(0x01);//gu_リバース指定
Kujira 0:1977c2310ef7 1261 //gu_button_up(32);
Kujira 0:1977c2310ef7 1262 //gu_reverse(0x00);//gu_リバース解除
Kujira 0:1977c2310ef7 1263
Kujira 0:1977c2310ef7 1264 if ( ch_num < ( number_of_channels - 1 )) {
Kujira 0:1977c2310ef7 1265 ch_num = ch_num + 1;
Kujira 0:1977c2310ef7 1266 } else {
Kujira 0:1977c2310ef7 1267 ch_num = 0;
Kujira 0:1977c2310ef7 1268 } //ver1.1.0
Kujira 0:1977c2310ef7 1269
Kujira 0:1977c2310ef7 1270 select_ich(ch_num);//ADC測定CHの変更
Kujira 0:1977c2310ef7 1271
Kujira 0:1977c2310ef7 1272 //set measuring range
Kujira 0:1977c2310ef7 1273 for( i = 0; i <= 3; i++)
Kujira 0:1977c2310ef7 1274 range[i] = 0; //range 1mA
Kujira 0:1977c2310ef7 1275
Kujira 0:1977c2310ef7 1276 range[ch_num] = 1; //range 10uA
Kujira 0:1977c2310ef7 1277
Kujira 0:1977c2310ef7 1278 //選択測定チャンネルの表示
Kujira 0:1977c2310ef7 1279 gu_cursor(24, 2);
Kujira 0:1977c2310ef7 1280 wdata[0] = ( ch_num + 1 ) + 0x30;
Kujira 0:1977c2310ef7 1281 i2c.write( addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 1282
Kujira 0:1977c2310ef7 1283 //gu_button_up(32);
Kujira 0:1977c2310ef7 1284
Kujira 0:1977c2310ef7 1285 wait(0.1);
Kujira 0:1977c2310ef7 1286
Kujira 0:1977c2310ef7 1287 break;
Kujira 0:1977c2310ef7 1288
Kujira 0:1977c2310ef7 1289 /*
Kujira 0:1977c2310ef7 1290 case 0x1F ://sw32 CH選択
Kujira 0:1977c2310ef7 1291
Kujira 0:1977c2310ef7 1292 //gu_reverse(0x01);//gu_リバース指定
Kujira 0:1977c2310ef7 1293 //gu_button_down(32);
Kujira 0:1977c2310ef7 1294 //gu_reverse(0x00);//gu_リバース解除
Kujira 0:1977c2310ef7 1295
Kujira 0:1977c2310ef7 1296 if ( ch_num >= 1 )
Kujira 0:1977c2310ef7 1297 ch_num = ch_num - 1;
Kujira 0:1977c2310ef7 1298
Kujira 0:1977c2310ef7 1299 select_ich(ch_num);//ADC測定CHの変更
Kujira 0:1977c2310ef7 1300
Kujira 0:1977c2310ef7 1301 //set measuring range
Kujira 0:1977c2310ef7 1302 for( i = 0; i <= 3; i++)
Kujira 0:1977c2310ef7 1303 range[i] = 0;
Kujira 0:1977c2310ef7 1304
Kujira 0:1977c2310ef7 1305 range[ ch_num ] = 1; //range 10uA
Kujira 0:1977c2310ef7 1306
Kujira 0:1977c2310ef7 1307 //選択測定チャンネルの表示
Kujira 0:1977c2310ef7 1308 gu_cursor(24, 2);
Kujira 0:1977c2310ef7 1309 wdata[0] =( ch_num + 1 ) + 0x30;
Kujira 0:1977c2310ef7 1310 i2c.write( addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 1311
Kujira 0:1977c2310ef7 1312 //gu_button_down(32);
Kujira 0:1977c2310ef7 1313
Kujira 0:1977c2310ef7 1314 wait(0.1);
Kujira 0:1977c2310ef7 1315
Kujira 0:1977c2310ef7 1316 break;
Kujira 0:1977c2310ef7 1317 */
Kujira 0:1977c2310ef7 1318
Kujira 0:1977c2310ef7 1319 } //switch
Kujira 0:1977c2310ef7 1320 Jyushin = i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 1321
Kujira 0:1977c2310ef7 1322 }//if
Kujira 0:1977c2310ef7 1323 }//if
Kujira 0:1977c2310ef7 1324
Kujira 1:f6a9410c46d2 1325 //ver1.1.0 0.1s*5(jの値)=0.5s待機後(プラスリレー制御時間)に電流測定用タイマー始動
Kujira 0:1977c2310ef7 1326 if ( j >= 5 ) {
Kujira 0:1977c2310ef7 1327 io[ch_num] = 0;
Kujira 0:1977c2310ef7 1328 range[ ch_num ] = 1; //range 10uA
Kujira 0:1977c2310ef7 1329 r_flag = 0;
Kujira 0:1977c2310ef7 1330 j = 0;
Kujira 0:1977c2310ef7 1331 flipper.attach(&flip, interval);//割込み開始
Kujira 0:1977c2310ef7 1332 }
Kujira 0:1977c2310ef7 1333
Kujira 0:1977c2310ef7 1334 if ( r_flag == 1 ) {
Kujira 0:1977c2310ef7 1335 j = j + 1;
Kujira 0:1977c2310ef7 1336
Kujira 0:1977c2310ef7 1337 //R=Hの時の電流測定(1ma renge)
Kujira 0:1977c2310ef7 1338 select_ich( ch_num );
Kujira 0:1977c2310ef7 1339 ssdata = read_adc( addr_ADC3 );
Kujira 0:1977c2310ef7 1340 ima = ssdata * 5 * 0.25;
Kujira 0:1977c2310ef7 1341
Kujira 0:1977c2310ef7 1342 gu_cursor(0,4);
Kujira 0:1977c2310ef7 1343 gu_fontsize(2);
Kujira 0:1977c2310ef7 1344 gu_print1(" ");
Kujira 0:1977c2310ef7 1345 gu_putdeci_mA(&ima);
Kujira 0:1977c2310ef7 1346 }
Kujira 0:1977c2310ef7 1347
Kujira 0:1977c2310ef7 1348 //電圧測定
Kujira 0:1977c2310ef7 1349 //ver1.2.0
Kujira 4:24481ebef1c4 1350 /*** ver3.0.0 ***
Kujira 0:1977c2310ef7 1351 if (RL_EN == 1) {
Kujira 0:1977c2310ef7 1352 switch (ch_num) {
Kujira 0:1977c2310ef7 1353 case 0:
Kujira 0:1977c2310ef7 1354 io[4] = 1; //外付けリレーON
Kujira 0:1977c2310ef7 1355 wait(TIME_RELAY_ON);
Kujira 0:1977c2310ef7 1356 break;
Kujira 0:1977c2310ef7 1357 case 1:
Kujira 0:1977c2310ef7 1358 io[5] = 1; //外付けリレーON
Kujira 0:1977c2310ef7 1359 wait(TIME_RELAY_ON);
Kujira 0:1977c2310ef7 1360 break;
Kujira 0:1977c2310ef7 1361 }
Kujira 0:1977c2310ef7 1362 }
Kujira 0:1977c2310ef7 1363 //up to here
Kujira 4:24481ebef1c4 1364 */
Kujira 0:1977c2310ef7 1365
Kujira 0:1977c2310ef7 1366 sdata = meas_voltage( ch_num ) * -1 ;
Kujira 0:1977c2310ef7 1367
Kujira 4:24481ebef1c4 1368 /*** ver3.0.0 ***
Kujira 0:1977c2310ef7 1369 //ver1.2.0
Kujira 0:1977c2310ef7 1370 if (RL_EN == 1) {
Kujira 0:1977c2310ef7 1371 io[4] = 0; //外付けリレーOFF
Kujira 0:1977c2310ef7 1372 io[5] = 0; //外付けリレーOFF
Kujira 0:1977c2310ef7 1373 }
Kujira 0:1977c2310ef7 1374 //up to here
Kujira 4:24481ebef1c4 1375 */
Kujira 0:1977c2310ef7 1376
Kujira 0:1977c2310ef7 1377 gu_fontsize(2);
Kujira 0:1977c2310ef7 1378 gu_cursor(108,4);
Kujira 0:1977c2310ef7 1379 gu_putdeck(&sdata);
Kujira 0:1977c2310ef7 1380 gu_print1("V");
Kujira 0:1977c2310ef7 1381
Kujira 0:1977c2310ef7 1382 //抵抗測定
Kujira 0:1977c2310ef7 1383 sdata = meas_resistor( ch_num );
Kujira 0:1977c2310ef7 1384
Kujira 0:1977c2310ef7 1385 gu_fontsize(2);
Kujira 0:1977c2310ef7 1386 gu_cursor(192,4);
Kujira 0:1977c2310ef7 1387
Kujira 0:1977c2310ef7 1388 display_resistor( sdata ); //抵抗値表示サブ
Kujira 0:1977c2310ef7 1389
Kujira 0:1977c2310ef7 1390 wait( 0.1 );
Kujira 0:1977c2310ef7 1391
Kujira 0:1977c2310ef7 1392 }//While
Kujira 0:1977c2310ef7 1393 }
Kujira 0:1977c2310ef7 1394
Kujira 0:1977c2310ef7 1395 /*****************************
Kujira 0:1977c2310ef7 1396
Kujira 0:1977c2310ef7 1397 I2C General Call
Kujira 0:1977c2310ef7 1398
Kujira 0:1977c2310ef7 1399 *****************************/
Kujira 0:1977c2310ef7 1400 void general_call(char com)
Kujira 0:1977c2310ef7 1401 {
Kujira 0:1977c2310ef7 1402 char cmd[1];
Kujira 0:1977c2310ef7 1403
Kujira 0:1977c2310ef7 1404 cmd[0]= com;
Kujira 0:1977c2310ef7 1405 i2c.write(0x00, cmd, 1); //General Call
Kujira 0:1977c2310ef7 1406 }
Kujira 0:1977c2310ef7 1407 /*******************************************************************************
Kujira 0:1977c2310ef7 1408
Kujira 0:1977c2310ef7 1409 MAIN
Kujira 0:1977c2310ef7 1410
Kujira 0:1977c2310ef7 1411 *******************************************************************************/
Kujira 0:1977c2310ef7 1412 int main(void)
Kujira 0:1977c2310ef7 1413 {
Kujira 0:1977c2310ef7 1414 while(1) {
Kujira 0:1977c2310ef7 1415
Kujira 0:1977c2310ef7 1416 wait(0.2);
Kujira 0:1977c2310ef7 1417
Kujira 4:24481ebef1c4 1418 //ver3.0.0
Kujira 4:24481ebef1c4 1419 uart.format(7, Serial::Even, 1);
Kujira 4:24481ebef1c4 1420
Kujira 0:1977c2310ef7 1421 set_pullup();
Kujira 0:1977c2310ef7 1422
Kujira 0:1977c2310ef7 1423 general_call(0x06); //ADC power on reset
Kujira 0:1977c2310ef7 1424
Kujira 0:1977c2310ef7 1425 dac_init(); //DAC 初期化
Kujira 0:1977c2310ef7 1426
Kujira 0:1977c2310ef7 1427 gu_initial();//初期画面へ
Kujira 0:1977c2310ef7 1428 //utility();
Kujira 0:1977c2310ef7 1429 }
Kujira 4:24481ebef1c4 1430 } //main end
Kujira 0:1977c2310ef7 1431
Kujira 0:1977c2310ef7 1432 void gu_initial()
Kujira 0:1977c2310ef7 1433 {
Kujira 0:1977c2310ef7 1434 char cmd_gu[32] ; //gu-DへのI2Cコマンド用配列 1byte0
Kujira 0:1977c2310ef7 1435 //char *pcmd = cmd_gu;
Kujira 0:1977c2310ef7 1436 char clumi; //輝度設定用変数 01h<=n<=08h
Kujira 0:1977c2310ef7 1437 char* pclumi = &clumi; //ポインタの定義
Kujira 0:1977c2310ef7 1438 char crdata[3];
Kujira 0:1977c2310ef7 1439 char cswnum; //SW_No. sw1->0x00 ~~ sw32->0x1F
Kujira 0:1977c2310ef7 1440 char cswdata; // 0x00 or 0x01
Kujira 0:1977c2310ef7 1441 char *pcswnum = &cswnum;
Kujira 0:1977c2310ef7 1442 char *pcswdata = &cswdata;
Kujira 0:1977c2310ef7 1443 char csyoudo[4];
Kujira 0:1977c2310ef7 1444 int i;
Kujira 0:1977c2310ef7 1445 float duty_pwm;
Kujira 0:1977c2310ef7 1446
Kujira 0:1977c2310ef7 1447 for ( i = 0; i <= ( number_of_channels - 1 ); i++) {
Kujira 0:1977c2310ef7 1448 leds[i].period_us(period_pwm); //Set tha PWM period(us)
Kujira 0:1977c2310ef7 1449 }
Kujira 0:1977c2310ef7 1450
Kujira 0:1977c2310ef7 1451 duty_pwm = 0; //表示器立ち上がるまでLEDOFF
Kujira 0:1977c2310ef7 1452
Kujira 0:1977c2310ef7 1453 for( i = 0; i <= 3; i++) {
Kujira 0:1977c2310ef7 1454 leds[i].write(duty_pwm);//Set Duty
Kujira 0:1977c2310ef7 1455 }
Kujira 0:1977c2310ef7 1456
Kujira 0:1977c2310ef7 1457 i2c.frequency(100000); //gu_D I2Cクロックレート(HZ) 400khz以下
Kujira 0:1977c2310ef7 1458
Kujira 0:1977c2310ef7 1459 cmd_gu[0]= 0x1B;
Kujira 0:1977c2310ef7 1460 cmd_gu[1]= 0x40;
Kujira 0:1977c2310ef7 1461 i2c.write(addr_gu, cmd_gu, 2); //gu-D ESC 初期化
Kujira 0:1977c2310ef7 1462 wait(0.2);
Kujira 0:1977c2310ef7 1463
Kujira 0:1977c2310ef7 1464 //メモリ00h番地(GU_D輝度設定データ)読み出し
Kujira 4:24481ebef1c4 1465 //wdata[0] = 0x00;
Kujira 4:24481ebef1c4 1466 wdata[0] = adrs_kido[0];
Kujira 4:24481ebef1c4 1467 wdata[1] = adrs_kido[1];
Kujira 4:24481ebef1c4 1468 Soushin = i2c.write (eeprom_adrs, wdata, 2,true); //読込先頭アドレス指定 ReStart
Kujira 4:24481ebef1c4 1469 Jyushin = i2c.read ((eeprom_adrs + 0x01), rdata, 1);//read 1byte
Kujira 0:1977c2310ef7 1470 *pclumi = rdata[0];
Kujira 0:1977c2310ef7 1471 //輝度設定更新
Kujira 0:1977c2310ef7 1472 if(*pclumi==0x00 || *pclumi > 0x08) *pclumi=0x05;
Kujira 0:1977c2310ef7 1473 gu_luminance(pclumi);
Kujira 0:1977c2310ef7 1474
Kujira 0:1977c2310ef7 1475 gu_fontsize(2); //change fontsize
Kujira 0:1977c2310ef7 1476 //ver1.2.3
Kujira 0:1977c2310ef7 1477 //gu_print1("ILF Iop/Voc/O.C.P/R");
Kujira 0:1977c2310ef7 1478 gu_print1("ILF mode selectiion");
Kujira 0:1977c2310ef7 1479 //upto
Kujira 0:1977c2310ef7 1480 //gu_CRLF();//CR+LF
Kujira 0:1977c2310ef7 1481 //gu_print1("Settings");
Kujira 0:1977c2310ef7 1482 gu_fontsize(1);
Kujira 0:1977c2310ef7 1483 gu_cursor(192,1);
Kujira 0:1977c2310ef7 1484 gu_print1("ver");
Kujira 0:1977c2310ef7 1485 gu_onebyte( version_major + 0x30 );
Kujira 0:1977c2310ef7 1486 gu_print1(".");
Kujira 0:1977c2310ef7 1487 gu_onebyte( version_minor + 0x30 );
Kujira 0:1977c2310ef7 1488 gu_print1(".");
Kujira 0:1977c2310ef7 1489 gu_onebyte( version_build + 0x30 );
Kujira 0:1977c2310ef7 1490
Kujira 0:1977c2310ef7 1491 gu_touchPara(0,touch);//タッチ感度 00h~07h
Kujira 0:1977c2310ef7 1492
Kujira 0:1977c2310ef7 1493 //MODE選択用ボタンの表示
Kujira 0:1977c2310ef7 1494 gu_set_button(9,"");
Kujira 0:1977c2310ef7 1495 gu_set_button(17,"");
Kujira 0:1977c2310ef7 1496 gu_set_button(25,"");
Kujira 0:1977c2310ef7 1497 gu_set_button(13,"");
Kujira 0:1977c2310ef7 1498 gu_set_button(21,"");
Kujira 0:1977c2310ef7 1499 gu_set_button(29,"");
Kujira 0:1977c2310ef7 1500 //LED Brighness
Kujira 0:1977c2310ef7 1501 gu_fontsize(2);
Kujira 0:1977c2310ef7 1502 gu_cursor(36,32/8);
Kujira 0:1977c2310ef7 1503 gu_print1("CAL");
Kujira 0:1977c2310ef7 1504 gu_cursor(36,64/8);
Kujira 0:1977c2310ef7 1505 gu_print1("LUX");
Kujira 0:1977c2310ef7 1506 //gu_cursor(36,80/8);
Kujira 0:1977c2310ef7 1507 //gu_print1("illumi");
Kujira 0:1977c2310ef7 1508 //Display Brightness
Kujira 0:1977c2310ef7 1509 gu_cursor(36,96/8);
Kujira 0:1977c2310ef7 1510 gu_print1("Utility");
Kujira 0:1977c2310ef7 1511 //Auto MODE
Kujira 0:1977c2310ef7 1512 gu_cursor(164,32/8);
Kujira 0:1977c2310ef7 1513 gu_print1("Auto");
Kujira 0:1977c2310ef7 1514 //Manual Mode
Kujira 0:1977c2310ef7 1515 gu_cursor(164,64/8);
Kujira 0:1977c2310ef7 1516 gu_print1("Manual");
Kujira 0:1977c2310ef7 1517 //Sequenser Mode
Kujira 0:1977c2310ef7 1518 gu_cursor(164,96/8);
Kujira 0:1977c2310ef7 1519 gu_print1("SEQ");
Kujira 0:1977c2310ef7 1520
Kujira 0:1977c2310ef7 1521 /**********************
Kujira 0:1977c2310ef7 1522 SDカードファイルオープン
Kujira 0:1977c2310ef7 1523 **********************/
Kujira 0:1977c2310ef7 1524
Kujira 0:1977c2310ef7 1525 mkdir("/sd/mydir", 0777);
Kujira 0:1977c2310ef7 1526
Kujira 0:1977c2310ef7 1527 FILE *fp = fopen("/sd/mydir/iop.csv", "ab+");//ディレクトリとファイル名の指定
Kujira 0:1977c2310ef7 1528
Kujira 0:1977c2310ef7 1529 if(fp == NULL) {
Kujira 0:1977c2310ef7 1530 /*ver1.1.3
Kujira 0:1977c2310ef7 1531 gu_fontsize(1);
Kujira 0:1977c2310ef7 1532 gu_cursor(0,2);
Kujira 0:1977c2310ef7 1533 gu_print1("Could not open file for SD card");
Kujira 0:1977c2310ef7 1534 */
Kujira 0:1977c2310ef7 1535 } else {
Kujira 0:1977c2310ef7 1536 fprintf(fp, "NewData R IOP OCP VOC");
Kujira 0:1977c2310ef7 1537 fprintf(fp, "\n");
Kujira 0:1977c2310ef7 1538 fclose(fp);
Kujira 0:1977c2310ef7 1539 }
Kujira 0:1977c2310ef7 1540 /**********************
Kujira 0:1977c2310ef7 1541 LED照度初期設定
Kujira 0:1977c2310ef7 1542 **********************/
Kujira 0:1977c2310ef7 1543 read_syoudo( csyoudo );
Kujira 0:1977c2310ef7 1544
Kujira 0:1977c2310ef7 1545 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 1546 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 1547 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 1548 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 1549 cmd_gu[3]= 0x02;//SW状態変化時自動送信モード2
Kujira 0:1977c2310ef7 1550 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 1551
Kujira 0:1977c2310ef7 1552 while(1) {
Kujira 0:1977c2310ef7 1553 //タッチスイッチ読み出し
Kujira 0:1977c2310ef7 1554 i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 1555
Kujira 0:1977c2310ef7 1556 if (crdata[0] == 0x11 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。
Kujira 0:1977c2310ef7 1557 *pcswnum = crdata[1]; //スイッチ番号
Kujira 0:1977c2310ef7 1558 *pcswdata = crdata[2];//ON/OFF情報
Kujira 0:1977c2310ef7 1559
Kujira 0:1977c2310ef7 1560 if (cswdata == 0x01) { //タッチしたならば
Kujira 0:1977c2310ef7 1561 switch( cswnum ) { //SWの番号(位置)
Kujira 0:1977c2310ef7 1562
Kujira 0:1977c2310ef7 1563 case 0x08 ://SW9 CAL登録画面
Kujira 0:1977c2310ef7 1564 //gu_リバース指定
Kujira 0:1977c2310ef7 1565 gu_reverse(0x01);
Kujira 0:1977c2310ef7 1566 //Show Button
Kujira 0:1977c2310ef7 1567 gu_set_button(9,"");
Kujira 0:1977c2310ef7 1568 wait(0.1);
Kujira 0:1977c2310ef7 1569 //gu_リバース解除
Kujira 0:1977c2310ef7 1570 gu_reverse(0x00);
Kujira 0:1977c2310ef7 1571
Kujira 0:1977c2310ef7 1572 select_cal();//CAL選択画面へ移動
Kujira 0:1977c2310ef7 1573
Kujira 0:1977c2310ef7 1574 return;
Kujira 0:1977c2310ef7 1575
Kujira 0:1977c2310ef7 1576 case 0x10 ://SW17
Kujira 0:1977c2310ef7 1577 //gu_リバース指定
Kujira 0:1977c2310ef7 1578 gu_reverse(0x01);
Kujira 0:1977c2310ef7 1579 //Show Button
Kujira 0:1977c2310ef7 1580 gu_set_button(17,"");
Kujira 0:1977c2310ef7 1581 wait(0.1);
Kujira 0:1977c2310ef7 1582 //gu_リバース解除
Kujira 0:1977c2310ef7 1583 gu_reverse(0x00);
Kujira 0:1977c2310ef7 1584
Kujira 0:1977c2310ef7 1585 adjust_illumination();//LED照度調整へ移動
Kujira 0:1977c2310ef7 1586
Kujira 0:1977c2310ef7 1587 return;
Kujira 0:1977c2310ef7 1588
Kujira 0:1977c2310ef7 1589 case 0x18 ://SW25
Kujira 0:1977c2310ef7 1590 //gu_リバース指定
Kujira 0:1977c2310ef7 1591 gu_reverse(0x01);
Kujira 0:1977c2310ef7 1592 //Show Button
Kujira 0:1977c2310ef7 1593 gu_set_button(25,"");
Kujira 0:1977c2310ef7 1594 wait(0.1);
Kujira 0:1977c2310ef7 1595 //gu_リバース解除
Kujira 0:1977c2310ef7 1596 gu_reverse(0x00);
Kujira 0:1977c2310ef7 1597
Kujira 0:1977c2310ef7 1598 utility();//画面輝度調整へ移動
Kujira 0:1977c2310ef7 1599
Kujira 0:1977c2310ef7 1600 return;
Kujira 0:1977c2310ef7 1601
Kujira 0:1977c2310ef7 1602 case 0x0C ://SW13 自動測定モード
Kujira 0:1977c2310ef7 1603 //gu_リバース指定
Kujira 0:1977c2310ef7 1604 gu_reverse(0x01);
Kujira 0:1977c2310ef7 1605 //Show Button
Kujira 0:1977c2310ef7 1606 gu_set_button(13,"");
Kujira 0:1977c2310ef7 1607 wait(0.1);
Kujira 0:1977c2310ef7 1608 //gu_リバース解除
Kujira 0:1977c2310ef7 1609 gu_reverse(0x00);
Kujira 0:1977c2310ef7 1610
Kujira 0:1977c2310ef7 1611 auto_run();
Kujira 0:1977c2310ef7 1612
Kujira 0:1977c2310ef7 1613 return;
Kujira 0:1977c2310ef7 1614
Kujira 0:1977c2310ef7 1615 case 0x14 ://SW21 手動測定モード
Kujira 0:1977c2310ef7 1616 //gu_リバース指定
Kujira 0:1977c2310ef7 1617 gu_reverse(0x01);
Kujira 0:1977c2310ef7 1618 //Show Button
Kujira 0:1977c2310ef7 1619 gu_set_button(21,"");
Kujira 0:1977c2310ef7 1620 wait(0.1);
Kujira 0:1977c2310ef7 1621 //gu_リバース解除
Kujira 0:1977c2310ef7 1622 gu_reverse(0x00);
Kujira 0:1977c2310ef7 1623
Kujira 0:1977c2310ef7 1624 manual();
Kujira 0:1977c2310ef7 1625
Kujira 0:1977c2310ef7 1626 return;
Kujira 0:1977c2310ef7 1627
Kujira 0:1977c2310ef7 1628 case 0x1C ://SW29 シーケンサ制御モード
Kujira 0:1977c2310ef7 1629 //gu_リバース指定
Kujira 0:1977c2310ef7 1630 gu_reverse(0x01);
Kujira 0:1977c2310ef7 1631 //Show Button
Kujira 0:1977c2310ef7 1632 gu_set_button(29,"");
Kujira 0:1977c2310ef7 1633 wait(0.1);
Kujira 0:1977c2310ef7 1634 //gu_リバース解除
Kujira 0:1977c2310ef7 1635 gu_reverse(0x00);
Kujira 0:1977c2310ef7 1636
Kujira 0:1977c2310ef7 1637 seq();
Kujira 0:1977c2310ef7 1638
Kujira 0:1977c2310ef7 1639 return;
Kujira 0:1977c2310ef7 1640
Kujira 0:1977c2310ef7 1641 } //switch
Kujira 0:1977c2310ef7 1642
Kujira 0:1977c2310ef7 1643 }//if(cswdata == 0x01) {
Kujira 0:1977c2310ef7 1644 } //if(crdata[0] == 0x11 ) {
Kujira 0:1977c2310ef7 1645
Kujira 0:1977c2310ef7 1646 wait(0.1);//タッチスイッチ入力読み出し間隔
Kujira 0:1977c2310ef7 1647
Kujira 0:1977c2310ef7 1648 } //while(1) {
Kujira 0:1977c2310ef7 1649
Kujira 0:1977c2310ef7 1650 }
Kujira 0:1977c2310ef7 1651
Kujira 4:24481ebef1c4 1652 /*******************************************************************************
Kujira 0:1977c2310ef7 1653
Kujira 0:1977c2310ef7 1654 CAL選択画面 sub
Kujira 4:24481ebef1c4 1655
Kujira 4:24481ebef1c4 1656 ver3.0.0 CAL名を追加
Kujira 4:24481ebef1c4 1657
Kujira 4:24481ebef1c4 1658 *******************************************************************************/
Kujira 0:1977c2310ef7 1659 void show_info(int n)
Kujira 0:1977c2310ef7 1660 {
Kujira 0:1977c2310ef7 1661 short sdata[6];
Kujira 4:24481ebef1c4 1662 char cl[2];
Kujira 0:1977c2310ef7 1663
Kujira 0:1977c2310ef7 1664 read_caliber(&calinfo,n);
Kujira 0:1977c2310ef7 1665
Kujira 0:1977c2310ef7 1666 //読出したCAL情報の表示
Kujira 0:1977c2310ef7 1667 gu_fontsize(1);
Kujira 0:1977c2310ef7 1668 gu_cursor(0,2);
Kujira 4:24481ebef1c4 1669 gu_print1(" ");
Kujira 4:24481ebef1c4 1670 gu_fontsize(1);
Kujira 4:24481ebef1c4 1671 gu_cursor(0,2);
Kujira 0:1977c2310ef7 1672 gu_print1("No.");
Kujira 4:24481ebef1c4 1673
Kujira 4:24481ebef1c4 1674 cl[1] = calinfo.number % 10 + '0';
Kujira 4:24481ebef1c4 1675 cl[0] = calinfo.number /10 + '0';
Kujira 4:24481ebef1c4 1676
Kujira 4:24481ebef1c4 1677 gu_print(cl);
Kujira 4:24481ebef1c4 1678 //gu_putdec(&calinfo.number);
Kujira 4:24481ebef1c4 1679
Kujira 4:24481ebef1c4 1680 gu_print1(" CAL.");
Kujira 4:24481ebef1c4 1681 //gu_print1(calinfo.name);
Kujira 4:24481ebef1c4 1682 i2c.write(addr_gu, calinfo.name, 3); //3byte ascii code
Kujira 4:24481ebef1c4 1683
Kujira 0:1977c2310ef7 1684 gu_cursor(0,3);
Kujira 0:1977c2310ef7 1685 gu_print1("Vss(Iop) =");
Kujira 0:1977c2310ef7 1686 sdata[0] = -1 * calinfo.vss_iop;
Kujira 0:1977c2310ef7 1687 gu_putdeck(&sdata[0]);
Kujira 0:1977c2310ef7 1688 gu_print1("V ");
Kujira 0:1977c2310ef7 1689 gu_cursor(0,4);
Kujira 0:1977c2310ef7 1690 gu_print1("Vss(ocp) =");
Kujira 0:1977c2310ef7 1691 sdata[1] = -1 * calinfo.vss_ocp;
Kujira 0:1977c2310ef7 1692 gu_putdeck(&sdata[1]);
Kujira 0:1977c2310ef7 1693 gu_print1("V ");
Kujira 0:1977c2310ef7 1694 gu_cursor(0,5);
Kujira 0:1977c2310ef7 1695 gu_print1("Vss(Voc) =");
Kujira 0:1977c2310ef7 1696 sdata[2] = -1 * calinfo.vss_voc;
Kujira 0:1977c2310ef7 1697 gu_putdeck(&sdata[2]);
Kujira 0:1977c2310ef7 1698 gu_print1("V ");
Kujira 0:1977c2310ef7 1699 }
Kujira 4:24481ebef1c4 1700 /*******************************************************************************
Kujira 4:24481ebef1c4 1701
Kujira 4:24481ebef1c4 1702 GU-D CAL選択スイッチボタン再表示 サブ
Kujira 4:24481ebef1c4 1703
Kujira 4:24481ebef1c4 1704 画面上にあるスイッチの配置
Kujira 4:24481ebef1c4 1705
Kujira 4:24481ebef1c4 1706 01,02,03,04,05,06,07,08,
Kujira 4:24481ebef1c4 1707 09,10,11,12,13,14,15,16,
Kujira 4:24481ebef1c4 1708 17,18,19,20,21,22,23,24,
Kujira 4:24481ebef1c4 1709 25,26,27,28,29,30,31,32,
Kujira 4:24481ebef1c4 1710
Kujira 4:24481ebef1c4 1711 *******************************************************************************/
Kujira 4:24481ebef1c4 1712 void redraw_sw(int dig, char sw_num){
Kujira 4:24481ebef1c4 1713
Kujira 4:24481ebef1c4 1714 char str_num[3]; // ascii code
Kujira 4:24481ebef1c4 1715 char sw; // GU-D Swich Number
Kujira 4:24481ebef1c4 1716
Kujira 4:24481ebef1c4 1717 str_num[2] = 0; // null終端
Kujira 4:24481ebef1c4 1718
Kujira 4:24481ebef1c4 1719 if ( dig >= 1 ){
Kujira 4:24481ebef1c4 1720 str_num[0] = dig + 0x30; //convert ASCII 10の位
Kujira 4:24481ebef1c4 1721 } else {
Kujira 4:24481ebef1c4 1722 str_num[0] = 0x20; //space
Kujira 4:24481ebef1c4 1723 }
Kujira 4:24481ebef1c4 1724
Kujira 4:24481ebef1c4 1725 for ( sw = 17; sw <= 29; sw++ ){
Kujira 4:24481ebef1c4 1726
Kujira 4:24481ebef1c4 1727 if ( sw >= 22 && sw <= 24 ){
Kujira 4:24481ebef1c4 1728 continue;
Kujira 4:24481ebef1c4 1729 }
Kujira 4:24481ebef1c4 1730
Kujira 4:24481ebef1c4 1731 if ( sw <= 21 ){
Kujira 4:24481ebef1c4 1732 str_num[1] = ( sw - 16 ) + 0x30;
Kujira 4:24481ebef1c4 1733 } else if ( sw >= 24 && sw <= 28 ){
Kujira 4:24481ebef1c4 1734 str_num[1] = ( sw - 19 ) + 0x30;
Kujira 4:24481ebef1c4 1735 } else if ( sw == 29) {
Kujira 4:24481ebef1c4 1736 str_num[0] = ( dig + 1 )+ 0x30;
Kujira 4:24481ebef1c4 1737 str_num[1] = 0x30;
Kujira 4:24481ebef1c4 1738 }
Kujira 4:24481ebef1c4 1739
Kujira 4:24481ebef1c4 1740 if ( sw_num != sw ){
Kujira 4:24481ebef1c4 1741 gu_set_button(sw,str_num);
Kujira 4:24481ebef1c4 1742 } else {
Kujira 4:24481ebef1c4 1743 gu_reverse(0x01); //gu_リバース指定
Kujira 4:24481ebef1c4 1744 gu_set_button(sw,str_num);
Kujira 4:24481ebef1c4 1745 gu_reverse(0x00); //gu_リバース解除
Kujira 4:24481ebef1c4 1746 }
Kujira 4:24481ebef1c4 1747 }//for
Kujira 4:24481ebef1c4 1748 }
Kujira 4:24481ebef1c4 1749
Kujira 4:24481ebef1c4 1750 /*******************************************************************************
Kujira 0:1977c2310ef7 1751
Kujira 0:1977c2310ef7 1752 CAL選択画面 #CAL登録画面
Kujira 4:24481ebef1c4 1753
Kujira 4:24481ebef1c4 1754 画面上にあるスイッチの配置
Kujira 4:24481ebef1c4 1755
Kujira 4:24481ebef1c4 1756 01,02,03,04,05,06,07,08,
Kujira 4:24481ebef1c4 1757 09,10,11,12,13,14,15,16,
Kujira 4:24481ebef1c4 1758 17,18,19,20,21,22,23,24,
Kujira 4:24481ebef1c4 1759 25,26,27,28,29,30,31,32,
Kujira 4:24481ebef1c4 1760
Kujira 4:24481ebef1c4 1761 *******************************************************************************/
Kujira 0:1977c2310ef7 1762 void select_cal()
Kujira 0:1977c2310ef7 1763 {
Kujira 0:1977c2310ef7 1764 char crdata[3];
Kujira 0:1977c2310ef7 1765 char cswnum; //SW_No. sw1->0x00 ~~ sw32->0x1F
Kujira 0:1977c2310ef7 1766 char cswdata; // 0x00 or 0x01
Kujira 0:1977c2310ef7 1767 char *pcswnum = &cswnum;
Kujira 0:1977c2310ef7 1768 char *pcswdata = &cswdata;
Kujira 0:1977c2310ef7 1769 char calnum; //選択したCALナンバー
Kujira 4:24481ebef1c4 1770
Kujira 4:24481ebef1c4 1771 int digit = 0 ; //CAL番号 10の位の値 0~4
Kujira 4:24481ebef1c4 1772
Kujira 4:24481ebef1c4 1773 calnum = 0; //initial
Kujira 4:24481ebef1c4 1774
Kujira 4:24481ebef1c4 1775 gu_cls(); //GU-D 画面クリア
Kujira 0:1977c2310ef7 1776
Kujira 0:1977c2310ef7 1777 read_regnum();//EEPROMに保存した選択CAL_NO.の読み出し
Kujira 0:1977c2310ef7 1778
Kujira 0:1977c2310ef7 1779 show_info(reg_num);
Kujira 0:1977c2310ef7 1780
Kujira 0:1977c2310ef7 1781 gu_fontsize(2); //change fontsize
Kujira 0:1977c2310ef7 1782 gu_cursor(0,0);
Kujira 4:24481ebef1c4 1783 //ver3.0.0
Kujira 4:24481ebef1c4 1784 //gu_print1("Select CAL.");
Kujira 4:24481ebef1c4 1785 gu_print1("CONFIG");
Kujira 4:24481ebef1c4 1786
Kujira 4:24481ebef1c4 1787 //Set Button init ver3.0.0
Kujira 4:24481ebef1c4 1788 redraw_sw(calnum,0);
Kujira 4:24481ebef1c4 1789 /*
Kujira 0:1977c2310ef7 1790 gu_set_button(17,"1");
Kujira 4:24481ebef1c4 1791 gu_set_button(18,"2");
Kujira 4:24481ebef1c4 1792 gu_set_button(19,"3");
Kujira 4:24481ebef1c4 1793 gu_set_button(20,"4");
Kujira 4:24481ebef1c4 1794 gu_set_button(21,"5");
Kujira 4:24481ebef1c4 1795 gu_set_button(24,"6");
Kujira 4:24481ebef1c4 1796 gu_set_button(25,"7");
Kujira 4:24481ebef1c4 1797 gu_set_button(26,"8");
Kujira 4:24481ebef1c4 1798 gu_set_button(27,"9");
Kujira 4:24481ebef1c4 1799 gu_set_button(28,"10");
Kujira 4:24481ebef1c4 1800 */
Kujira 4:24481ebef1c4 1801
Kujira 0:1977c2310ef7 1802 gu_set_button_font1(7,"slct");
Kujira 4:24481ebef1c4 1803 gu_set_button_font1(8,"set");
Kujira 4:24481ebef1c4 1804
Kujira 4:24481ebef1c4 1805 gu_button_up(24);
Kujira 4:24481ebef1c4 1806 gu_button_down(32);
Kujira 0:1977c2310ef7 1807
Kujira 0:1977c2310ef7 1808 while(1) {
Kujira 0:1977c2310ef7 1809 //タッチスイッチ読み出し
Kujira 0:1977c2310ef7 1810 i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 1811
Kujira 0:1977c2310ef7 1812 if (crdata[0] == 0x11 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。
Kujira 0:1977c2310ef7 1813 *pcswnum = crdata[1]; //スイッチ番号
Kujira 0:1977c2310ef7 1814 *pcswdata = crdata[2];//ON/OFF情報
Kujira 0:1977c2310ef7 1815
Kujira 0:1977c2310ef7 1816 if (cswdata == 0x01) { //タッチしたならば
Kujira 0:1977c2310ef7 1817 switch( cswnum ) { //SWの番号(位置)
Kujira 4:24481ebef1c4 1818
Kujira 4:24481ebef1c4 1819 case 23: //SW24
Kujira 4:24481ebef1c4 1820
Kujira 4:24481ebef1c4 1821 if ( digit <= 3 ){
Kujira 4:24481ebef1c4 1822 digit += 1;
Kujira 4:24481ebef1c4 1823 } else if ( digit == 4 ){
Kujira 4:24481ebef1c4 1824 digit = 0;
Kujira 4:24481ebef1c4 1825 }
Kujira 4:24481ebef1c4 1826
Kujira 4:24481ebef1c4 1827 redraw_sw(digit,17);
Kujira 4:24481ebef1c4 1828
Kujira 4:24481ebef1c4 1829 calnum = digit * 10 + 1;
Kujira 0:1977c2310ef7 1830 show_info(calnum);
Kujira 4:24481ebef1c4 1831
Kujira 0:1977c2310ef7 1832 break;
Kujira 4:24481ebef1c4 1833
Kujira 4:24481ebef1c4 1834 case 31: //SW32
Kujira 4:24481ebef1c4 1835
Kujira 4:24481ebef1c4 1836 if ( digit >= 1 ){
Kujira 4:24481ebef1c4 1837 digit -= 1;
Kujira 4:24481ebef1c4 1838 } else if ( digit == 0 ) {
Kujira 4:24481ebef1c4 1839 digit = 4;
Kujira 4:24481ebef1c4 1840 }
Kujira 4:24481ebef1c4 1841
Kujira 4:24481ebef1c4 1842 redraw_sw(digit,17);
Kujira 4:24481ebef1c4 1843
Kujira 4:24481ebef1c4 1844 calnum = digit * 10 + 1;
Kujira 0:1977c2310ef7 1845 show_info(calnum);
Kujira 4:24481ebef1c4 1846
Kujira 0:1977c2310ef7 1847 break;
Kujira 0:1977c2310ef7 1848
Kujira 4:24481ebef1c4 1849 case 16: //SW17
Kujira 4:24481ebef1c4 1850 case 17: //SW18
Kujira 4:24481ebef1c4 1851 case 18: //SW19
Kujira 4:24481ebef1c4 1852 case 19: //SW20
Kujira 4:24481ebef1c4 1853 case 20: //SW21
Kujira 4:24481ebef1c4 1854
Kujira 4:24481ebef1c4 1855 calnum = cswnum - 15 + (digit*10);
Kujira 4:24481ebef1c4 1856
Kujira 4:24481ebef1c4 1857 redraw_sw(digit,cswnum + 1);
Kujira 0:1977c2310ef7 1858
Kujira 0:1977c2310ef7 1859 show_info(calnum);
Kujira 0:1977c2310ef7 1860
Kujira 0:1977c2310ef7 1861 break;
Kujira 0:1977c2310ef7 1862
Kujira 4:24481ebef1c4 1863 case 24: //SW25
Kujira 4:24481ebef1c4 1864 case 25: //SW26
Kujira 4:24481ebef1c4 1865 case 26:
Kujira 4:24481ebef1c4 1866 case 27:
Kujira 4:24481ebef1c4 1867
Kujira 4:24481ebef1c4 1868
Kujira 4:24481ebef1c4 1869 calnum = cswnum - 18 + (digit*10);
Kujira 4:24481ebef1c4 1870
Kujira 4:24481ebef1c4 1871 redraw_sw(digit,cswnum + 1);
Kujira 0:1977c2310ef7 1872
Kujira 0:1977c2310ef7 1873 show_info(calnum);
Kujira 0:1977c2310ef7 1874
Kujira 0:1977c2310ef7 1875 break;
Kujira 0:1977c2310ef7 1876
Kujira 4:24481ebef1c4 1877 case 28: //SW29
Kujira 4:24481ebef1c4 1878
Kujira 4:24481ebef1c4 1879 calnum = ((digit + 1 )*10);
Kujira 4:24481ebef1c4 1880
Kujira 4:24481ebef1c4 1881 redraw_sw(digit,cswnum + 1);
Kujira 0:1977c2310ef7 1882
Kujira 0:1977c2310ef7 1883 show_info(calnum);
Kujira 0:1977c2310ef7 1884
Kujira 0:1977c2310ef7 1885 break;
Kujira 0:1977c2310ef7 1886
Kujira 4:24481ebef1c4 1887 case 0x06: //SW7 ”slct"(CAL選択)ボタン
Kujira 0:1977c2310ef7 1888
Kujira 0:1977c2310ef7 1889 if ( calnum >= 1 && calnum <=6 ) {
Kujira 0:1977c2310ef7 1890 reg_num = calnum;
Kujira 0:1977c2310ef7 1891
Kujira 4:24481ebef1c4 1892 //ver3 EEPROM書込み Byte Write
Kujira 4:24481ebef1c4 1893 wdata[0] = adrs_calnum[0]; //byte address a15~8
Kujira 4:24481ebef1c4 1894 wdata[1] = adrs_calnum[1]; //byte address a7~a0
Kujira 4:24481ebef1c4 1895 wdata[2] = reg_num;
Kujira 4:24481ebef1c4 1896 Soushin = i2c.write (eeprom_adrs, wdata, 3); //send stop at end default value is false.
Kujira 4:24481ebef1c4 1897
Kujira 4:24481ebef1c4 1898 //GU-D
Kujira 0:1977c2310ef7 1899 gu_reverse(0x01); //gu_リバース指定
Kujira 0:1977c2310ef7 1900 gu_set_button_font1(7,"slct");
Kujira 0:1977c2310ef7 1901 wait(0.2);
Kujira 0:1977c2310ef7 1902 gu_reverse(0x00); //gu_リバース解除
Kujira 0:1977c2310ef7 1903
Kujira 0:1977c2310ef7 1904 read_caliber(&calinfo,reg_num);
Kujira 4:24481ebef1c4 1905
Kujira 0:1977c2310ef7 1906 return;
Kujira 0:1977c2310ef7 1907
Kujira 0:1977c2310ef7 1908 } else if( calnum == 0 ) {
Kujira 0:1977c2310ef7 1909 //CALNo.選択しなければ、何もしないでこのサブを抜ける
Kujira 0:1977c2310ef7 1910 gu_reverse(0x01); //gu_リバース指定
Kujira 0:1977c2310ef7 1911 gu_set_button_font1(7,"slct");
Kujira 0:1977c2310ef7 1912 wait(0.2);
Kujira 0:1977c2310ef7 1913 gu_reverse(0x00); //gu_リバース解除
Kujira 0:1977c2310ef7 1914 return;
Kujira 0:1977c2310ef7 1915 }
Kujira 0:1977c2310ef7 1916
Kujira 0:1977c2310ef7 1917 break;
Kujira 0:1977c2310ef7 1918
Kujira 4:24481ebef1c4 1919 case 0x07: //SW8 "set"ボタン
Kujira 4:24481ebef1c4 1920
Kujira 4:24481ebef1c4 1921 if ( calnum >= 1 && calnum <= 50 ) {
Kujira 0:1977c2310ef7 1922 gu_reverse(0x01); //gu_リバース指定
Kujira 4:24481ebef1c4 1923 gu_set_button_font1(8,"set");
Kujira 0:1977c2310ef7 1924 wait(0.2);
Kujira 0:1977c2310ef7 1925 gu_reverse(0x00); //gu_リバース解除
Kujira 0:1977c2310ef7 1926
Kujira 0:1977c2310ef7 1927 setup_cal_information(calnum);//CAL情報登録画面へ
Kujira 4:24481ebef1c4 1928
Kujira 4:24481ebef1c4 1929 //return; ver3.0.0 remove
Kujira 0:1977c2310ef7 1930 }
Kujira 0:1977c2310ef7 1931 break;
Kujira 0:1977c2310ef7 1932
Kujira 0:1977c2310ef7 1933 /*ver1.1.0
Kujira 0:1977c2310ef7 1934 case 0x1F: //SW32
Kujira 0:1977c2310ef7 1935
Kujira 0:1977c2310ef7 1936 gu_reverse(0x01); //gu_リバース指定
Kujira 0:1977c2310ef7 1937 gu_set_button_font1(32,"del");
Kujira 0:1977c2310ef7 1938 gu_reverse(0x00); //gu_リバース解除
Kujira 0:1977c2310ef7 1939
Kujira 0:1977c2310ef7 1940 erace_calinfo();
Kujira 0:1977c2310ef7 1941
Kujira 0:1977c2310ef7 1942 gu_set_button_font1(32,"del");
Kujira 0:1977c2310ef7 1943
Kujira 0:1977c2310ef7 1944 break;
Kujira 0:1977c2310ef7 1945 */
Kujira 0:1977c2310ef7 1946
Kujira 0:1977c2310ef7 1947 } //switch
Kujira 0:1977c2310ef7 1948
Kujira 0:1977c2310ef7 1949 }//if(cswdata == 0x01) {
Kujira 0:1977c2310ef7 1950 } //if(crdata[0] == 0x11 ) {
Kujira 0:1977c2310ef7 1951 wait(0.1);//タッチスイッチ入力読み出し間隔
Kujira 0:1977c2310ef7 1952 } //while(1)
Kujira 0:1977c2310ef7 1953 }
Kujira 0:1977c2310ef7 1954
Kujira 4:24481ebef1c4 1955 /*******************************************************************************
Kujira 0:1977c2310ef7 1956
Kujira 0:1977c2310ef7 1957 CAL情報登録画面 サブルーチン
Kujira 4:24481ebef1c4 1958 項目の表示
Kujira 4:24481ebef1c4 1959
Kujira 4:24481ebef1c4 1960 ver3.0.0 22.4.12
Kujira 4:24481ebef1c4 1961
Kujira 4:24481ebef1c4 1962 x=0 : vss_iop[V]
Kujira 4:24481ebef1c4 1963 x=1 : vss_ocp[V]
Kujira 4:24481ebef1c4 1964 x=2 : vss_voc[V]
Kujira 4:24481ebef1c4 1965 x=3 : low_limit_voc[V]
Kujira 4:24481ebef1c4 1966 x=4 : low_limit_iop[uA]
Kujira 4:24481ebef1c4 1967 x=5 : low_limit_ocp[uA]
Kujira 4:24481ebef1c4 1968 x=6 : up_limit_ocp[uA]
Kujira 4:24481ebef1c4 1969 x=7 : low_limit_ocp_v[V]
Kujira 4:24481ebef1c4 1970 x=8 : up_limit_ocp_v[V]
Kujira 4:24481ebef1c4 1971 x=9 : wait_iop[s]
Kujira 4:24481ebef1c4 1972 x=10 : wait_ocp[s]
Kujira 4:24481ebef1c4 1973 x=11 : wait_voc[s]
Kujira 4:24481ebef1c4 1974 x=12 : low_limit_resistor[Ω]
Kujira 4:24481ebef1c4 1975 x=13 : up_limit_resistor[Ω]
Kujira 4:24481ebef1c4 1976 x=14 : cal_name(ASCII)
Kujira 4:24481ebef1c4 1977
Kujira 4:24481ebef1c4 1978 /1.2.1
Kujira 4:24481ebef1c4 1979 x=0 : vss_iop[V]
Kujira 4:24481ebef1c4 1980 x=1 : vss_ocp[V]
Kujira 4:24481ebef1c4 1981 x=2 : vss_voc[V]
Kujira 4:24481ebef1c4 1982 x=3 : low_limit_voc[V]
Kujira 4:24481ebef1c4 1983 x=4 : low_limit_iop[uA]
Kujira 4:24481ebef1c4 1984 x=5 : low_limit_ocp[uA]
Kujira 4:24481ebef1c4 1985 x=6 : up_limit_ocp[uA] ver1.2.2 追加
Kujira 4:24481ebef1c4 1986 x=7 : wait_iop[s]
Kujira 4:24481ebef1c4 1987 x=8 : wait_ocp[s]
Kujira 4:24481ebef1c4 1988 x=9 : low_limit_resistor[Ω]
Kujira 4:24481ebef1c4 1989 x=10 : up_limit_resistor[Ω]
Kujira 4:24481ebef1c4 1990 /
Kujira 4:24481ebef1c4 1991
Kujira 4:24481ebef1c4 1992 *******************************************************************************/
Kujira 0:1977c2310ef7 1993 void hyouji_cal_param(char x)
Kujira 0:1977c2310ef7 1994 {
Kujira 0:1977c2310ef7 1995 gu_fontsize(2);
Kujira 0:1977c2310ef7 1996 gu_cursor(0,4);
Kujira 0:1977c2310ef7 1997 gu_print1(" ");
Kujira 0:1977c2310ef7 1998
Kujira 0:1977c2310ef7 1999 switch ( x ) {
Kujira 0:1977c2310ef7 2000 case 0:
Kujira 0:1977c2310ef7 2001 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2002 gu_print1("Vss(Iop)");
Kujira 0:1977c2310ef7 2003 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2004 gu_print1("[V]");
Kujira 0:1977c2310ef7 2005 break;
Kujira 0:1977c2310ef7 2006 case 1:
Kujira 0:1977c2310ef7 2007 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2008 gu_print1("Vss(O.C.P)");
Kujira 0:1977c2310ef7 2009 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2010 gu_print1("[V]");
Kujira 0:1977c2310ef7 2011 break;
Kujira 0:1977c2310ef7 2012 case 2:
Kujira 0:1977c2310ef7 2013 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2014 gu_print1("Vss(Voc)");
Kujira 0:1977c2310ef7 2015 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2016 gu_print1("[V]");
Kujira 0:1977c2310ef7 2017 break;
Kujira 0:1977c2310ef7 2018 case 3:
Kujira 0:1977c2310ef7 2019 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2020 gu_print1("low limit(Voc)");
Kujira 0:1977c2310ef7 2021 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2022 gu_print1("[V]");
Kujira 0:1977c2310ef7 2023 break;
Kujira 0:1977c2310ef7 2024 case 4:
Kujira 0:1977c2310ef7 2025 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2026 gu_print1("low limit(Iop)");
Kujira 0:1977c2310ef7 2027 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2028 gu_print1("[uA]");
Kujira 0:1977c2310ef7 2029 break;
Kujira 0:1977c2310ef7 2030 case 5:
Kujira 0:1977c2310ef7 2031 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2032 gu_print1("low limit(O.C.P)");
Kujira 0:1977c2310ef7 2033 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2034 gu_print1("[uA]");
Kujira 0:1977c2310ef7 2035 break;
Kujira 0:1977c2310ef7 2036 case 6:
Kujira 0:1977c2310ef7 2037 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2038 gu_print1("up limit(O.C.P)");
Kujira 0:1977c2310ef7 2039 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2040 gu_print1("[uA]");
Kujira 0:1977c2310ef7 2041 break;
Kujira 0:1977c2310ef7 2042 case 7:
Kujira 0:1977c2310ef7 2043 gu_cursor(0,4);
Kujira 4:24481ebef1c4 2044 gu_print1("low limit(O.C.P)");
Kujira 4:24481ebef1c4 2045 gu_cursor(208,4);
Kujira 4:24481ebef1c4 2046 gu_print1("[V]");
Kujira 4:24481ebef1c4 2047 break;
Kujira 4:24481ebef1c4 2048 case 8:
Kujira 4:24481ebef1c4 2049 gu_cursor(0,4);
Kujira 4:24481ebef1c4 2050 gu_print1("up limit(O.C.P)");
Kujira 4:24481ebef1c4 2051 gu_cursor(208,4);
Kujira 4:24481ebef1c4 2052 gu_print1("[V]");
Kujira 4:24481ebef1c4 2053 break;
Kujira 4:24481ebef1c4 2054 case 9:
Kujira 4:24481ebef1c4 2055 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2056 gu_print1("Wait(Iop)");
Kujira 0:1977c2310ef7 2057 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2058 gu_print1("[s]");
Kujira 0:1977c2310ef7 2059 break;
Kujira 4:24481ebef1c4 2060 case 10:
Kujira 0:1977c2310ef7 2061 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2062 gu_print1("Wait(O.C.P)");
Kujira 0:1977c2310ef7 2063 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2064 gu_print1("[s]");
Kujira 0:1977c2310ef7 2065 break;
Kujira 4:24481ebef1c4 2066 case 11:
Kujira 4:24481ebef1c4 2067 gu_cursor(0,4);
Kujira 4:24481ebef1c4 2068 gu_print1("Wait(Voc)");
Kujira 4:24481ebef1c4 2069 gu_cursor(208,4);
Kujira 4:24481ebef1c4 2070 gu_print1("[s]");
Kujira 4:24481ebef1c4 2071 break;
Kujira 4:24481ebef1c4 2072 case 12:
Kujira 0:1977c2310ef7 2073 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2074 gu_print1("low limit(ohm)");
Kujira 0:1977c2310ef7 2075 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2076 wdata[0] = 0xEA; //Ω
Kujira 0:1977c2310ef7 2077 i2c.write( addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 2078 break;
Kujira 4:24481ebef1c4 2079 case 13:
Kujira 0:1977c2310ef7 2080 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2081 gu_print1("up limit(ohm)");
Kujira 0:1977c2310ef7 2082 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2083 wdata[0] = 0xEA; //Ω
Kujira 0:1977c2310ef7 2084 i2c.write( addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 2085 break;
Kujira 4:24481ebef1c4 2086 case 14:
Kujira 4:24481ebef1c4 2087 gu_cursor(0,4);
Kujira 4:24481ebef1c4 2088 gu_print1("CAL NAME");
Kujira 4:24481ebef1c4 2089 //gu_cursor(208,4);
Kujira 4:24481ebef1c4 2090 break;
Kujira 0:1977c2310ef7 2091 }
Kujira 0:1977c2310ef7 2092 }
Kujira 0:1977c2310ef7 2093
Kujira 4:24481ebef1c4 2094 /*******************************************************************************
Kujira 0:1977c2310ef7 2095
Kujira 0:1977c2310ef7 2096 CAL情報登録画面 sub
Kujira 4:24481ebef1c4 2097
Kujira 0:1977c2310ef7 2098 para kind of parameter
Kujira 0:1977c2310ef7 2099 idata data value
Kujira 0:1977c2310ef7 2100 inc add number ex)0x64 0x0A 0x01
Kujira 0:1977c2310ef7 2101
Kujira 4:24481ebef1c4 2102 *******************************************************************************/
Kujira 4:24481ebef1c4 2103 /*** 加算 ***/
Kujira 0:1977c2310ef7 2104 void increase_param(char para, signed short *sdata, short inc)
Kujira 0:1977c2310ef7 2105 {
Kujira 0:1977c2310ef7 2106 switch ( para ) { //パラメータの項目によって上限値異なる
Kujira 0:1977c2310ef7 2107 case 0://vss_iop
Kujira 0:1977c2310ef7 2108 case 1://vss_ocp
Kujira 0:1977c2310ef7 2109 case 2://vss_voc
Kujira 0:1977c2310ef7 2110 case 3://low_limit_voc
Kujira 4:24481ebef1c4 2111 case 7://low_limit_ocp_v
Kujira 4:24481ebef1c4 2112 case 8://up_limit_ocp_v
Kujira 0:1977c2310ef7 2113 if(*sdata <= ( 4999 - inc )) {
Kujira 0:1977c2310ef7 2114 *sdata = *sdata + inc ;
Kujira 0:1977c2310ef7 2115 }
Kujira 0:1977c2310ef7 2116 break;//switch ( param ){
Kujira 0:1977c2310ef7 2117
Kujira 4:24481ebef1c4 2118 case 4: //low_limit_iop
Kujira 4:24481ebef1c4 2119 case 5: //low_limit_o.c.p
Kujira 4:24481ebef1c4 2120 case 6: //up_limit_o.c.p
Kujira 0:1977c2310ef7 2121 if(*sdata <= ( 2500 - inc / 10 )) {
Kujira 0:1977c2310ef7 2122 *sdata = *sdata + inc /10 ;
Kujira 0:1977c2310ef7 2123 }
Kujira 0:1977c2310ef7 2124 break;//switch ( param )
Kujira 4:24481ebef1c4 2125 case 9: //wait_iop
Kujira 4:24481ebef1c4 2126 case 10: //wait_ocp
Kujira 4:24481ebef1c4 2127 case 11: //wait_voc
Kujira 0:1977c2310ef7 2128
Kujira 0:1977c2310ef7 2129 if(*sdata <= ( 2550 - inc / 10 )) {
Kujira 0:1977c2310ef7 2130 *sdata = *sdata + inc / 10 ;
Kujira 0:1977c2310ef7 2131 }
Kujira 0:1977c2310ef7 2132 break;//switch ( param )
Kujira 0:1977c2310ef7 2133
Kujira 4:24481ebef1c4 2134 case 12: //low_limit_resistor
Kujira 4:24481ebef1c4 2135 case 13: //up_limit_resistor
Kujira 0:1977c2310ef7 2136 if(*sdata <= ( 2550 - inc )) {
Kujira 0:1977c2310ef7 2137 *sdata = *sdata + inc;
Kujira 0:1977c2310ef7 2138 }
Kujira 0:1977c2310ef7 2139 break;
Kujira 4:24481ebef1c4 2140
Kujira 0:1977c2310ef7 2141 }//switch ( param ){
Kujira 0:1977c2310ef7 2142 }
Kujira 0:1977c2310ef7 2143
Kujira 4:24481ebef1c4 2144 /*** 減算 ***/
Kujira 0:1977c2310ef7 2145 void decrease_param(char para, signed short *sdata, short dec)
Kujira 0:1977c2310ef7 2146 {
Kujira 0:1977c2310ef7 2147 switch ( para ) { //パラメータの項目によって上限値異なる
Kujira 0:1977c2310ef7 2148 case 0://vss_iop
Kujira 0:1977c2310ef7 2149 case 1://vss_ocp
Kujira 0:1977c2310ef7 2150 case 2://vss_voc
Kujira 0:1977c2310ef7 2151 case 3://low_limit_voc
Kujira 4:24481ebef1c4 2152 case 7://low_limit_ocp_v
Kujira 4:24481ebef1c4 2153 case 8://up_limit_ocp_v
Kujira 0:1977c2310ef7 2154
Kujira 0:1977c2310ef7 2155 if(*sdata >= dec ) {
Kujira 0:1977c2310ef7 2156 *sdata = *sdata - dec;
Kujira 0:1977c2310ef7 2157 }
Kujira 0:1977c2310ef7 2158 break;
Kujira 0:1977c2310ef7 2159
Kujira 0:1977c2310ef7 2160 case 4://low_limit_iop
Kujira 0:1977c2310ef7 2161
Kujira 0:1977c2310ef7 2162 if(*sdata >= dec / 10 ) {
Kujira 0:1977c2310ef7 2163 *sdata = *sdata - dec / 10;
Kujira 0:1977c2310ef7 2164 }
Kujira 0:1977c2310ef7 2165 break;
Kujira 0:1977c2310ef7 2166
Kujira 0:1977c2310ef7 2167 case 5://low_limit_o.c.p
Kujira 4:24481ebef1c4 2168 case 6://up_limit_o.c.p
Kujira 0:1977c2310ef7 2169
Kujira 0:1977c2310ef7 2170 if(*sdata >= -2500 + dec / 10 ) {
Kujira 0:1977c2310ef7 2171 *sdata = *sdata - dec / 10;
Kujira 0:1977c2310ef7 2172 }
Kujira 0:1977c2310ef7 2173 break;
Kujira 0:1977c2310ef7 2174
Kujira 4:24481ebef1c4 2175 case 9: //wait_iop
Kujira 4:24481ebef1c4 2176 case 10: //wait_ocp
Kujira 4:24481ebef1c4 2177 case 11: //wait_voc
Kujira 0:1977c2310ef7 2178
Kujira 0:1977c2310ef7 2179 if(*sdata >= dec / 10 ) {
Kujira 0:1977c2310ef7 2180 *sdata = *sdata - dec / 10 ;
Kujira 0:1977c2310ef7 2181 }
Kujira 0:1977c2310ef7 2182 break;//switch ( param )
Kujira 0:1977c2310ef7 2183
Kujira 4:24481ebef1c4 2184 case 12: //low_limit_resistor
Kujira 4:24481ebef1c4 2185 case 13: //up_limit_resistor
Kujira 4:24481ebef1c4 2186
Kujira 0:1977c2310ef7 2187 if(*sdata >= dec ) {
Kujira 0:1977c2310ef7 2188 *sdata = *sdata - dec;
Kujira 0:1977c2310ef7 2189 }
Kujira 0:1977c2310ef7 2190 break;
Kujira 0:1977c2310ef7 2191
Kujira 0:1977c2310ef7 2192 }//switch ( param ){
Kujira 0:1977c2310ef7 2193 }
Kujira 4:24481ebef1c4 2194
Kujira 4:24481ebef1c4 2195 /*******************************************************************************
Kujira 4:24481ebef1c4 2196
Kujira 4:24481ebef1c4 2197 CAL NAME (ASCII)
Kujira 4:24481ebef1c4 2198 3文字で構成(ex.B61)。1文字づつ上下キーで変更する。
Kujira 4:24481ebef1c4 2199 範囲はASCII表において 0x30~0x5A
Kujira 4:24481ebef1c4 2200
Kujira 4:24481ebef1c4 2201 ver3.0.0 2022.4.13
Kujira 4:24481ebef1c4 2202
Kujira 4:24481ebef1c4 2203 *******************************************************************************/
Kujira 4:24481ebef1c4 2204 /*** UP ***/
Kujira 4:24481ebef1c4 2205 void up_ascii(char *c){
Kujira 4:24481ebef1c4 2206
Kujira 4:24481ebef1c4 2207 if (*c >= 0x5A ){
Kujira 4:24481ebef1c4 2208 *c = 0x30;
Kujira 4:24481ebef1c4 2209 } else if ( *c < 0x30 ){
Kujira 4:24481ebef1c4 2210 *c = 0x30;
Kujira 4:24481ebef1c4 2211 } else {
Kujira 4:24481ebef1c4 2212 *c = *c + 1;
Kujira 4:24481ebef1c4 2213 }
Kujira 4:24481ebef1c4 2214
Kujira 4:24481ebef1c4 2215 }
Kujira 4:24481ebef1c4 2216 /*** DOWN ***/
Kujira 4:24481ebef1c4 2217 void down_ascii(char *c){
Kujira 4:24481ebef1c4 2218
Kujira 4:24481ebef1c4 2219 if (*c > 0x5A ){
Kujira 4:24481ebef1c4 2220 *c = 0x5A;
Kujira 4:24481ebef1c4 2221 } else if ( *c <= 0x30 ){
Kujira 4:24481ebef1c4 2222 *c = 0x5A;
Kujira 4:24481ebef1c4 2223 } else {
Kujira 4:24481ebef1c4 2224 *c = *c - 1;
Kujira 4:24481ebef1c4 2225 }
Kujira 4:24481ebef1c4 2226
Kujira 4:24481ebef1c4 2227 }
Kujira 4:24481ebef1c4 2228
Kujira 4:24481ebef1c4 2229 /*******************************************************************************
Kujira 0:1977c2310ef7 2230
Kujira 0:1977c2310ef7 2231 CAL情報登録画面 MAIN
Kujira 0:1977c2310ef7 2232 別途システム設計図,EEPROMのシートを参照
Kujira 4:24481ebef1c4 2233
Kujira 4:24481ebef1c4 2234 ver3.0.0
Kujira 4:24481ebef1c4 2235
Kujira 0:1977c2310ef7 2236 param:
Kujira 0:1977c2310ef7 2237 0:vss_iop
Kujira 0:1977c2310ef7 2238 1:vss_ocp
Kujira 0:1977c2310ef7 2239 2:vss_voc
Kujira 0:1977c2310ef7 2240 3:low_limit_voc
Kujira 0:1977c2310ef7 2241 4:low_limit_iop
Kujira 0:1977c2310ef7 2242 5:low_limit_ocp
Kujira 4:24481ebef1c4 2243 6:up_limit_ocp
Kujira 4:24481ebef1c4 2244 7:low_limit_ocp_v
Kujira 4:24481ebef1c4 2245 8:up_limit_ocp_v
Kujira 4:24481ebef1c4 2246 9:wait_iop
Kujira 4:24481ebef1c4 2247 10:wait_ocp
Kujira 4:24481ebef1c4 2248 11:wait_voc
Kujira 4:24481ebef1c4 2249 12:LowLimitResistor
Kujira 4:24481ebef1c4 2250 13:UPLimitResistor
Kujira 4:24481ebef1c4 2251 14:CAL_name
Kujira 4:24481ebef1c4 2252
Kujira 4:24481ebef1c4 2253 *******************************************************************************/
Kujira 4:24481ebef1c4 2254 void setup_cal_information(char cal_num)
Kujira 0:1977c2310ef7 2255 {
Kujira 0:1977c2310ef7 2256 char param; //設定するパラメータの選択 0~9まで ver1.2.1 0~10まで
Kujira 0:1977c2310ef7 2257 char crdata[3];
Kujira 4:24481ebef1c4 2258 signed short sdata_cal[18]; //CAL設定条件
Kujira 0:1977c2310ef7 2259 signed short hyouji_data;
Kujira 4:24481ebef1c4 2260 int param_sum; //設定するパラメータの数 ver1.2.1
Kujira 4:24481ebef1c4 2261 char c_temp[3]; //CAL設定条件 calinfo.name
Kujira 0:1977c2310ef7 2262 //int i;
Kujira 0:1977c2310ef7 2263 //short sdata_byte[16]; //EEPROM BYTEごとのDATA 1byte
Kujira 0:1977c2310ef7 2264 //char cmd_gu[32]; //gu-DへのI2Cコマンド用配列 1byte0
Kujira 0:1977c2310ef7 2265 //char adrs_cal; //EEPROM CAL情報を保存しているアドレス 0x90~
Kujira 0:1977c2310ef7 2266
Kujira 4:24481ebef1c4 2267 param_sum = 14; //ver3.0.0 //11; //ver1.2.1
Kujira 0:1977c2310ef7 2268
Kujira 0:1977c2310ef7 2269 //画面表示
Kujira 4:24481ebef1c4 2270 gu_cls();//画面クリア
Kujira 0:1977c2310ef7 2271 gu_fontsize(2);
Kujira 0:1977c2310ef7 2272 gu_print1("Setup Cal No.");
Kujira 0:1977c2310ef7 2273 wdata[0] = ( cal_num % 10 ) + 0x30;//CALナンバーの表示
Kujira 0:1977c2310ef7 2274 i2c.write(addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 2275
Kujira 0:1977c2310ef7 2276 //CAL情報読込
Kujira 0:1977c2310ef7 2277 read_caliber(&calinfo,cal_num);
Kujira 0:1977c2310ef7 2278
Kujira 0:1977c2310ef7 2279 sdata_cal[0] = calinfo.vss_iop;
Kujira 0:1977c2310ef7 2280 sdata_cal[1] = calinfo.vss_ocp;
Kujira 0:1977c2310ef7 2281 sdata_cal[2] = calinfo.vss_voc;
Kujira 0:1977c2310ef7 2282 sdata_cal[3] = calinfo.low_limit_voc;
Kujira 0:1977c2310ef7 2283 sdata_cal[4] = calinfo.low_limit_iop;
Kujira 0:1977c2310ef7 2284 sdata_cal[5] = calinfo.low_limit_ocp;
Kujira 0:1977c2310ef7 2285 sdata_cal[6] = calinfo.up_limit_ocp;
Kujira 4:24481ebef1c4 2286 sdata_cal[7] = calinfo.low_limit_ocp_v;
Kujira 4:24481ebef1c4 2287 sdata_cal[8] = calinfo.up_limit_ocp_v;
Kujira 4:24481ebef1c4 2288 sdata_cal[9] = calinfo.wait_iop;
Kujira 4:24481ebef1c4 2289 sdata_cal[10] = calinfo.wait_ocp;
Kujira 4:24481ebef1c4 2290 sdata_cal[11] = calinfo.wait_voc;
Kujira 4:24481ebef1c4 2291 sdata_cal[12] = calinfo.low_limit_resistor;
Kujira 4:24481ebef1c4 2292 sdata_cal[13] = calinfo.up_limit_resistor;
Kujira 4:24481ebef1c4 2293
Kujira 4:24481ebef1c4 2294 c_temp[0] = calinfo.name[0];
Kujira 4:24481ebef1c4 2295 c_temp[1] = calinfo.name[1];
Kujira 4:24481ebef1c4 2296 c_temp[2] = calinfo.name[2];
Kujira 4:24481ebef1c4 2297
Kujira 0:1977c2310ef7 2298 //ボタンの配置
Kujira 4:24481ebef1c4 2299 gu_set_button_font1(7,"esc"); //ver3.0.0 add
Kujira 4:24481ebef1c4 2300 gu_set_button_font1(8,"save");
Kujira 0:1977c2310ef7 2301 gu_button_up(17);
Kujira 0:1977c2310ef7 2302 gu_button_down(25);
Kujira 0:1977c2310ef7 2303 gu_button_up(20);
Kujira 0:1977c2310ef7 2304 gu_button_up(22);
Kujira 0:1977c2310ef7 2305 gu_button_up(24);
Kujira 0:1977c2310ef7 2306 gu_button_down(28);
Kujira 0:1977c2310ef7 2307 gu_button_down(30);
Kujira 0:1977c2310ef7 2308 gu_button_down(32);
Kujira 0:1977c2310ef7 2309
Kujira 0:1977c2310ef7 2310 //初期表示はVss_Iop
Kujira 0:1977c2310ef7 2311 param = 0;
Kujira 0:1977c2310ef7 2312 gu_cursor(0,4);
Kujira 0:1977c2310ef7 2313 gu_fontsize(2);
Kujira 0:1977c2310ef7 2314 gu_print1("Vss(Iop)");
Kujira 0:1977c2310ef7 2315 gu_cursor(208,4);
Kujira 0:1977c2310ef7 2316 gu_print1("V");
Kujira 0:1977c2310ef7 2317
Kujira 0:1977c2310ef7 2318 while(1) {
Kujira 0:1977c2310ef7 2319 i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 2320
Kujira 0:1977c2310ef7 2321 if (crdata[0] == 0x11 && crdata[2] == 0x01 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。&& タッチしたならば
Kujira 0:1977c2310ef7 2322 //cswnum = crdata[1]; //スイッチ番号
Kujira 0:1977c2310ef7 2323 //cswdata = crdata[2];//ON/OFF情報
Kujira 0:1977c2310ef7 2324
Kujira 0:1977c2310ef7 2325 switch( crdata[1] ) { //SWの番号(位置)
Kujira 0:1977c2310ef7 2326
Kujira 0:1977c2310ef7 2327 case 0x10 ://sw17 パラメータ変更スイッチ(上)
Kujira 0:1977c2310ef7 2328
Kujira 4:24481ebef1c4 2329 if ( param <= param_sum -1 ) {
Kujira 0:1977c2310ef7 2330 param = param + 1;
Kujira 0:1977c2310ef7 2331 } else {
Kujira 0:1977c2310ef7 2332 param = 0;
Kujira 0:1977c2310ef7 2333 }
Kujira 0:1977c2310ef7 2334
Kujira 0:1977c2310ef7 2335 hyouji_cal_param(param);//設定パラメータ表示
Kujira 0:1977c2310ef7 2336 break;
Kujira 0:1977c2310ef7 2337
Kujira 0:1977c2310ef7 2338 case 0x18 ://sw25 パラメータ変更スイッチ(下)
Kujira 0:1977c2310ef7 2339
Kujira 0:1977c2310ef7 2340 if ( param >= 1 ) {
Kujira 0:1977c2310ef7 2341 param = param - 1;
Kujira 0:1977c2310ef7 2342 } else {
Kujira 4:24481ebef1c4 2343 param = param_sum;
Kujira 0:1977c2310ef7 2344 }
Kujira 0:1977c2310ef7 2345
Kujira 0:1977c2310ef7 2346 hyouji_cal_param(param);//設定パラメータ表示
Kujira 0:1977c2310ef7 2347 break;
Kujira 0:1977c2310ef7 2348
Kujira 0:1977c2310ef7 2349 case 19 ://SW20 increase 0x3E8
Kujira 0:1977c2310ef7 2350
Kujira 4:24481ebef1c4 2351 // if set caliber name .. ver3
Kujira 4:24481ebef1c4 2352 if ( param == 14 ){
Kujira 4:24481ebef1c4 2353 up_ascii(&c_temp[0]);
Kujira 4:24481ebef1c4 2354 } else {
Kujira 4:24481ebef1c4 2355 increase_param(param, &sdata_cal[param], 1000);
Kujira 4:24481ebef1c4 2356 }
Kujira 0:1977c2310ef7 2357 break;
Kujira 0:1977c2310ef7 2358
Kujira 0:1977c2310ef7 2359 case 27 ://SW28 decrease 0x3E8
Kujira 0:1977c2310ef7 2360
Kujira 4:24481ebef1c4 2361 if ( param == 14 ){
Kujira 4:24481ebef1c4 2362 down_ascii(&c_temp[0]);
Kujira 4:24481ebef1c4 2363 } else {
Kujira 4:24481ebef1c4 2364 decrease_param(param, &sdata_cal[param], 1000);
Kujira 4:24481ebef1c4 2365 }
Kujira 0:1977c2310ef7 2366 break;
Kujira 0:1977c2310ef7 2367
Kujira 0:1977c2310ef7 2368 case 0x15 ://SW22 increase 0x64
Kujira 0:1977c2310ef7 2369
Kujira 4:24481ebef1c4 2370 if ( param == 14 ){
Kujira 4:24481ebef1c4 2371 up_ascii(&c_temp[1]);
Kujira 4:24481ebef1c4 2372 } else {
Kujira 4:24481ebef1c4 2373 increase_param(param, &sdata_cal[param], 100);
Kujira 4:24481ebef1c4 2374 }
Kujira 0:1977c2310ef7 2375 break;
Kujira 0:1977c2310ef7 2376
Kujira 0:1977c2310ef7 2377 case 0x1D ://SW30 decrease 0x64
Kujira 0:1977c2310ef7 2378
Kujira 4:24481ebef1c4 2379 if ( param == 14 ){
Kujira 4:24481ebef1c4 2380 down_ascii(&c_temp[1]);
Kujira 4:24481ebef1c4 2381 } else {
Kujira 4:24481ebef1c4 2382 decrease_param(param, &sdata_cal[param], 100);
Kujira 4:24481ebef1c4 2383 }
Kujira 0:1977c2310ef7 2384 break;
Kujira 0:1977c2310ef7 2385
Kujira 0:1977c2310ef7 2386 case 23 ://SW24 increase 0x0A
Kujira 0:1977c2310ef7 2387
Kujira 4:24481ebef1c4 2388 if ( param == 14 ){
Kujira 4:24481ebef1c4 2389 up_ascii(&c_temp[2]);
Kujira 4:24481ebef1c4 2390 } else {
Kujira 4:24481ebef1c4 2391 increase_param(param, &sdata_cal[param], 10);
Kujira 4:24481ebef1c4 2392 }
Kujira 0:1977c2310ef7 2393 break;
Kujira 0:1977c2310ef7 2394
Kujira 0:1977c2310ef7 2395 case 31 ://SW32 decrease 0x0A
Kujira 0:1977c2310ef7 2396
Kujira 4:24481ebef1c4 2397 if ( param == 14 ){
Kujira 4:24481ebef1c4 2398 down_ascii(&c_temp[2]);
Kujira 4:24481ebef1c4 2399 } else {
Kujira 4:24481ebef1c4 2400 decrease_param(param, &sdata_cal[param], 10);
Kujira 4:24481ebef1c4 2401 }
Kujira 0:1977c2310ef7 2402 break;
Kujira 4:24481ebef1c4 2403
Kujira 4:24481ebef1c4 2404 case 6: //SW7 "esc"ボタン
Kujira 4:24481ebef1c4 2405
Kujira 4:24481ebef1c4 2406 return; //何もせずに抜ける
Kujira 4:24481ebef1c4 2407
Kujira 4:24481ebef1c4 2408 case 0x07 : //SW8 "save"保存ボタン
Kujira 4:24481ebef1c4 2409
Kujira 4:24481ebef1c4 2410 //ver3 CAL情報 代入
Kujira 4:24481ebef1c4 2411 //*** ver3 ***
Kujira 0:1977c2310ef7 2412 calinfo.vss_iop = sdata_cal[0];
Kujira 0:1977c2310ef7 2413 calinfo.vss_ocp = sdata_cal[1];
Kujira 0:1977c2310ef7 2414 calinfo.vss_voc = sdata_cal[2];
Kujira 0:1977c2310ef7 2415 calinfo.low_limit_voc = sdata_cal[3];
Kujira 0:1977c2310ef7 2416 calinfo.low_limit_iop = sdata_cal[4];
Kujira 0:1977c2310ef7 2417 calinfo.low_limit_ocp = sdata_cal[5];
Kujira 0:1977c2310ef7 2418 calinfo.up_limit_ocp = sdata_cal[6];
Kujira 4:24481ebef1c4 2419 calinfo.up_limit_ocp_v = sdata_cal[7];
Kujira 4:24481ebef1c4 2420 calinfo.low_limit_ocp_v = sdata_cal[8];
Kujira 4:24481ebef1c4 2421 calinfo.wait_iop = sdata_cal[9];
Kujira 4:24481ebef1c4 2422 calinfo.wait_ocp = sdata_cal[10];
Kujira 4:24481ebef1c4 2423 calinfo.wait_voc = sdata_cal[11];
Kujira 4:24481ebef1c4 2424 calinfo.low_limit_resistor = sdata_cal[12];
Kujira 4:24481ebef1c4 2425 calinfo.up_limit_resistor = sdata_cal[13];
Kujira 4:24481ebef1c4 2426
Kujira 4:24481ebef1c4 2427 calinfo.name[0] = c_temp[0];
Kujira 4:24481ebef1c4 2428 calinfo.name[1] = c_temp[1];
Kujira 4:24481ebef1c4 2429 calinfo.name[2] = c_temp[2];
Kujira 4:24481ebef1c4 2430
Kujira 4:24481ebef1c4 2431 //ver3 Byte Write CALNO.EEPROM 書込み
Kujira 0:1977c2310ef7 2432 reg_num = cal_num;
Kujira 4:24481ebef1c4 2433 wdata[0] = adrs_calnum[0];
Kujira 4:24481ebef1c4 2434 wdata[1] = adrs_calnum[1];
Kujira 4:24481ebef1c4 2435 wdata[2] = reg_num;
Kujira 4:24481ebef1c4 2436
Kujira 4:24481ebef1c4 2437 Soushin = i2c.write (eeprom_adrs, wdata, 3); //send stop at end
Kujira 0:1977c2310ef7 2438 wait(0.2);
Kujira 0:1977c2310ef7 2439
Kujira 4:24481ebef1c4 2440 //CAL情報 >> EEPROM
Kujira 0:1977c2310ef7 2441 //送信完了ならば実行
Kujira 0:1977c2310ef7 2442 if(Soushin == 0) {
Kujira 0:1977c2310ef7 2443
Kujira 0:1977c2310ef7 2444 write_caliber_information(&calinfo, cal_num);
Kujira 0:1977c2310ef7 2445
Kujira 0:1977c2310ef7 2446 //ver1.2.3
Kujira 0:1977c2310ef7 2447 } else {
Kujira 0:1977c2310ef7 2448 gu_fontsize(1);
Kujira 0:1977c2310ef7 2449 gu_cursor(0,2);
Kujira 0:1977c2310ef7 2450 gu_print1("can not save cal no");
Kujira 0:1977c2310ef7 2451 wait(2);
Kujira 0:1977c2310ef7 2452 return;
Kujira 0:1977c2310ef7 2453 }
Kujira 0:1977c2310ef7 2454
Kujira 0:1977c2310ef7 2455 //送信完了ならば実行
Kujira 0:1977c2310ef7 2456 if(Soushin == 0) {
Kujira 0:1977c2310ef7 2457 gu_reverse(1);
Kujira 4:24481ebef1c4 2458 gu_set_button_font1(8,"save");
Kujira 0:1977c2310ef7 2459 wait(0.2);
Kujira 0:1977c2310ef7 2460 return;//CAL情報登録画面を抜ける
Kujira 0:1977c2310ef7 2461
Kujira 0:1977c2310ef7 2462 //ver1.2.3
Kujira 0:1977c2310ef7 2463 } else {
Kujira 0:1977c2310ef7 2464 gu_fontsize(1);
Kujira 0:1977c2310ef7 2465 gu_cursor(0,2);
Kujira 0:1977c2310ef7 2466 gu_print1("can not save cal information");
Kujira 0:1977c2310ef7 2467 wait(2);
Kujira 0:1977c2310ef7 2468 return;
Kujira 0:1977c2310ef7 2469 }
Kujira 0:1977c2310ef7 2470
Kujira 0:1977c2310ef7 2471 //break;
Kujira 0:1977c2310ef7 2472
Kujira 0:1977c2310ef7 2473 } //switch
Kujira 0:1977c2310ef7 2474 } //if
Kujira 4:24481ebef1c4 2475
Kujira 4:24481ebef1c4 2476 //gu-D表示 ver3
Kujira 4:24481ebef1c4 2477
Kujira 4:24481ebef1c4 2478 gu_cursor(150,4); //表示位置の指定
Kujira 0:1977c2310ef7 2479
Kujira 0:1977c2310ef7 2480 switch ( param ) {
Kujira 0:1977c2310ef7 2481 case 0://vss_iop
Kujira 0:1977c2310ef7 2482 case 1://vss_ocp
Kujira 0:1977c2310ef7 2483 case 2://vss_voc
Kujira 0:1977c2310ef7 2484 case 3://low_limit_voc
Kujira 4:24481ebef1c4 2485 case 7://low_limit_voc_v
Kujira 4:24481ebef1c4 2486 case 8://up_limit_voc_v
Kujira 0:1977c2310ef7 2487 hyouji_data = sdata_cal[param] * -1;
Kujira 0:1977c2310ef7 2488 gu_putdeck ( &hyouji_data );
Kujira 0:1977c2310ef7 2489 break;
Kujira 4:24481ebef1c4 2490
Kujira 4:24481ebef1c4 2491 case 4://low_limit_iop
Kujira 4:24481ebef1c4 2492 case 5://low_limit_ocp
Kujira 4:24481ebef1c4 2493 case 6://up_limit_ocp
Kujira 0:1977c2310ef7 2494 hyouji_data = sdata_cal[param] * 10;
Kujira 0:1977c2310ef7 2495 gu_putdeck ( &hyouji_data );
Kujira 0:1977c2310ef7 2496 break;
Kujira 4:24481ebef1c4 2497
Kujira 4:24481ebef1c4 2498 case 9: //wait_iop
Kujira 4:24481ebef1c4 2499 case 10: //wait_ocp
Kujira 4:24481ebef1c4 2500 case 11: //wait_voc
Kujira 0:1977c2310ef7 2501 //ver1.1.0
Kujira 0:1977c2310ef7 2502 hyouji_data = sdata_cal[param];
Kujira 0:1977c2310ef7 2503 gu_putdec ( &hyouji_data );
Kujira 0:1977c2310ef7 2504 break;
Kujira 4:24481ebef1c4 2505
Kujira 4:24481ebef1c4 2506 case 12://low_limit_resistor
Kujira 4:24481ebef1c4 2507 case 13://up_limit_resistor
Kujira 0:1977c2310ef7 2508 hyouji_data = sdata_cal[param];
Kujira 0:1977c2310ef7 2509 gu_putdec ( &hyouji_data );
Kujira 0:1977c2310ef7 2510 break;
Kujira 4:24481ebef1c4 2511
Kujira 4:24481ebef1c4 2512 case 14: //cal name ver3
Kujira 4:24481ebef1c4 2513 i2c.write(addr_gu, c_temp, 3); //3byte ascii code
Kujira 4:24481ebef1c4 2514 break;
Kujira 0:1977c2310ef7 2515 /*
Kujira 0:1977c2310ef7 2516 case 6:
Kujira 0:1977c2310ef7 2517 case 7:
Kujira 0:1977c2310ef7 2518 //ver1.1.0
Kujira 0:1977c2310ef7 2519 hyouji_data = sdata_cal[param];
Kujira 0:1977c2310ef7 2520 gu_putdec ( &hyouji_data );
Kujira 0:1977c2310ef7 2521 break;
Kujira 0:1977c2310ef7 2522 case 8://low_limit_resistor
Kujira 0:1977c2310ef7 2523 case 9://up_limit_resistor
Kujira 0:1977c2310ef7 2524 hyouji_data = sdata_cal[param];
Kujira 0:1977c2310ef7 2525 gu_putdec ( &hyouji_data );
Kujira 0:1977c2310ef7 2526 break;
Kujira 0:1977c2310ef7 2527 */
Kujira 0:1977c2310ef7 2528 //ver1.2.2 uptohere
Kujira 0:1977c2310ef7 2529
Kujira 0:1977c2310ef7 2530 }
Kujira 0:1977c2310ef7 2531 wait(0.1);//gu-D 読込間隔の設定
Kujira 0:1977c2310ef7 2532 }//while
Kujira 0:1977c2310ef7 2533 }
Kujira 0:1977c2310ef7 2534
Kujira 0:1977c2310ef7 2535 /*********************************
Kujira 0:1977c2310ef7 2536
Kujira 0:1977c2310ef7 2537 Auto Mode (sub)
Kujira 0:1977c2310ef7 2538 自動測定モード 初期画面
Kujira 0:1977c2310ef7 2539
Kujira 0:1977c2310ef7 2540 *********************************/
Kujira 0:1977c2310ef7 2541 void auto_int_hyouji()
Kujira 0:1977c2310ef7 2542 {
Kujira 0:1977c2310ef7 2543 //short st;
Kujira 0:1977c2310ef7 2544 char cmd_gu[32] ; //gu-DへのI2Cコマンド用配列 1byte
Kujira 0:1977c2310ef7 2545
Kujira 0:1977c2310ef7 2546 gu_cls();
Kujira 0:1977c2310ef7 2547 gu_fontsize(1);
Kujira 0:1977c2310ef7 2548 gu_print1("AUTO MODE CAL No.");
Kujira 0:1977c2310ef7 2549 cmd_gu[0] = reg_num + 0x30;
Kujira 0:1977c2310ef7 2550 i2c.write(addr_gu, cmd_gu, 1);
Kujira 0:1977c2310ef7 2551 gu_Button_power_on();//show button
Kujira 0:1977c2310ef7 2552
Kujira 0:1977c2310ef7 2553 }
Kujira 0:1977c2310ef7 2554 /*******************************************************
Kujira 0:1977c2310ef7 2555
Kujira 0:1977c2310ef7 2556 Auto Mode (Main)
Kujira 0:1977c2310ef7 2557 自動測定モード 画面
Kujira 0:1977c2310ef7 2558 ver1.04 パネルタッチ -> スタートスイッチで測定開始へ変更
Kujira 0:1977c2310ef7 2559
Kujira 0:1977c2310ef7 2560 *******************************************************/
Kujira 0:1977c2310ef7 2561 void auto_run()
Kujira 0:1977c2310ef7 2562 {
Kujira 0:1977c2310ef7 2563 char cmd_gu[32] ; //gu-DへのI2Cコマンド用配列 1byte
Kujira 0:1977c2310ef7 2564 char crdata[6];
Kujira 0:1977c2310ef7 2565 //char cswnum; //SW_No. sw1->0x00 ~~ sw32->0x1F
Kujira 0:1977c2310ef7 2566 //int i;
Kujira 0:1977c2310ef7 2567 //float fdata[4][4];//ファイル出力用
Kujira 0:1977c2310ef7 2568 //short sdata[4];
Kujira 0:1977c2310ef7 2569 //short s;
Kujira 0:1977c2310ef7 2570
Kujira 0:1977c2310ef7 2571 read_regnum();//CAL登録No.読込
Kujira 0:1977c2310ef7 2572 read_caliber(&calinfo,reg_num);//指定したCAL登録No.の情報を読込後、calinfoへ代入
Kujira 0:1977c2310ef7 2573
Kujira 0:1977c2310ef7 2574 auto_int_hyouji();
Kujira 0:1977c2310ef7 2575
Kujira 0:1977c2310ef7 2576 //dac_init(); //DAC 初期化
Kujira 0:1977c2310ef7 2577
Kujira 0:1977c2310ef7 2578 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2579 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 2580 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 2581 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 2582 cmd_gu[3]= 0x02;//SW状態変化時自動送信モード2
Kujira 0:1977c2310ef7 2583 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2584
Kujira 0:1977c2310ef7 2585 wait(0.1);
Kujira 0:1977c2310ef7 2586
Kujira 0:1977c2310ef7 2587 Jyushin = i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 2588
Kujira 0:1977c2310ef7 2589 while(1) {
Kujira 0:1977c2310ef7 2590
Kujira 0:1977c2310ef7 2591 //スタートスイッチで測定開始
Kujira 0:1977c2310ef7 2592 if ( sw_start == 0 ) {
Kujira 0:1977c2310ef7 2593 meas_sub();
Kujira 0:1977c2310ef7 2594 }
Kujira 0:1977c2310ef7 2595
Kujira 0:1977c2310ef7 2596 wait(0.1);
Kujira 0:1977c2310ef7 2597
Kujira 0:1977c2310ef7 2598 crdata[0] = 0;
Kujira 0:1977c2310ef7 2599 crdata[1] = 0;
Kujira 0:1977c2310ef7 2600 crdata[2] = 0;
Kujira 0:1977c2310ef7 2601
Kujira 0:1977c2310ef7 2602 i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 2603
Kujira 0:1977c2310ef7 2604 if ( crdata[0] == 0x11 && crdata[2] == 1 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。
Kujira 0:1977c2310ef7 2605
Kujira 0:1977c2310ef7 2606 //cswnum = crdata[1]; //スイッチ番号
Kujira 0:1977c2310ef7 2607 //cswdata = crdata[2];//ON/OFF情報
Kujira 0:1977c2310ef7 2608
Kujira 0:1977c2310ef7 2609 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2610 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 2611 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 2612 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 2613 cmd_gu[3]= 0x00;//SW状態変化時自動送信モード2解除
Kujira 0:1977c2310ef7 2614 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2615
Kujira 0:1977c2310ef7 2616 if ( crdata[1] == 7 ) {
Kujira 0:1977c2310ef7 2617
Kujira 0:1977c2310ef7 2618 gu_Button_power_off();//電源ボタンイメージ反転表示
Kujira 0:1977c2310ef7 2619 wait(0.5);
Kujira 0:1977c2310ef7 2620
Kujira 0:1977c2310ef7 2621 led_off();//LED全消灯
Kujira 0:1977c2310ef7 2622
Kujira 0:1977c2310ef7 2623 return;//この関数を抜ける
Kujira 0:1977c2310ef7 2624
Kujira 0:1977c2310ef7 2625 } //end if
Kujira 0:1977c2310ef7 2626
Kujira 0:1977c2310ef7 2627 /* ver 1.1.1 タッチパネルで測定開始を削除
Kujira 0:1977c2310ef7 2628 else {
Kujira 0:1977c2310ef7 2629
Kujira 0:1977c2310ef7 2630 meas_sub();//測定用サブ
Kujira 0:1977c2310ef7 2631
Kujira 0:1977c2310ef7 2632
Kujira 0:1977c2310ef7 2633 } //else if
Kujira 0:1977c2310ef7 2634 */
Kujira 0:1977c2310ef7 2635
Kujira 0:1977c2310ef7 2636 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2637 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 2638 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 2639 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 2640 cmd_gu[3]= 0x02;//SW状態変化時自動送信モード2解除
Kujira 0:1977c2310ef7 2641 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2642
Kujira 0:1977c2310ef7 2643 wait(0.1);
Kujira 0:1977c2310ef7 2644
Kujira 0:1977c2310ef7 2645 i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 2646
Kujira 0:1977c2310ef7 2647 }//if
Kujira 0:1977c2310ef7 2648 wait(0.1);
Kujira 0:1977c2310ef7 2649 }//While
Kujira 0:1977c2310ef7 2650 }
Kujira 0:1977c2310ef7 2651
Kujira 0:1977c2310ef7 2652 /*
Kujira 0:1977c2310ef7 2653 char cmd_gu[32] ; //gu-DへのI2Cコマンド用配列 1byte
Kujira 0:1977c2310ef7 2654 char crdata[6];
Kujira 0:1977c2310ef7 2655 char cswnum; //SW_No. sw1->0x00 ~~ sw32->0x1F
Kujira 0:1977c2310ef7 2656 //int i;
Kujira 0:1977c2310ef7 2657 //float fdata[4][4];//ファイル出力用
Kujira 0:1977c2310ef7 2658 //short sdata[4];
Kujira 0:1977c2310ef7 2659 //short s;
Kujira 0:1977c2310ef7 2660
Kujira 0:1977c2310ef7 2661 read_regnum();//CAL登録No.読込
Kujira 0:1977c2310ef7 2662 read_caliber(&calinfo,reg_num);//指定したCAL登録No.の情報を読込後、calinfoへ代入
Kujira 0:1977c2310ef7 2663
Kujira 0:1977c2310ef7 2664 auto_int_hyouji();
Kujira 0:1977c2310ef7 2665
Kujira 0:1977c2310ef7 2666 //dac_init(); //DAC 初期化
Kujira 0:1977c2310ef7 2667
Kujira 0:1977c2310ef7 2668 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2669 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 2670 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 2671 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 2672 cmd_gu[3]= 0x02;//SW状態変化時自動送信モード2
Kujira 0:1977c2310ef7 2673 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2674
Kujira 0:1977c2310ef7 2675 wait(0.1);
Kujira 0:1977c2310ef7 2676
Kujira 0:1977c2310ef7 2677 Jyushin = i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 2678
Kujira 0:1977c2310ef7 2679 while(1) {
Kujira 0:1977c2310ef7 2680
Kujira 0:1977c2310ef7 2681 wait(0.1);
Kujira 0:1977c2310ef7 2682
Kujira 0:1977c2310ef7 2683 crdata[0] = 0;
Kujira 0:1977c2310ef7 2684 crdata[1] = 0;
Kujira 0:1977c2310ef7 2685 crdata[2] = 0;
Kujira 0:1977c2310ef7 2686
Kujira 0:1977c2310ef7 2687 i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 2688
Kujira 0:1977c2310ef7 2689 if ( crdata[0] == 0x11 && crdata[2] == 1 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。
Kujira 0:1977c2310ef7 2690 cswnum = crdata[1]; //スイッチ番号
Kujira 0:1977c2310ef7 2691 //cswdata = crdata[2];//ON/OFF情報
Kujira 0:1977c2310ef7 2692
Kujira 0:1977c2310ef7 2693 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2694 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 2695 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 2696 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 2697 cmd_gu[3]= 0x00;//SW状態変化時自動送信モード2解除
Kujira 0:1977c2310ef7 2698 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2699
Kujira 0:1977c2310ef7 2700 //SWの番号(位置)
Kujira 0:1977c2310ef7 2701 if ( cswnum == 7 ) {
Kujira 0:1977c2310ef7 2702
Kujira 0:1977c2310ef7 2703 gu_Button_power_off();//電源ボタンイメージ反転表示
Kujira 0:1977c2310ef7 2704 wait(0.5);
Kujira 0:1977c2310ef7 2705
Kujira 0:1977c2310ef7 2706 led_off();//LED全消灯
Kujira 0:1977c2310ef7 2707
Kujira 0:1977c2310ef7 2708 return;//この関数を抜ける
Kujira 0:1977c2310ef7 2709
Kujira 0:1977c2310ef7 2710 }
Kujira 0:1977c2310ef7 2711
Kujira 0:1977c2310ef7 2712 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2713 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 2714 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 2715 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 2716 cmd_gu[3]= 0x02;//SW状態変化時自動送信モード2解除
Kujira 0:1977c2310ef7 2717 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2718
Kujira 0:1977c2310ef7 2719 wait(0.1);
Kujira 0:1977c2310ef7 2720
Kujira 0:1977c2310ef7 2721 i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 2722
Kujira 0:1977c2310ef7 2723 } else if ( sw_start == 0 ) { //if
Kujira 0:1977c2310ef7 2724
Kujira 0:1977c2310ef7 2725 auto_int_hyouji();
Kujira 0:1977c2310ef7 2726
Kujira 0:1977c2310ef7 2727 gu_cursor(0,2);
Kujira 0:1977c2310ef7 2728 gu_print1("Please Wait..");
Kujira 0:1977c2310ef7 2729 gu_fontsize(2);
Kujira 0:1977c2310ef7 2730
Kujira 0:1977c2310ef7 2731 read_regnum();//CAL登録No.読込
Kujira 0:1977c2310ef7 2732
Kujira 0:1977c2310ef7 2733 read_caliber(&calinfo,reg_num);//指定したCAL登録No.の情報を読込後、calinfoへ代入
Kujira 0:1977c2310ef7 2734
Kujira 0:1977c2310ef7 2735 auto_meas( number_of_channels );//2個測定
Kujira 0:1977c2310ef7 2736
Kujira 0:1977c2310ef7 2737 hantei( number_of_channels );//判定LED
Kujira 0:1977c2310ef7 2738
Kujira 0:1977c2310ef7 2739 wait(0.5);
Kujira 0:1977c2310ef7 2740
Kujira 0:1977c2310ef7 2741 gu_fontsize(1);
Kujira 0:1977c2310ef7 2742 gu_cursor(0,2);
Kujira 0:1977c2310ef7 2743 gu_print1("READY ");
Kujira 0:1977c2310ef7 2744
Kujira 0:1977c2310ef7 2745 }
Kujira 0:1977c2310ef7 2746 wait(0.1);
Kujira 0:1977c2310ef7 2747 }//While
Kujira 0:1977c2310ef7 2748 }
Kujira 0:1977c2310ef7 2749 */
Kujira 0:1977c2310ef7 2750
Kujira 0:1977c2310ef7 2751 /*
Kujira 0:1977c2310ef7 2752 void auto_run()
Kujira 0:1977c2310ef7 2753 {
Kujira 0:1977c2310ef7 2754 char cmd_gu[32] ; //gu-DへのI2Cコマンド用配列 1byte
Kujira 0:1977c2310ef7 2755 char crdata[6];
Kujira 0:1977c2310ef7 2756 char cswnum; //SW_No. sw1->0x00 ~~ sw32->0x1F
Kujira 0:1977c2310ef7 2757 //int i;
Kujira 0:1977c2310ef7 2758 //float fdata[4][4];//ファイル出力用
Kujira 0:1977c2310ef7 2759 //short sdata[4];
Kujira 0:1977c2310ef7 2760 //short s;
Kujira 0:1977c2310ef7 2761
Kujira 0:1977c2310ef7 2762 read_regnum();//CAL登録No.読込
Kujira 0:1977c2310ef7 2763 read_caliber(&calinfo,reg_num);//指定したCAL登録No.の情報を読込後、calinfoへ代入
Kujira 0:1977c2310ef7 2764
Kujira 0:1977c2310ef7 2765 auto_int_hyouji();
Kujira 0:1977c2310ef7 2766
Kujira 0:1977c2310ef7 2767 //dac_init(); //DAC 初期化
Kujira 0:1977c2310ef7 2768
Kujira 0:1977c2310ef7 2769 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2770 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 2771 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 2772 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 2773 cmd_gu[3]= 0x02;//SW状態変化時自動送信モード2
Kujira 0:1977c2310ef7 2774 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2775
Kujira 0:1977c2310ef7 2776 wait(0.1);
Kujira 0:1977c2310ef7 2777
Kujira 0:1977c2310ef7 2778 Jyushin = i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 2779
Kujira 0:1977c2310ef7 2780 while(1) {
Kujira 0:1977c2310ef7 2781
Kujira 0:1977c2310ef7 2782 wait(0.1);
Kujira 0:1977c2310ef7 2783
Kujira 0:1977c2310ef7 2784 crdata[0] = 0;
Kujira 0:1977c2310ef7 2785 crdata[1] = 0;
Kujira 0:1977c2310ef7 2786 crdata[2] = 0;
Kujira 0:1977c2310ef7 2787
Kujira 0:1977c2310ef7 2788 i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 2789
Kujira 0:1977c2310ef7 2790 if ( crdata[0] == 0x11 && crdata[2] == 1 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。
Kujira 0:1977c2310ef7 2791 cswnum = crdata[1]; //スイッチ番号
Kujira 0:1977c2310ef7 2792 //cswdata = crdata[2];//ON/OFF情報
Kujira 0:1977c2310ef7 2793
Kujira 0:1977c2310ef7 2794 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2795 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 2796 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 2797 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 2798 cmd_gu[3]= 0x00;//SW状態変化時自動送信モード2解除
Kujira 0:1977c2310ef7 2799 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2800
Kujira 0:1977c2310ef7 2801 //SWの番号(位置)
Kujira 0:1977c2310ef7 2802 if ( cswnum == 7 ) {
Kujira 0:1977c2310ef7 2803
Kujira 0:1977c2310ef7 2804 gu_Button_power_off();//電源ボタンイメージ反転表示
Kujira 0:1977c2310ef7 2805 wait(0.5);
Kujira 0:1977c2310ef7 2806
Kujira 0:1977c2310ef7 2807 led_off();//LED全消灯
Kujira 0:1977c2310ef7 2808
Kujira 0:1977c2310ef7 2809 return;//この関数を抜ける
Kujira 0:1977c2310ef7 2810
Kujira 0:1977c2310ef7 2811 } else {
Kujira 0:1977c2310ef7 2812
Kujira 0:1977c2310ef7 2813 auto_int_hyouji();
Kujira 0:1977c2310ef7 2814
Kujira 0:1977c2310ef7 2815 gu_cursor(0,2);
Kujira 0:1977c2310ef7 2816 gu_print1("Please Wait..");
Kujira 0:1977c2310ef7 2817 gu_fontsize(2);
Kujira 0:1977c2310ef7 2818
Kujira 0:1977c2310ef7 2819 read_regnum();//CAL登録No.読込
Kujira 0:1977c2310ef7 2820
Kujira 0:1977c2310ef7 2821 read_caliber(&calinfo,reg_num);//指定したCAL登録No.の情報を読込後、calinfoへ代入
Kujira 0:1977c2310ef7 2822
Kujira 0:1977c2310ef7 2823 auto_meas( number_of_channels );//2個測定
Kujira 0:1977c2310ef7 2824
Kujira 0:1977c2310ef7 2825 hantei( number_of_channels );//判定LED
Kujira 0:1977c2310ef7 2826
Kujira 0:1977c2310ef7 2827 wait(0.5);
Kujira 0:1977c2310ef7 2828
Kujira 0:1977c2310ef7 2829 gu_fontsize(1);
Kujira 0:1977c2310ef7 2830 gu_cursor(0,2);
Kujira 0:1977c2310ef7 2831 gu_print1("READY ");
Kujira 0:1977c2310ef7 2832
Kujira 0:1977c2310ef7 2833 } //else if
Kujira 0:1977c2310ef7 2834
Kujira 0:1977c2310ef7 2835 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2836 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 2837 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 2838 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 2839 cmd_gu[3]= 0x02;//SW状態変化時自動送信モード2解除
Kujira 0:1977c2310ef7 2840 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 2841
Kujira 0:1977c2310ef7 2842 wait(0.1);
Kujira 0:1977c2310ef7 2843
Kujira 0:1977c2310ef7 2844 i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 2845
Kujira 0:1977c2310ef7 2846 }//if
Kujira 0:1977c2310ef7 2847
Kujira 0:1977c2310ef7 2848 wait(0.1);
Kujira 0:1977c2310ef7 2849
Kujira 0:1977c2310ef7 2850 }//While
Kujira 0:1977c2310ef7 2851
Kujira 0:1977c2310ef7 2852 }
Kujira 0:1977c2310ef7 2853 */
Kujira 0:1977c2310ef7 2854
Kujira 0:1977c2310ef7 2855 /*********************************
Kujira 0:1977c2310ef7 2856
Kujira 0:1977c2310ef7 2857 Auto Mode (Sub)
Kujira 0:1977c2310ef7 2858
Kujira 0:1977c2310ef7 2859 *********************************/
Kujira 0:1977c2310ef7 2860 void meas_sub()
Kujira 0:1977c2310ef7 2861 {
Kujira 0:1977c2310ef7 2862 auto_int_hyouji();
Kujira 0:1977c2310ef7 2863
Kujira 0:1977c2310ef7 2864 gu_cursor(0,2);
Kujira 0:1977c2310ef7 2865 gu_print1("Please Wait..");
Kujira 0:1977c2310ef7 2866 gu_fontsize(2);
Kujira 0:1977c2310ef7 2867
Kujira 0:1977c2310ef7 2868 read_regnum();//CAL登録No.読込
Kujira 0:1977c2310ef7 2869
Kujira 0:1977c2310ef7 2870 read_caliber(&calinfo,reg_num);//指定したCAL登録No.の情報を読込後、calinfoへ代入
Kujira 0:1977c2310ef7 2871
Kujira 0:1977c2310ef7 2872 auto_meas( number_of_channels );//2個測定
Kujira 0:1977c2310ef7 2873
Kujira 0:1977c2310ef7 2874 hantei( number_of_channels );//判定LED
Kujira 0:1977c2310ef7 2875
Kujira 0:1977c2310ef7 2876 wait(0.5);
Kujira 0:1977c2310ef7 2877
Kujira 0:1977c2310ef7 2878 gu_fontsize(1);
Kujira 0:1977c2310ef7 2879 gu_cursor(0,2);
Kujira 0:1977c2310ef7 2880 gu_print1("READY ");
Kujira 0:1977c2310ef7 2881
Kujira 0:1977c2310ef7 2882 }
Kujira 0:1977c2310ef7 2883
Kujira 0:1977c2310ef7 2884 /*********************************
Kujira 0:1977c2310ef7 2885
Kujira 0:1977c2310ef7 2886 Auto Mode/SEQ Mode (sub)
Kujira 0:1977c2310ef7 2887 自動測定
Kujira 0:1977c2310ef7 2888 char noc -> 総測定数 1~4
Kujira 0:1977c2310ef7 2889
Kujira 0:1977c2310ef7 2890 *********************************/
Kujira 0:1977c2310ef7 2891 void auto_meas(char noc)
Kujira 0:1977c2310ef7 2892 {
Kujira 0:1977c2310ef7 2893 int x[4] = {0,0,128,128}; //GU_D x座標 4個測定時の表示スタート位置
Kujira 0:1977c2310ef7 2894 int y[4] = {5,11,5,11}; //GU_D y座標 4個測定時の表示スタート位置
Kujira 0:1977c2310ef7 2895 int iy ; //GU_D y座標 2個測定時の表示スタート位置
Kujira 0:1977c2310ef7 2896 int i;
Kujira 0:1977c2310ef7 2897 float fdata[4][4];//ファイル出力用
Kujira 0:1977c2310ef7 2898 short sdata[4];
Kujira 0:1977c2310ef7 2899
Kujira 0:1977c2310ef7 2900 iy = 4;//GU_D 2個測定時の測定値の表示開始位置 y座標
Kujira 0:1977c2310ef7 2901
Kujira 0:1977c2310ef7 2902 if ( noc > 4 ) {
Kujira 0:1977c2310ef7 2903 noc = 4;
Kujira 0:1977c2310ef7 2904 }
Kujira 0:1977c2310ef7 2905
Kujira 0:1977c2310ef7 2906 //値の初期化
Kujira 0:1977c2310ef7 2907 for ( i = 0; i <= 3; i++) {
Kujira 0:1977c2310ef7 2908 I[i] = 0;
Kujira 0:1977c2310ef7 2909 R[i] = 0; //ver 1.1.1
Kujira 0:1977c2310ef7 2910 iop[i] = 0;
Kujira 0:1977c2310ef7 2911 voc[i] = 0;
Kujira 0:1977c2310ef7 2912 ocp[i] = 0;
Kujira 0:1977c2310ef7 2913 }
Kujira 0:1977c2310ef7 2914
Kujira 0:1977c2310ef7 2915 //判定用LED消灯
Kujira 0:1977c2310ef7 2916 led_off();
Kujira 0:1977c2310ef7 2917
Kujira 0:1977c2310ef7 2918 //電源投入
Kujira 0:1977c2310ef7 2919 for ( i = 0; i <= ( noc - 1 ); i++) {
Kujira 0:1977c2310ef7 2920 dac_out( calinfo.vss_iop,i); //Vss設定 DAC_A~D
Kujira 0:1977c2310ef7 2921 }
Kujira 0:1977c2310ef7 2922
Kujira 0:1977c2310ef7 2923 wait( wait_poweron );//パワーブレイク復帰待機?
Kujira 0:1977c2310ef7 2924
Kujira 0:1977c2310ef7 2925 //Reset CAL
Kujira 0:1977c2310ef7 2926 for ( i = 0; i <= ( noc -1 ); i++) {
Kujira 0:1977c2310ef7 2927 io[i] = 1; //io1 = "H"
Kujira 0:1977c2310ef7 2928 }
Kujira 0:1977c2310ef7 2929
Kujira 0:1977c2310ef7 2930 wait(time_reset); //ver1.1.3
Kujira 0:1977c2310ef7 2931 //wait(0.2);
Kujira 0:1977c2310ef7 2932
Kujira 0:1977c2310ef7 2933 for ( i = 0; i <= ( noc -1 ); i++) {
Kujira 0:1977c2310ef7 2934 io[i] = 0; //io1 = "L"
Kujira 0:1977c2310ef7 2935 }
Kujira 0:1977c2310ef7 2936
Kujira 0:1977c2310ef7 2937 //抵抗測定
Kujira 0:1977c2310ef7 2938 for ( i = 0; i <= ( noc -1 ); i++ ) {
Kujira 0:1977c2310ef7 2939 R[i] = meas_resistor(i);
Kujira 0:1977c2310ef7 2940 }
Kujira 0:1977c2310ef7 2941
Kujira 0:1977c2310ef7 2942 //display GU_D
Kujira 0:1977c2310ef7 2943 if ( number_of_channels <= 2 ) { //2個測定の時の表示
Kujira 0:1977c2310ef7 2944 gu_fontsize(2);
Kujira 0:1977c2310ef7 2945 gu_cursor(0,iy);
Kujira 0:1977c2310ef7 2946 gu_print1("[ch.1]");
Kujira 0:1977c2310ef7 2947 gu_cursor(128,iy);
Kujira 0:1977c2310ef7 2948 gu_print1("[ch.2]");
Kujira 0:1977c2310ef7 2949 //CH.1 表示
Kujira 0:1977c2310ef7 2950 gu_cursor(0, iy + 2);
Kujira 0:1977c2310ef7 2951 gu_print1("R ");
Kujira 0:1977c2310ef7 2952 display_resistor( R[0] );
Kujira 0:1977c2310ef7 2953 //CH.2 表示
Kujira 0:1977c2310ef7 2954 gu_cursor(128, iy + 2);
Kujira 0:1977c2310ef7 2955 gu_print("R ");
Kujira 0:1977c2310ef7 2956 display_resistor( R[1] );
Kujira 0:1977c2310ef7 2957 } else if( number_of_channels >= 3) { //3.4個測定の時の表示
Kujira 0:1977c2310ef7 2958 gu_fontsize(1);
Kujira 0:1977c2310ef7 2959 gu_cursor(x[0],y[0]);
Kujira 0:1977c2310ef7 2960 gu_print1("ch.1");
Kujira 0:1977c2310ef7 2961 gu_cursor(x[1],y[1] );
Kujira 0:1977c2310ef7 2962 gu_print1("ch.2");
Kujira 0:1977c2310ef7 2963 gu_cursor(x[2],y[2]);
Kujira 0:1977c2310ef7 2964 gu_print1("ch.3");
Kujira 0:1977c2310ef7 2965
Kujira 0:1977c2310ef7 2966 if ( number_of_channels == 4 ) {
Kujira 0:1977c2310ef7 2967 gu_cursor(x[3],y[3]);
Kujira 0:1977c2310ef7 2968 gu_print1("ch.4");
Kujira 0:1977c2310ef7 2969 }
Kujira 0:1977c2310ef7 2970
Kujira 0:1977c2310ef7 2971 //CH.1~4 表示
Kujira 0:1977c2310ef7 2972 for ( i = 0; i <= ( number_of_channels - 1 ); i++) {
Kujira 0:1977c2310ef7 2973 gu_cursor( x[i], y[i] + 1 );//x座標指定
Kujira 0:1977c2310ef7 2974 gu_print1("R ");
Kujira 0:1977c2310ef7 2975 display_resistor( R[i] );
Kujira 0:1977c2310ef7 2976 }
Kujira 0:1977c2310ef7 2977 }
Kujira 0:1977c2310ef7 2978
Kujira 0:1977c2310ef7 2979 //iop測定
Kujira 0:1977c2310ef7 2980 wait(calinfo.wait_iop);//Vss印加~リセット後からiop測定までの待機時間
Kujira 0:1977c2310ef7 2981
Kujira 0:1977c2310ef7 2982 meas_current_automode( noc );//電流測定サブ 測定値をI[]へ代入
Kujira 0:1977c2310ef7 2983
Kujira 0:1977c2310ef7 2984 for( i = 0; i <= ( noc - 1) ; i++) {
Kujira 0:1977c2310ef7 2985 iop[i] = I[i];
Kujira 0:1977c2310ef7 2986 }
Kujira 0:1977c2310ef7 2987
Kujira 0:1977c2310ef7 2988 //display GU_D
Kujira 0:1977c2310ef7 2989 if ( number_of_channels <= 2 ) { //2個測定の時の表示
Kujira 0:1977c2310ef7 2990 gu_cursor(0, iy + 4 );//IOP測定値表示位置指定
Kujira 0:1977c2310ef7 2991 gu_print1("Iop ");
Kujira 0:1977c2310ef7 2992 gu_putdeci(&iop[0]);
Kujira 0:1977c2310ef7 2993 gu_cursor(128, iy + 4 );
Kujira 0:1977c2310ef7 2994 gu_print1("Iop ");
Kujira 0:1977c2310ef7 2995 gu_putdeci(&iop[1]);
Kujira 0:1977c2310ef7 2996 } else {
Kujira 0:1977c2310ef7 2997 //CH.1~4 表示
Kujira 0:1977c2310ef7 2998 for ( i=0; i <= ( number_of_channels - 1 ); i++) {
Kujira 0:1977c2310ef7 2999 gu_cursor( x[i], y[i] + 2 ); //x座標指定
Kujira 0:1977c2310ef7 3000 gu_print1("Iop ");
Kujira 0:1977c2310ef7 3001 gu_putdeci(&iop[i]);
Kujira 0:1977c2310ef7 3002 }
Kujira 0:1977c2310ef7 3003 }
Kujira 0:1977c2310ef7 3004
Kujira 0:1977c2310ef7 3005 wait(0.01);
Kujira 0:1977c2310ef7 3006
Kujira 0:1977c2310ef7 3007 //過充電防止時電流測定
Kujira 0:1977c2310ef7 3008 for ( i = 0; i <= ( noc - 1 ); i++) {
Kujira 0:1977c2310ef7 3009 dac_out( calinfo.vss_ocp,i); //Vss設定 DAC_A~D //ver1.1.2
Kujira 0:1977c2310ef7 3010 }
Kujira 0:1977c2310ef7 3011
Kujira 0:1977c2310ef7 3012 wait( calinfo.wait_ocp );
Kujira 0:1977c2310ef7 3013
Kujira 0:1977c2310ef7 3014 meas_current_automode( noc );
Kujira 0:1977c2310ef7 3015
Kujira 0:1977c2310ef7 3016 for( i = 0; i <= ( noc - 1) ; i++) {
Kujira 0:1977c2310ef7 3017 ocp[i] = I[i];
Kujira 0:1977c2310ef7 3018 }
Kujira 0:1977c2310ef7 3019
Kujira 0:1977c2310ef7 3020 //display GU_D
Kujira 0:1977c2310ef7 3021 if ( number_of_channels <= 2 ) { //2個測定の時の表示
Kujira 0:1977c2310ef7 3022 gu_cursor(0, iy + 6 );//IOP測定値表示位置指定
Kujira 0:1977c2310ef7 3023 gu_print1("OCP ");
Kujira 0:1977c2310ef7 3024 gu_putdeci(&ocp[0]);
Kujira 0:1977c2310ef7 3025 gu_cursor(128, iy + 6 );
Kujira 0:1977c2310ef7 3026 gu_print1("OCP ");
Kujira 0:1977c2310ef7 3027 gu_putdeci(&ocp[1]);
Kujira 0:1977c2310ef7 3028 } else {
Kujira 0:1977c2310ef7 3029 //CH.1~4 表示
Kujira 0:1977c2310ef7 3030 for ( i=0; i <= ( number_of_channels - 1 ); i++) {
Kujira 0:1977c2310ef7 3031 gu_cursor( x[i], y[i] + 3 ); //x座標指定
Kujira 0:1977c2310ef7 3032 gu_print1("OCP ");
Kujira 0:1977c2310ef7 3033 gu_putdeci(&ocp[i]);
Kujira 0:1977c2310ef7 3034 }
Kujira 0:1977c2310ef7 3035 }
Kujira 0:1977c2310ef7 3036
Kujira 0:1977c2310ef7 3037 //VOC測定
Kujira 0:1977c2310ef7 3038 for ( i = 0; i <= ( noc - 1 ); i++) {
Kujira 0:1977c2310ef7 3039 dac_out( calinfo.vss_voc,i); //Vss設定 DAC_A~D
Kujira 0:1977c2310ef7 3040 }
Kujira 0:1977c2310ef7 3041
Kujira 4:24481ebef1c4 3042 wait( wait_voc_1 );
Kujira 0:1977c2310ef7 3043
Kujira 0:1977c2310ef7 3044 for ( i = 0; i <= ( noc -1 ); i++) {
Kujira 0:1977c2310ef7 3045 io[i] = 1; //io1 = "H"
Kujira 0:1977c2310ef7 3046 }
Kujira 0:1977c2310ef7 3047
Kujira 0:1977c2310ef7 3048 wait( wait_reset );
Kujira 0:1977c2310ef7 3049
Kujira 0:1977c2310ef7 3050 for ( i = 0; i <= ( noc -1 ); i++ ) {
Kujira 0:1977c2310ef7 3051
Kujira 0:1977c2310ef7 3052 //ver1.2.0
Kujira 0:1977c2310ef7 3053 if (RL_EN == 1) {
Kujira 0:1977c2310ef7 3054 switch (i) {
Kujira 0:1977c2310ef7 3055 case 0:
Kujira 0:1977c2310ef7 3056 io[4] = 1; //外付けリレーON
Kujira 0:1977c2310ef7 3057 wait(TIME_RELAY_ON);
Kujira 0:1977c2310ef7 3058 case 1:
Kujira 0:1977c2310ef7 3059 io[5] = 1; //外付けリレーON
Kujira 0:1977c2310ef7 3060 wait(TIME_RELAY_ON);
Kujira 0:1977c2310ef7 3061 }
Kujira 0:1977c2310ef7 3062 }
Kujira 0:1977c2310ef7 3063 //up to here ver1.2.0
Kujira 0:1977c2310ef7 3064
Kujira 0:1977c2310ef7 3065 voc[i] = meas_voltage(i);
Kujira 0:1977c2310ef7 3066 sdata[i] = voc[i] * -1;
Kujira 0:1977c2310ef7 3067
Kujira 0:1977c2310ef7 3068 //ver1.2.0
Kujira 0:1977c2310ef7 3069 if (RL_EN == 1) {
Kujira 0:1977c2310ef7 3070 io[4] = 0; //外付けリレーOFF
Kujira 0:1977c2310ef7 3071 io[5] = 0; //外付けリレーOFF
Kujira 0:1977c2310ef7 3072 wait(TIME_RELAY_OFF);
Kujira 0:1977c2310ef7 3073 }
Kujira 0:1977c2310ef7 3074 //up to here
Kujira 0:1977c2310ef7 3075 }
Kujira 0:1977c2310ef7 3076
Kujira 0:1977c2310ef7 3077
Kujira 0:1977c2310ef7 3078 //display GU_D
Kujira 0:1977c2310ef7 3079 if ( number_of_channels <= 2 ) { //2個測定の時の表示
Kujira 0:1977c2310ef7 3080 gu_cursor(0, iy + 8 );//IOP測定値表示位置指定
Kujira 0:1977c2310ef7 3081 gu_print1("Voc ");
Kujira 0:1977c2310ef7 3082 gu_putdeck(&sdata[0]);
Kujira 0:1977c2310ef7 3083 gu_print1("V");
Kujira 0:1977c2310ef7 3084 gu_cursor(128, iy + 8 );
Kujira 0:1977c2310ef7 3085 gu_print1("Voc ");
Kujira 0:1977c2310ef7 3086 gu_putdeck(&sdata[1]);
Kujira 0:1977c2310ef7 3087 gu_print1("V");
Kujira 0:1977c2310ef7 3088 } else {
Kujira 0:1977c2310ef7 3089 //CH.1~4 表示
Kujira 0:1977c2310ef7 3090 for ( i=0; i <= ( number_of_channels - 1 ); i++) {
Kujira 0:1977c2310ef7 3091 gu_cursor( x[i], y[i] + 4 );//x座標指定
Kujira 0:1977c2310ef7 3092 gu_print1("Voc ");
Kujira 0:1977c2310ef7 3093 gu_putdeck(&sdata[i]);
Kujira 0:1977c2310ef7 3094 gu_print1("V");
Kujira 0:1977c2310ef7 3095 }
Kujira 0:1977c2310ef7 3096 }
Kujira 0:1977c2310ef7 3097
Kujira 0:1977c2310ef7 3098 //R = "L"
Kujira 0:1977c2310ef7 3099 for ( i = 0; i <= ( noc -1 ); i++) {
Kujira 0:1977c2310ef7 3100 io[i] = 0; //io1 = "L"
Kujira 0:1977c2310ef7 3101 }
Kujira 0:1977c2310ef7 3102
Kujira 0:1977c2310ef7 3103 wait(0.1);
Kujira 0:1977c2310ef7 3104
Kujira 0:1977c2310ef7 3105 //Vss=0V
Kujira 0:1977c2310ef7 3106 for ( i = 0; i <= ( noc - 1 ); i++) {
Kujira 0:1977c2310ef7 3107 dac_out( 0, i );//Vss設定 DAC_A~D
Kujira 0:1977c2310ef7 3108 }
Kujira 0:1977c2310ef7 3109
Kujira 0:1977c2310ef7 3110 //ファイルオープン
Kujira 0:1977c2310ef7 3111 mkdir("/sd/mydir", 0777);
Kujira 0:1977c2310ef7 3112
Kujira 0:1977c2310ef7 3113 FILE *fp = fopen("/sd/mydir/iop.csv", "ab+");//ディレクトリとファイル名の指定,追加モード
Kujira 0:1977c2310ef7 3114
Kujira 0:1977c2310ef7 3115 if(fp == NULL) {
Kujira 0:1977c2310ef7 3116 /* ver1.1.3
Kujira 0:1977c2310ef7 3117 gu_fontsize(1);
Kujira 0:1977c2310ef7 3118 gu_cursor(0,2);
Kujira 0:1977c2310ef7 3119 gu_print1("Could not open file for SD card");
Kujira 0:1977c2310ef7 3120 */
Kujira 0:1977c2310ef7 3121 } else {
Kujira 0:1977c2310ef7 3122 for ( i = 0; i <= ( noc - 1 ); i++) {
Kujira 0:1977c2310ef7 3123 fdata[i][0] = iop[i] * 0.01; //1bitあたり0.01uA
Kujira 0:1977c2310ef7 3124 fdata[i][1] = ocp[i] * 0.01; //1bitあたり0.01uA
Kujira 0:1977c2310ef7 3125 fdata[i][2] = voc[i] * 0.001; //1bitあたり0.001V
Kujira 0:1977c2310ef7 3126 }
Kujira 0:1977c2310ef7 3127
Kujira 0:1977c2310ef7 3128 for( i = 0; i <= ( noc - 1 ); i++) {
Kujira 0:1977c2310ef7 3129
Kujira 0:1977c2310ef7 3130 switch ( i ) {
Kujira 0:1977c2310ef7 3131 case 0:
Kujira 0:1977c2310ef7 3132 fprintf(fp, "CH.1");
Kujira 0:1977c2310ef7 3133 break;
Kujira 0:1977c2310ef7 3134 case 1:
Kujira 0:1977c2310ef7 3135 fprintf(fp, "CH.2");
Kujira 0:1977c2310ef7 3136 break;
Kujira 0:1977c2310ef7 3137 case 2:
Kujira 0:1977c2310ef7 3138 fprintf(fp, "CH.3");
Kujira 0:1977c2310ef7 3139 break;
Kujira 0:1977c2310ef7 3140 case 3:
Kujira 0:1977c2310ef7 3141 fprintf(fp, "CH.4");
Kujira 0:1977c2310ef7 3142 break;
Kujira 0:1977c2310ef7 3143 }
Kujira 0:1977c2310ef7 3144
Kujira 0:1977c2310ef7 3145 fprintf(fp, " ");//excel 区切り位置
Kujira 0:1977c2310ef7 3146 if ( R[i] < res_vref && R[0] >= 0 ) {
Kujira 0:1977c2310ef7 3147 fprintf(fp, "%d", R[i]);
Kujira 0:1977c2310ef7 3148 } else {
Kujira 0:1977c2310ef7 3149 fprintf(fp,"OL");
Kujira 0:1977c2310ef7 3150 }
Kujira 0:1977c2310ef7 3151 fprintf(fp, " ");
Kujira 0:1977c2310ef7 3152 fprintf(fp, "%f", fdata[i][0]);
Kujira 0:1977c2310ef7 3153 fprintf(fp, " ");
Kujira 0:1977c2310ef7 3154 fprintf(fp, "%f", fdata[i][1]);
Kujira 0:1977c2310ef7 3155 fprintf(fp, " ");
Kujira 0:1977c2310ef7 3156 fprintf(fp, "%f", fdata[i][2]);
Kujira 0:1977c2310ef7 3157 fprintf(fp, " ");
Kujira 0:1977c2310ef7 3158 }//for
Kujira 0:1977c2310ef7 3159
Kujira 0:1977c2310ef7 3160 //ファイルクローズ
Kujira 0:1977c2310ef7 3161 fprintf(fp, "\n");
Kujira 0:1977c2310ef7 3162 fclose(fp);
Kujira 0:1977c2310ef7 3163 }
Kujira 0:1977c2310ef7 3164
Kujira 0:1977c2310ef7 3165 }
Kujira 0:1977c2310ef7 3166
Kujira 0:1977c2310ef7 3167 /*********************************
Kujira 0:1977c2310ef7 3168
Kujira 0:1977c2310ef7 3169 電流測定(iop/voc共通)
Kujira 0:1977c2310ef7 3170 char amount;//測定数
Kujira 0:1977c2310ef7 3171
Kujira 0:1977c2310ef7 3172 *********************************/
Kujira 0:1977c2310ef7 3173 void meas_current_automode(char amount) //a quantity of measuring channel
Kujira 0:1977c2310ef7 3174 {
Kujira 0:1977c2310ef7 3175 int i;
Kujira 0:1977c2310ef7 3176
Kujira 0:1977c2310ef7 3177 //amount = number_of_channels;
Kujira 0:1977c2310ef7 3178
Kujira 0:1977c2310ef7 3179 //set range
Kujira 0:1977c2310ef7 3180 for ( i = 0; i <= ( amount - 1 ); i++)
Kujira 0:1977c2310ef7 3181 range[i] = 1; //range 10uA
Kujira 0:1977c2310ef7 3182
Kujira 0:1977c2310ef7 3183 wait(0.1);
Kujira 0:1977c2310ef7 3184
Kujira 0:1977c2310ef7 3185 //discharge condenser
Kujira 0:1977c2310ef7 3186 for ( i = 0; i <= ( amount - 1 ); i++)
Kujira 0:1977c2310ef7 3187 houden[i] = 1; //discharge condenser
Kujira 0:1977c2310ef7 3188
Kujira 0:1977c2310ef7 3189 wait(time_discharge);//discharge time
Kujira 0:1977c2310ef7 3190
Kujira 0:1977c2310ef7 3191 ch_num = 0;
Kujira 0:1977c2310ef7 3192 select_ich( ch_num ); //select channel that mesuring current
Kujira 0:1977c2310ef7 3193 houden[0] = 0; //start integral
Kujira 0:1977c2310ef7 3194
Kujira 0:1977c2310ef7 3195 oneshot1.attach ( &flip_ch1, time_integral );
Kujira 0:1977c2310ef7 3196
Kujira 0:1977c2310ef7 3197 if ( amount >= 2 ) {
Kujira 0:1977c2310ef7 3198 wait(0.1);
Kujira 0:1977c2310ef7 3199 houden[1] = 0;
Kujira 0:1977c2310ef7 3200 oneshot2.attach ( &flip_ch2, time_integral );
Kujira 0:1977c2310ef7 3201 }
Kujira 0:1977c2310ef7 3202
Kujira 0:1977c2310ef7 3203 if ( amount >= 3 ) {
Kujira 0:1977c2310ef7 3204 wait(0.1);
Kujira 0:1977c2310ef7 3205 houden[2] = 0;
Kujira 0:1977c2310ef7 3206 oneshot3.attach ( &flip_ch3, time_integral );
Kujira 0:1977c2310ef7 3207 }
Kujira 0:1977c2310ef7 3208
Kujira 0:1977c2310ef7 3209 if ( amount == 4 ) {
Kujira 0:1977c2310ef7 3210 wait(0.1);
Kujira 0:1977c2310ef7 3211 houden[3] = 0;
Kujira 0:1977c2310ef7 3212 oneshot4.attach ( &flip_ch4, time_integral );
Kujira 0:1977c2310ef7 3213 }
Kujira 0:1977c2310ef7 3214
Kujira 0:1977c2310ef7 3215 wait( time_integral + 0.3 );//wait Timeout
Kujira 0:1977c2310ef7 3216
Kujira 0:1977c2310ef7 3217 //discharge condenser
Kujira 0:1977c2310ef7 3218 for ( i = 0; i <= ( amount - 1 ); i++)
Kujira 0:1977c2310ef7 3219 houden[i] = 1; //discharge condenser
Kujira 0:1977c2310ef7 3220
Kujira 0:1977c2310ef7 3221 wait(time_discharge);//discharge time
Kujira 0:1977c2310ef7 3222
Kujira 0:1977c2310ef7 3223 //not discharge condenser
Kujira 0:1977c2310ef7 3224 for ( i = 0; i <= ( amount - 1 ); i++)
Kujira 0:1977c2310ef7 3225 houden[i] = 0;
Kujira 0:1977c2310ef7 3226
Kujira 0:1977c2310ef7 3227 //set range
Kujira 0:1977c2310ef7 3228 for ( i = 0; i <= ( amount - 1 ); i++)
Kujira 0:1977c2310ef7 3229 range[i] = 0; //range 1mA
Kujira 0:1977c2310ef7 3230
Kujira 0:1977c2310ef7 3231 oneshot1.detach();
Kujira 0:1977c2310ef7 3232 oneshot2.detach();
Kujira 0:1977c2310ef7 3233 oneshot3.detach();
Kujira 0:1977c2310ef7 3234 oneshot4.detach();
Kujira 0:1977c2310ef7 3235
Kujira 0:1977c2310ef7 3236 }
Kujira 0:1977c2310ef7 3237
Kujira 0:1977c2310ef7 3238 /*********************************
Kujira 0:1977c2310ef7 3239 DAC 初期設定
Kujira 0:1977c2310ef7 3240 LDACレジスタの設定
Kujira 0:1977c2310ef7 3241 内部リファレンス電圧のセットアップ
Kujira 0:1977c2310ef7 3242 入力シフトレジスタ:
Kujira 0:1977c2310ef7 3243 0011 1000 0000 0000 0000 0001
Kujira 0:1977c2310ef7 3244 (0x3F0001)
Kujira 0:1977c2310ef7 3245 *********************************/
Kujira 0:1977c2310ef7 3246 void dac_init()
Kujira 0:1977c2310ef7 3247 {
Kujira 0:1977c2310ef7 3248
Kujira 0:1977c2310ef7 3249 //内部リファレンス電圧のセットアップ
Kujira 0:1977c2310ef7 3250 wdata[0] = 0x38;
Kujira 0:1977c2310ef7 3251 wdata[1] = 0x00;
Kujira 0:1977c2310ef7 3252 wdata[2] = 0x01;//
Kujira 0:1977c2310ef7 3253
Kujira 0:1977c2310ef7 3254 i2c.write ( addr_dac, wdata, 3);
Kujira 0:1977c2310ef7 3255
Kujira 0:1977c2310ef7 3256 wait(0.1);
Kujira 0:1977c2310ef7 3257
Kujira 0:1977c2310ef7 3258 //LDAC設定
Kujira 0:1977c2310ef7 3259 wdata[0] = 0x30;
Kujira 0:1977c2310ef7 3260 wdata[1] = 0x00;
Kujira 0:1977c2310ef7 3261 wdata[2] = 0x0F;//
Kujira 0:1977c2310ef7 3262
Kujira 0:1977c2310ef7 3263 i2c.write ( addr_dac, wdata, 3);
Kujira 0:1977c2310ef7 3264
Kujira 0:1977c2310ef7 3265 }
Kujira 0:1977c2310ef7 3266
Kujira 0:1977c2310ef7 3267 /**************************************
Kujira 0:1977c2310ef7 3268 DAC 電圧印加
Kujira 0:1977c2310ef7 3269 Vout = 2 * Vref(2.5V) * ( D /2^2 )
Kujira 0:1977c2310ef7 3270 mvolt[mV] 0~5000で設定
Kujira 0:1977c2310ef7 3271 addrは、0x00~03.全チャネルは0x07で指定
Kujira 0:1977c2310ef7 3272 **************************************/
Kujira 0:1977c2310ef7 3273 void dac_out(short mvolt, char addr) //addr DACA:0x00 DACB:0x01 DACC:0x02 DACD:0x03 allDACs:0x07
Kujira 0:1977c2310ef7 3274 {
Kujira 0:1977c2310ef7 3275 char command;//1byte
Kujira 0:1977c2310ef7 3276 short dacdata;//2byte
Kujira 0:1977c2310ef7 3277
Kujira 0:1977c2310ef7 3278 command = 0x02;//write to input register n 仕様書p25参照
Kujira 0:1977c2310ef7 3279
Kujira 0:1977c2310ef7 3280 dacdata = mvolt * 4095 / 2 / dac_vref ; //12bit mvolt[mV] 0~5000で設定する
Kujira 0:1977c2310ef7 3281
Kujira 0:1977c2310ef7 3282 dacdata = dacdata << 4; //後ろ4bitはdon't care bit
Kujira 0:1977c2310ef7 3283
Kujira 0:1977c2310ef7 3284 wdata[0] = command << 3 | addr; //1byte
Kujira 0:1977c2310ef7 3285 wdata[1] = dacdata >> 8 ; //1byte
Kujira 0:1977c2310ef7 3286 wdata[2] = dacdata & 0xFF;//1byte
Kujira 0:1977c2310ef7 3287
Kujira 0:1977c2310ef7 3288 i2c.write(addr_dac, wdata, 3);
Kujira 0:1977c2310ef7 3289
Kujira 0:1977c2310ef7 3290 }
Kujira 0:1977c2310ef7 3291 /*********************************
Kujira 0:1977c2310ef7 3292 ADC測定し、平均値を算出する
Kujira 0:1977c2310ef7 3293
Kujira 0:1977c2310ef7 3294 貰う値:平均値の分母
Kujira 0:1977c2310ef7 3295 渡す値:平均値
Kujira 0:1977c2310ef7 3296 *********************************/
Kujira 0:1977c2310ef7 3297 void compute_adc(int adc_con, long *avg) //(ADCのCONFIG, 計算結果)
Kujira 0:1977c2310ef7 3298 {
Kujira 0:1977c2310ef7 3299
Kujira 0:1977c2310ef7 3300 //short sdata[10];//2byte
Kujira 0:1977c2310ef7 3301 long ldata[10];//4byte
Kujira 0:1977c2310ef7 3302 long nu;//平均値の分子 4byte
Kujira 0:1977c2310ef7 3303 long max;
Kujira 0:1977c2310ef7 3304 long min;
Kujira 0:1977c2310ef7 3305 char i;
Kujira 0:1977c2310ef7 3306 char x;
Kujira 0:1977c2310ef7 3307 //int n;
Kujira 0:1977c2310ef7 3308
Kujira 0:1977c2310ef7 3309 x = 10;
Kujira 0:1977c2310ef7 3310
Kujira 0:1977c2310ef7 3311 wdata[0] = adc_con; //ADC configuration data チャンネルの選択など
Kujira 0:1977c2310ef7 3312 i2c.write( addr_ADC1, wdata, 1 );
Kujira 0:1977c2310ef7 3313 wait(0.1);
Kujira 0:1977c2310ef7 3314
Kujira 0:1977c2310ef7 3315 //平均値の母数の数、測定を実施。
Kujira 0:1977c2310ef7 3316 for( i=0; i<=(x-1); i++) {
Kujira 0:1977c2310ef7 3317
Kujira 0:1977c2310ef7 3318 i2c.read( addr_ADC1 + 0x01, rdata, 3);
Kujira 0:1977c2310ef7 3319 //2byte結合
Kujira 0:1977c2310ef7 3320 ldata[i] = rdata[0] & 0xFF;
Kujira 0:1977c2310ef7 3321 ldata[i] = ( ldata[i] << 8 ) | rdata[1];
Kujira 0:1977c2310ef7 3322
Kujira 0:1977c2310ef7 3323 if ( ldata[i] >= 0x8000 ) {
Kujira 0:1977c2310ef7 3324 ldata[i] = ldata[i] | 0xFFFF0000; //4byteの補数へ変換
Kujira 0:1977c2310ef7 3325 }
Kujira 0:1977c2310ef7 3326
Kujira 0:1977c2310ef7 3327 wait(0.05);
Kujira 0:1977c2310ef7 3328
Kujira 0:1977c2310ef7 3329 }//for
Kujira 0:1977c2310ef7 3330
Kujira 0:1977c2310ef7 3331 //最大値を取得
Kujira 0:1977c2310ef7 3332 max = ldata[0];
Kujira 0:1977c2310ef7 3333 for ( i=0; i<=(x-2); i++) {
Kujira 0:1977c2310ef7 3334 if ( ldata[i+1] > ldata[i]) {
Kujira 0:1977c2310ef7 3335 max = ldata[i+1];
Kujira 0:1977c2310ef7 3336 }
Kujira 0:1977c2310ef7 3337 }
Kujira 0:1977c2310ef7 3338 //最小値
Kujira 0:1977c2310ef7 3339 min = ldata[0];
Kujira 0:1977c2310ef7 3340 for ( i=0; i<=(x-2); i++) {
Kujira 0:1977c2310ef7 3341 if ( ldata[i+1] < ldata[i]) {
Kujira 0:1977c2310ef7 3342 min = ldata[i+1];
Kujira 0:1977c2310ef7 3343 }
Kujira 0:1977c2310ef7 3344 }
Kujira 0:1977c2310ef7 3345
Kujira 0:1977c2310ef7 3346 //平均値
Kujira 0:1977c2310ef7 3347 nu = 0x00000000; //4byte
Kujira 0:1977c2310ef7 3348 for ( i=0; i<=(x-1); i++) {
Kujira 0:1977c2310ef7 3349 nu = nu + ldata[i];
Kujira 0:1977c2310ef7 3350 }
Kujira 0:1977c2310ef7 3351
Kujira 0:1977c2310ef7 3352 *avg = ( nu - max - min ) / ( x - 2 );
Kujira 0:1977c2310ef7 3353
Kujira 0:1977c2310ef7 3354 }
Kujira 0:1977c2310ef7 3355
Kujira 0:1977c2310ef7 3356
Kujira 0:1977c2310ef7 3357 /**************************************
Kujira 0:1977c2310ef7 3358 2バイトを10進数で表示する 0~65535
Kujira 0:1977c2310ef7 3359 format *0.000
Kujira 0:1977c2310ef7 3360 mV→uAへ変換(1/1000)
Kujira 0:1977c2310ef7 3361 プリアンプ GAIN 1/5
Kujira 0:1977c2310ef7 3362 ADC_LSB:0.25mV
Kujira 0:1977c2310ef7 3363 積分時間 2s
Kujira 0:1977c2310ef7 3364 容量 20uF
Kujira 0:1977c2310ef7 3365 **************************************/
Kujira 0:1977c2310ef7 3366 void gu_putdeci(float* idata)
Kujira 0:1977c2310ef7 3367 {
Kujira 0:1977c2310ef7 3368
Kujira 0:1977c2310ef7 3369 float uA; //ver1.1.4
Kujira 0:1977c2310ef7 3370 long y; //ver1.1.4
Kujira 0:1977c2310ef7 3371 long x; //ver1.1.4
Kujira 0:1977c2310ef7 3372
Kujira 0:1977c2310ef7 3373 //千分の一、四捨五入。
Kujira 0:1977c2310ef7 3374 if ( *idata > 0 ) {
Kujira 0:1977c2310ef7 3375 uA = *idata + 0.5;
Kujira 0:1977c2310ef7 3376 } else {
Kujira 0:1977c2310ef7 3377 uA = *idata - 0.5;
Kujira 0:1977c2310ef7 3378 }
Kujira 0:1977c2310ef7 3379
Kujira 0:1977c2310ef7 3380 x = uA; //小数点以下切り捨て
Kujira 0:1977c2310ef7 3381
Kujira 0:1977c2310ef7 3382 //四捨五入 up to here
Kujira 0:1977c2310ef7 3383
Kujira 0:1977c2310ef7 3384 //プラスマイナスの表示
Kujira 0:1977c2310ef7 3385 if( x >= 0 ) {
Kujira 0:1977c2310ef7 3386 wdata[0] = 0x2B;//ascii "+"
Kujira 0:1977c2310ef7 3387 i2c.write(addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 3388
Kujira 0:1977c2310ef7 3389 y = x;
Kujira 0:1977c2310ef7 3390
Kujira 0:1977c2310ef7 3391 } else {
Kujira 0:1977c2310ef7 3392 wdata[0] = 0x2D;//ascii "-"
Kujira 0:1977c2310ef7 3393 i2c.write(addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 3394
Kujira 0:1977c2310ef7 3395 y = ( ~x ) + 0x01;//2の補数
Kujira 0:1977c2310ef7 3396 }
Kujira 0:1977c2310ef7 3397
Kujira 0:1977c2310ef7 3398 //y = y * 5 * 0.25;//プリアンプのGAINが1/5なのでここで5倍.ADC14bit分解能で、1bitあたり0.25mv
Kujira 0:1977c2310ef7 3399
Kujira 0:1977c2310ef7 3400 wdata[0] = (( y / 1000 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3401
Kujira 0:1977c2310ef7 3402 if( wdata[0] == 0x30 )//2桁目が零の場合、"0"を表示しない。
Kujira 0:1977c2310ef7 3403 wdata[0] = 0x20;
Kujira 0:1977c2310ef7 3404
Kujira 0:1977c2310ef7 3405 wdata[1] = (( y / 100 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3406 wdata[2] = 0x2E;//ASCII "."
Kujira 0:1977c2310ef7 3407 wdata[3] = (( y / 10 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3408 wdata[4] = ( y % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3409
Kujira 3:639e05fcfa0b 3410 //ver1.2.5
Kujira 3:639e05fcfa0b 3411 //i2c.write(addr_gu, wdata, 5);
Kujira 3:639e05fcfa0b 3412 //gu_print1("uA");
Kujira 3:639e05fcfa0b 3413
Kujira 3:639e05fcfa0b 3414 if ( *idata > O_L * -100 && *idata < O_L * 100 ){
Kujira 3:639e05fcfa0b 3415
Kujira 3:639e05fcfa0b 3416 i2c.write(addr_gu, wdata, 5);
Kujira 3:639e05fcfa0b 3417 gu_print1("uA");
Kujira 3:639e05fcfa0b 3418
Kujira 3:639e05fcfa0b 3419 }else{
Kujira 3:639e05fcfa0b 3420
Kujira 3:639e05fcfa0b 3421 gu_print1("O.L");
Kujira 3:639e05fcfa0b 3422
Kujira 3:639e05fcfa0b 3423 }
Kujira 3:639e05fcfa0b 3424 //upto
Kujira 0:1977c2310ef7 3425
Kujira 0:1977c2310ef7 3426 }
Kujira 0:1977c2310ef7 3427
Kujira 0:1977c2310ef7 3428 /**************************************
Kujira 0:1977c2310ef7 3429 2バイトを10進数で表示する 0~65535
Kujira 0:1977c2310ef7 3430 format *0.000
Kujira 0:1977c2310ef7 3431 mV→uAへ変換(1/1000)
Kujira 0:1977c2310ef7 3432 プリアンプ GAIN 1/5
Kujira 0:1977c2310ef7 3433 ADC_LSB:0.25mV
Kujira 0:1977c2310ef7 3434 シャント抵抗1kΩ
Kujira 0:1977c2310ef7 3435 **************************************/
Kujira 0:1977c2310ef7 3436 void gu_putdeci_mA(float* idata)
Kujira 0:1977c2310ef7 3437 {
Kujira 0:1977c2310ef7 3438 float uA; //ver1.1.4
Kujira 0:1977c2310ef7 3439 long y; //ver1.1.4
Kujira 0:1977c2310ef7 3440 long x; //ver1.1.4
Kujira 0:1977c2310ef7 3441
Kujira 0:1977c2310ef7 3442 //千分の一、四捨五入。
Kujira 0:1977c2310ef7 3443 if ( *idata > 0 ) {
Kujira 0:1977c2310ef7 3444 uA = *idata + 0.5;
Kujira 0:1977c2310ef7 3445 } else {
Kujira 0:1977c2310ef7 3446 uA = *idata - 0.5;
Kujira 0:1977c2310ef7 3447 }
Kujira 0:1977c2310ef7 3448
Kujira 0:1977c2310ef7 3449 x = uA; //小数点以下切り捨て
Kujira 0:1977c2310ef7 3450
Kujira 0:1977c2310ef7 3451 //四捨五入 up to here
Kujira 0:1977c2310ef7 3452
Kujira 0:1977c2310ef7 3453 //プラスマイナスの表示
Kujira 0:1977c2310ef7 3454 if( x >= 0 ) {
Kujira 0:1977c2310ef7 3455 wdata[0] = 0x2B;//ascii "+"
Kujira 0:1977c2310ef7 3456 i2c.write(addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 3457
Kujira 0:1977c2310ef7 3458 y = x;
Kujira 0:1977c2310ef7 3459
Kujira 0:1977c2310ef7 3460 } else {
Kujira 0:1977c2310ef7 3461 wdata[0] = 0x2D;//ascii "-"
Kujira 0:1977c2310ef7 3462 i2c.write(addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 3463
Kujira 0:1977c2310ef7 3464 y = ( ~x ) + 0x01;//2の補数
Kujira 0:1977c2310ef7 3465 }
Kujira 0:1977c2310ef7 3466
Kujira 0:1977c2310ef7 3467 //y = y * 5 * 0.25;//プリアンプのGAINが1/5なのでここで5倍.ADC14bit分解能で、1bitあたり0.25mv
Kujira 0:1977c2310ef7 3468
Kujira 0:1977c2310ef7 3469 /*
Kujira 0:1977c2310ef7 3470 wdata[0] = (( *y / 100000 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3471
Kujira 0:1977c2310ef7 3472 if( wdata[0] == 0x30 )//3桁目が零の場合、"0"を表示しない。
Kujira 0:1977c2310ef7 3473 wdata[0] = 0x20;
Kujira 0:1977c2310ef7 3474 */
Kujira 0:1977c2310ef7 3475
Kujira 0:1977c2310ef7 3476 wdata[0] = (( y / 1000 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3477
Kujira 0:1977c2310ef7 3478 if( wdata[0] == 0x30 )//2桁目が零の場合、"0"を表示しない。
Kujira 0:1977c2310ef7 3479 wdata[0] = 0x20;
Kujira 0:1977c2310ef7 3480
Kujira 0:1977c2310ef7 3481 wdata[1] = (( y / 100 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3482 wdata[2] = 0x2E;//ASCII "."
Kujira 0:1977c2310ef7 3483 wdata[3] = (( y / 10 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3484 wdata[4] = ( y % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3485
Kujira 0:1977c2310ef7 3486 i2c.write(addr_gu, wdata, 5);
Kujira 0:1977c2310ef7 3487
Kujira 0:1977c2310ef7 3488 gu_print1("mA");
Kujira 0:1977c2310ef7 3489
Kujira 0:1977c2310ef7 3490 }
Kujira 0:1977c2310ef7 3491
Kujira 0:1977c2310ef7 3492 /**************************************
Kujira 0:1977c2310ef7 3493 2バイトを10進数で表示する 0~65535
Kujira 0:1977c2310ef7 3494 1/1000倍 format *0.000
Kujira 0:1977c2310ef7 3495 mV→V Ω→kΩ
Kujira 0:1977c2310ef7 3496 **************************************/
Kujira 0:1977c2310ef7 3497 void gu_putdeck(short* x)
Kujira 0:1977c2310ef7 3498 {
Kujira 0:1977c2310ef7 3499
Kujira 0:1977c2310ef7 3500 short num;
Kujira 0:1977c2310ef7 3501
Kujira 0:1977c2310ef7 3502 //プラスマイナスの表示
Kujira 0:1977c2310ef7 3503 if( *x >= 0 ) {
Kujira 0:1977c2310ef7 3504 wdata[0] = 0x2B;//ascii "+"
Kujira 0:1977c2310ef7 3505 i2c.write(addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 3506 num = *x;
Kujira 0:1977c2310ef7 3507
Kujira 0:1977c2310ef7 3508 } else {
Kujira 0:1977c2310ef7 3509 wdata[0] = 0x2D;//ascii "-"
Kujira 0:1977c2310ef7 3510 i2c.write(addr_gu, wdata, 1);
Kujira 0:1977c2310ef7 3511
Kujira 0:1977c2310ef7 3512 //*x = ( ~*x ) + 0x01;//2の補数
Kujira 0:1977c2310ef7 3513 num = *x * -1;
Kujira 0:1977c2310ef7 3514 }
Kujira 0:1977c2310ef7 3515
Kujira 0:1977c2310ef7 3516 wdata[0] = (( num / 10000 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3517
Kujira 0:1977c2310ef7 3518 if( wdata[0] == 0x30 )//2桁目が零の場合、"0"を表示しない。
Kujira 0:1977c2310ef7 3519 wdata[0] = 0x20;
Kujira 0:1977c2310ef7 3520
Kujira 0:1977c2310ef7 3521 wdata[1] = (( num / 1000 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3522 wdata[2] = 0x2E;//ASCII "."
Kujira 0:1977c2310ef7 3523 wdata[3] = (( num / 100 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3524 wdata[4] = (( num / 10 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3525 //wdata[5] = ( num % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3526
Kujira 0:1977c2310ef7 3527 i2c.write(addr_gu, wdata, 5);
Kujira 0:1977c2310ef7 3528
Kujira 0:1977c2310ef7 3529 }
Kujira 0:1977c2310ef7 3530
Kujira 0:1977c2310ef7 3531 /********************************
Kujira 0:1977c2310ef7 3532
Kujira 0:1977c2310ef7 3533 判定 LED点灯
Kujira 0:1977c2310ef7 3534
Kujira 0:1977c2310ef7 3535 ********************************/
Kujira 0:1977c2310ef7 3536 void hantei(char noc)
Kujira 0:1977c2310ef7 3537 {
Kujira 0:1977c2310ef7 3538 int i;
Kujira 0:1977c2310ef7 3539
Kujira 0:1977c2310ef7 3540 //エラーフラグ
Kujira 0:1977c2310ef7 3541 for ( i=0; i<= 3 ; i++) {
Kujira 0:1977c2310ef7 3542 err_f[i] = 0;
Kujira 0:1977c2310ef7 3543 }
Kujira 0:1977c2310ef7 3544
Kujira 0:1977c2310ef7 3545 //ver1.2
Kujira 0:1977c2310ef7 3546 if (DEB_EN == 1) {
Kujira 0:1977c2310ef7 3547 voc[0] = 3100;//[mV]
Kujira 0:1977c2310ef7 3548 ocp[0] = -0.4*100;//[uA] 0.1uAのときocp[]の値は10
Kujira 0:1977c2310ef7 3549 iop[0] = 16.5*100;//[uA] 0.1uAのときicp[]の値は10
Kujira 0:1977c2310ef7 3550 voc[1] = 3100;//[V]
Kujira 0:1977c2310ef7 3551 ocp[1] = 0.4*100;//[uA]
Kujira 0:1977c2310ef7 3552 iop[1] = 16.5*100;//[uA]
Kujira 0:1977c2310ef7 3553 }
Kujira 0:1977c2310ef7 3554 //upto
Kujira 0:1977c2310ef7 3555
Kujira 0:1977c2310ef7 3556 for ( i = 0; i <= ( noc - 1 ); i++) {
Kujira 0:1977c2310ef7 3557
Kujira 0:1977c2310ef7 3558 /*ver1.1.3 規格設置値=0の場合は判定しない*/
Kujira 0:1977c2310ef7 3559 if( voc[i] < calinfo.low_limit_voc && calinfo.low_limit_voc != 0) {
Kujira 0:1977c2310ef7 3560 err_f[i] = 1;
Kujira 0:1977c2310ef7 3561 }
Kujira 0:1977c2310ef7 3562
Kujira 0:1977c2310ef7 3563 if( iop[i] < calinfo.low_limit_iop ) {
Kujira 0:1977c2310ef7 3564 err_f[i] = 1;
Kujira 0:1977c2310ef7 3565 }
Kujira 0:1977c2310ef7 3566
Kujira 0:1977c2310ef7 3567 if( ocp[i] > calinfo.low_limit_ocp ) {
Kujira 0:1977c2310ef7 3568 err_f[i] = 1;
Kujira 0:1977c2310ef7 3569 }
Kujira 0:1977c2310ef7 3570
Kujira 0:1977c2310ef7 3571 //ver1.2.2
Kujira 0:1977c2310ef7 3572 if( ocp[i] < calinfo.up_limit_ocp && calinfo.up_limit_ocp != 0) {
Kujira 0:1977c2310ef7 3573 err_f[i] = 1;
Kujira 0:1977c2310ef7 3574 }
Kujira 0:1977c2310ef7 3575
Kujira 0:1977c2310ef7 3576 if( R[i] < calinfo.low_limit_resistor && calinfo.low_limit_resistor != 0 ) {
Kujira 0:1977c2310ef7 3577 err_f[i] = 1;
Kujira 0:1977c2310ef7 3578 }
Kujira 0:1977c2310ef7 3579
Kujira 0:1977c2310ef7 3580 if( R[i] > calinfo.up_limit_resistor && calinfo.up_limit_resistor != 0 ) {
Kujira 0:1977c2310ef7 3581 err_f[i] = 1;
Kujira 0:1977c2310ef7 3582 }
Kujira 0:1977c2310ef7 3583
Kujira 0:1977c2310ef7 3584 if( err_f[i] == 1) {
Kujira 0:1977c2310ef7 3585 led_red[i] = 1;
Kujira 0:1977c2310ef7 3586 } else {
Kujira 0:1977c2310ef7 3587 led_green[i] = 1;
Kujira 0:1977c2310ef7 3588 }
Kujira 0:1977c2310ef7 3589
Kujira 0:1977c2310ef7 3590 if ( SEQ_EN == 1 && err_f[i] == 0 ) {
Kujira 4:24481ebef1c4 3591 /*** ver3
Kujira 0:1977c2310ef7 3592 seq_hantei[i] = 1;
Kujira 4:24481ebef1c4 3593 ***/
Kujira 4:24481ebef1c4 3594 seq_out[i] = 1;
Kujira 0:1977c2310ef7 3595 }
Kujira 0:1977c2310ef7 3596
Kujira 0:1977c2310ef7 3597 //ver1.2.3
Kujira 0:1977c2310ef7 3598 char *print_text;
Kujira 0:1977c2310ef7 3599
Kujira 0:1977c2310ef7 3600 if(DEB_EN == 1) {
Kujira 0:1977c2310ef7 3601
Kujira 0:1977c2310ef7 3602 gu_fontsize(1);
Kujira 0:1977c2310ef7 3603 gu_cursor(0,2);
Kujira 0:1977c2310ef7 3604 gu_print1(" ");
Kujira 0:1977c2310ef7 3605
Kujira 0:1977c2310ef7 3606 if(err_f[i] == 1) {
Kujira 0:1977c2310ef7 3607
Kujira 0:1977c2310ef7 3608 switch(i){
Kujira 0:1977c2310ef7 3609 case 0:
Kujira 0:1977c2310ef7 3610 print_text="FAIL DUT1";
Kujira 0:1977c2310ef7 3611 break;
Kujira 0:1977c2310ef7 3612 case 1:
Kujira 0:1977c2310ef7 3613 print_text="FAIL DUT2";
Kujira 0:1977c2310ef7 3614 break;
Kujira 0:1977c2310ef7 3615 }
Kujira 0:1977c2310ef7 3616
Kujira 0:1977c2310ef7 3617 gu_fontsize(1);
Kujira 0:1977c2310ef7 3618 gu_cursor(0,2);
Kujira 0:1977c2310ef7 3619 gu_print1(print_text);
Kujira 0:1977c2310ef7 3620 wait(1);
Kujira 0:1977c2310ef7 3621 }
Kujira 0:1977c2310ef7 3622 if(err_f[i] == 0) {
Kujira 0:1977c2310ef7 3623
Kujira 0:1977c2310ef7 3624
Kujira 0:1977c2310ef7 3625 switch(i){
Kujira 0:1977c2310ef7 3626 case 0:
Kujira 0:1977c2310ef7 3627 print_text="PASS DUT1";
Kujira 0:1977c2310ef7 3628 break;
Kujira 0:1977c2310ef7 3629 case 1:
Kujira 0:1977c2310ef7 3630 print_text="PASS DUT2";
Kujira 0:1977c2310ef7 3631 break;
Kujira 0:1977c2310ef7 3632 }
Kujira 0:1977c2310ef7 3633
Kujira 0:1977c2310ef7 3634 gu_fontsize(1);
Kujira 0:1977c2310ef7 3635 gu_cursor(0,2);
Kujira 0:1977c2310ef7 3636 gu_print1(print_text);
Kujira 0:1977c2310ef7 3637
Kujira 0:1977c2310ef7 3638 wait(1);
Kujira 0:1977c2310ef7 3639 }
Kujira 0:1977c2310ef7 3640 }
Kujira 0:1977c2310ef7 3641 //upto
Kujira 0:1977c2310ef7 3642
Kujira 0:1977c2310ef7 3643 }//for
Kujira 0:1977c2310ef7 3644
Kujira 0:1977c2310ef7 3645
Kujira 0:1977c2310ef7 3646 }
Kujira 0:1977c2310ef7 3647
Kujira 4:24481ebef1c4 3648 /*******************************************************************************
Kujira 0:1977c2310ef7 3649
Kujira 0:1977c2310ef7 3650 measure voltage
Kujira 0:1977c2310ef7 3651 測定CHを指定して、電圧値Rを返す
Kujira 0:1977c2310ef7 3652 char ch 0~3 -> 1ch ~ 4ch
Kujira 0:1977c2310ef7 3653
Kujira 4:24481ebef1c4 3654 ver3.0.0 リレー制御シーケンスを追加
Kujira 4:24481ebef1c4 3655
Kujira 4:24481ebef1c4 3656 *******************************************************************************/
Kujira 0:1977c2310ef7 3657 short meas_voltage(char ch)//ch 0~3 -> 1ch ~ 4ch
Kujira 0:1977c2310ef7 3658 {
Kujira 0:1977c2310ef7 3659 char com;
Kujira 0:1977c2310ef7 3660 short sdata;
Kujira 0:1977c2310ef7 3661
Kujira 0:1977c2310ef7 3662 switch(ch) {
Kujira 0:1977c2310ef7 3663 case 0:
Kujira 4:24481ebef1c4 3664 /*** v3 debag *************/
Kujira 4:24481ebef1c4 3665 rlen[4] = 1; //RLEN5="H"
Kujira 4:24481ebef1c4 3666 wait(ton_rr);
Kujira 4:24481ebef1c4 3667 /**************************/
Kujira 4:24481ebef1c4 3668
Kujira 0:1977c2310ef7 3669 com = adc_config(2,0);//ch1(adc),12bit
Kujira 0:1977c2310ef7 3670 i2c.write( addr_ADC1, &com, 1);
Kujira 0:1977c2310ef7 3671 wait(0.1);
Kujira 0:1977c2310ef7 3672 sdata = read_adc(addr_ADC1);
Kujira 0:1977c2310ef7 3673 break;
Kujira 4:24481ebef1c4 3674
Kujira 0:1977c2310ef7 3675 case 1:
Kujira 4:24481ebef1c4 3676
Kujira 4:24481ebef1c4 3677 /*** v3 debag *************/
Kujira 4:24481ebef1c4 3678 rlen[5] = 1; //RLEN6="H"
Kujira 4:24481ebef1c4 3679 wait(ton_rr);
Kujira 4:24481ebef1c4 3680 /**************************/
Kujira 4:24481ebef1c4 3681
Kujira 0:1977c2310ef7 3682 com = adc_config(3,0);//ch2(adc),12bit
Kujira 0:1977c2310ef7 3683 i2c.write( addr_ADC1, &com, 1);
Kujira 0:1977c2310ef7 3684 wait(0.1);
Kujira 0:1977c2310ef7 3685 sdata = read_adc(addr_ADC1);
Kujira 0:1977c2310ef7 3686 break;
Kujira 4:24481ebef1c4 3687
Kujira 0:1977c2310ef7 3688 case 2:
Kujira 4:24481ebef1c4 3689
Kujira 4:24481ebef1c4 3690 /*** v3 debag *************/
Kujira 4:24481ebef1c4 3691 rlen[6] = 1; //RLEN7="H"
Kujira 4:24481ebef1c4 3692 wait(ton_rr);
Kujira 4:24481ebef1c4 3693 /**************************/
Kujira 4:24481ebef1c4 3694
Kujira 0:1977c2310ef7 3695 com = adc_config(2,0);//ch1(adc),12bit
Kujira 0:1977c2310ef7 3696 i2c.write( addr_ADC2, &com, 1);
Kujira 0:1977c2310ef7 3697 wait(0.1);
Kujira 0:1977c2310ef7 3698 sdata = read_adc(addr_ADC2);
Kujira 0:1977c2310ef7 3699 break;
Kujira 4:24481ebef1c4 3700
Kujira 0:1977c2310ef7 3701 case 3:
Kujira 4:24481ebef1c4 3702
Kujira 4:24481ebef1c4 3703 /*** v3 debag *************/
Kujira 4:24481ebef1c4 3704 rlen[7] = 1; //RLEN8="H"
Kujira 4:24481ebef1c4 3705 wait(ton_rr);
Kujira 4:24481ebef1c4 3706 /**************************/
Kujira 4:24481ebef1c4 3707
Kujira 0:1977c2310ef7 3708 com = adc_config(3,0);//ch2(adc),12bit
Kujira 0:1977c2310ef7 3709 i2c.write( addr_ADC2, &com, 1);
Kujira 0:1977c2310ef7 3710 wait(0.1);
Kujira 0:1977c2310ef7 3711 sdata = read_adc(addr_ADC2);
Kujira 0:1977c2310ef7 3712 break;
Kujira 4:24481ebef1c4 3713
Kujira 0:1977c2310ef7 3714 }// end switch
Kujira 4:24481ebef1c4 3715
Kujira 4:24481ebef1c4 3716 /*** ver3 ***/
Kujira 4:24481ebef1c4 3717 //電圧測定用リレーを全てオフ
Kujira 4:24481ebef1c4 3718 for (int i = 4; i <= 7; i++){
Kujira 4:24481ebef1c4 3719 rlen[i] = 0;
Kujira 4:24481ebef1c4 3720 wait(toff_rr);
Kujira 4:24481ebef1c4 3721 }
Kujira 4:24481ebef1c4 3722 /************/
Kujira 0:1977c2310ef7 3723
Kujira 0:1977c2310ef7 3724 //プリアンプ倍率を代入して、電圧値を算出する(単位はmV)
Kujira 0:1977c2310ef7 3725 sdata = sdata * 5;//プリアンプ倍率
Kujira 0:1977c2310ef7 3726
Kujira 0:1977c2310ef7 3727 return ( sdata );
Kujira 0:1977c2310ef7 3728 }
Kujira 0:1977c2310ef7 3729
Kujira 0:1977c2310ef7 3730
Kujira 0:1977c2310ef7 3731 /*********************************
Kujira 0:1977c2310ef7 3732
Kujira 0:1977c2310ef7 3733 measure resistor
Kujira 0:1977c2310ef7 3734 測定CHを指定して、抵抗測定値Rを返す
Kujira 0:1977c2310ef7 3735 char ch 0~3 -> 1ch ~ 4ch
Kujira 0:1977c2310ef7 3736
Kujira 0:1977c2310ef7 3737 *********************************/
Kujira 0:1977c2310ef7 3738 short meas_resistor(char ch)//ch 0~3 -> 1ch ~ 4ch
Kujira 0:1977c2310ef7 3739 {
Kujira 0:1977c2310ef7 3740 char com;
Kujira 0:1977c2310ef7 3741 short sdata;
Kujira 0:1977c2310ef7 3742
Kujira 0:1977c2310ef7 3743 switch(ch) {
Kujira 0:1977c2310ef7 3744 case 0:
Kujira 0:1977c2310ef7 3745 //ver1.2.0
Kujira 0:1977c2310ef7 3746 if (RL_EN == 1) {
Kujira 0:1977c2310ef7 3747 io[6] = 1; //外付けリレーON
Kujira 0:1977c2310ef7 3748 wait(TIME_RELAY_ON);
Kujira 0:1977c2310ef7 3749 }
Kujira 0:1977c2310ef7 3750 //up to here
Kujira 0:1977c2310ef7 3751
Kujira 0:1977c2310ef7 3752 com = adc_config(0,0);//ch1(adc),12bit
Kujira 0:1977c2310ef7 3753 i2c.write( addr_ADC1, &com, 1);
Kujira 0:1977c2310ef7 3754 wait(0.1);
Kujira 0:1977c2310ef7 3755 sdata = read_adc(addr_ADC1);
Kujira 0:1977c2310ef7 3756 //ver1.2.0
Kujira 0:1977c2310ef7 3757 if (RL_EN == 1) {
Kujira 0:1977c2310ef7 3758 io[6] = 0 ;
Kujira 0:1977c2310ef7 3759 }
Kujira 0:1977c2310ef7 3760
Kujira 0:1977c2310ef7 3761 break;
Kujira 0:1977c2310ef7 3762
Kujira 0:1977c2310ef7 3763 case 1:
Kujira 0:1977c2310ef7 3764 //ver1.2.0
Kujira 0:1977c2310ef7 3765 if (RL_EN == 1) {
Kujira 0:1977c2310ef7 3766 io[7] = 1; //外付けリレーON
Kujira 0:1977c2310ef7 3767 wait(TIME_RELAY_ON);
Kujira 0:1977c2310ef7 3768 }
Kujira 0:1977c2310ef7 3769 //up to here
Kujira 0:1977c2310ef7 3770
Kujira 0:1977c2310ef7 3771 com = adc_config(1,0);//ch2(adc),12bit
Kujira 0:1977c2310ef7 3772 i2c.write( addr_ADC1, &com, 1);
Kujira 0:1977c2310ef7 3773 wait(0.1);
Kujira 0:1977c2310ef7 3774 sdata = read_adc(addr_ADC1);
Kujira 0:1977c2310ef7 3775 //ver1.2.0
Kujira 0:1977c2310ef7 3776 if (RL_EN == 1) {
Kujira 0:1977c2310ef7 3777 io[7] = 0;
Kujira 0:1977c2310ef7 3778 }
Kujira 0:1977c2310ef7 3779
Kujira 0:1977c2310ef7 3780 break;
Kujira 0:1977c2310ef7 3781
Kujira 0:1977c2310ef7 3782 case 2:
Kujira 0:1977c2310ef7 3783 com = adc_config(0,0);//ch1(adc),12bit
Kujira 0:1977c2310ef7 3784 i2c.write( addr_ADC2, &com, 1);
Kujira 0:1977c2310ef7 3785 wait(0.1);
Kujira 0:1977c2310ef7 3786 sdata = read_adc(addr_ADC2);
Kujira 0:1977c2310ef7 3787 break;
Kujira 0:1977c2310ef7 3788 case 3:
Kujira 0:1977c2310ef7 3789 com = adc_config(1,0);//ch2(adc),12bit
Kujira 0:1977c2310ef7 3790 i2c.write( addr_ADC2, &com, 1);
Kujira 0:1977c2310ef7 3791 wait(0.1);
Kujira 0:1977c2310ef7 3792 sdata = read_adc(addr_ADC2);
Kujira 0:1977c2310ef7 3793 break;
Kujira 0:1977c2310ef7 3794 }// end switch
Kujira 0:1977c2310ef7 3795
Kujira 0:1977c2310ef7 3796 //検出用抵抗値を代入して、測定抵抗値を算出する(単位はmV,Ω)
Kujira 0:1977c2310ef7 3797 if ( sdata < res_vref ) {
Kujira 0:1977c2310ef7 3798 sdata =( rsense * sdata ) / ( res_vref - sdata);
Kujira 0:1977c2310ef7 3799 } else {
Kujira 0:1977c2310ef7 3800 sdata = res_vref;//overload
Kujira 0:1977c2310ef7 3801 }
Kujira 0:1977c2310ef7 3802
Kujira 0:1977c2310ef7 3803
Kujira 0:1977c2310ef7 3804 return ( sdata );
Kujira 0:1977c2310ef7 3805 }
Kujira 0:1977c2310ef7 3806
Kujira 0:1977c2310ef7 3807
Kujira 0:1977c2310ef7 3808 /*********************************
Kujira 0:1977c2310ef7 3809
Kujira 0:1977c2310ef7 3810 display resistor
Kujira 0:1977c2310ef7 3811 測定抵抗値を表示する
Kujira 0:1977c2310ef7 3812
Kujira 0:1977c2310ef7 3813 *********************************/
Kujira 0:1977c2310ef7 3814 void display_resistor(short sdata)//測定値を表示する。
Kujira 0:1977c2310ef7 3815 {
Kujira 0:1977c2310ef7 3816 if ( sdata < res_vref && sdata >= 0 ) {
Kujira 0:1977c2310ef7 3817 gu_putdec(&sdata);
Kujira 0:1977c2310ef7 3818 } else {
Kujira 0:1977c2310ef7 3819 gu_print1(" OL ");//overload
Kujira 0:1977c2310ef7 3820 }
Kujira 0:1977c2310ef7 3821 gu_onebyte(0xEA);//ohm
Kujira 0:1977c2310ef7 3822 }
Kujira 0:1977c2310ef7 3823
Kujira 0:1977c2310ef7 3824 /**************************************
Kujira 0:1977c2310ef7 3825 4バイトを10進数で表示する 0~9999
Kujira 0:1977c2310ef7 3826 **************************************/
Kujira 0:1977c2310ef7 3827 void gu_putdec(short* x)
Kujira 0:1977c2310ef7 3828 {
Kujira 0:1977c2310ef7 3829
Kujira 0:1977c2310ef7 3830 char cmd[4];
Kujira 0:1977c2310ef7 3831
Kujira 0:1977c2310ef7 3832 //cmd[0] = (( *x / 100000 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3833 cmd[0] = (( *x / 1000 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3834 cmd[1] = (( *x / 100 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3835 cmd[2] = (( *x / 10 ) % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3836 cmd[3] = ( *x % 10 ) + 0x30;
Kujira 0:1977c2310ef7 3837
Kujira 0:1977c2310ef7 3838 i2c.write(addr_gu, cmd, 4);
Kujira 0:1977c2310ef7 3839
Kujira 0:1977c2310ef7 3840 }
Kujira 0:1977c2310ef7 3841 /*********************************
Kujira 0:1977c2310ef7 3842
Kujira 0:1977c2310ef7 3843 LED 照度
Kujira 0:1977c2310ef7 3844 設定読込~反映
Kujira 0:1977c2310ef7 3845 //メモリから設定値を読み出して、LEDのPWMのDutyを設定する
Kujira 0:1977c2310ef7 3846 //LED1設定値&LED2設定値の計2Byte読込
Kujira 0:1977c2310ef7 3847
Kujira 0:1977c2310ef7 3848 *********************************/
Kujira 0:1977c2310ef7 3849 void read_syoudo(char* c)
Kujira 0:1977c2310ef7 3850 {
Kujira 4:24481ebef1c4 3851 //char cmd; //gu-DへのI2Cコマンド用配列 1byte0
Kujira 0:1977c2310ef7 3852 //char csyoudo[4];//led出力用pwm duty 設定比1バイト255段階
Kujira 4:24481ebef1c4 3853
Kujira 0:1977c2310ef7 3854 float duty_pwm; //pwm パーセンテージ
Kujira 0:1977c2310ef7 3855 int i;
Kujira 0:1977c2310ef7 3856
Kujira 0:1977c2310ef7 3857 //メモリ10h番地(照度設定データ)読み出し
Kujira 4:24481ebef1c4 3858 //cmd[0] = 0x10; //ver3
Kujira 4:24481ebef1c4 3859 //Sequential Read
Kujira 4:24481ebef1c4 3860
Kujira 4:24481ebef1c4 3861 i2c.write (eeprom_adrs, adrs_syoudo, 2,true); //ver3 repeated start,true - do not send stop condition
Kujira 4:24481ebef1c4 3862 //i2c.write (slave_adrs, &cmd, 1,true); //ver3 send 1 byte remove stop condition
Kujira 4:24481ebef1c4 3863 slave_adrs = eeprom_adrs + 0x01; //ver3 read mode
Kujira 4:24481ebef1c4 3864 i2c.read (slave_adrs, rdata, 4); //read 4 byte
Kujira 0:1977c2310ef7 3865
Kujira 0:1977c2310ef7 3866 for ( i = 0; i <=3; i++) {
Kujira 0:1977c2310ef7 3867 c[i] = rdata[i];
Kujira 0:1977c2310ef7 3868 }
Kujira 0:1977c2310ef7 3869
Kujira 0:1977c2310ef7 3870 //set pwm duty
Kujira 0:1977c2310ef7 3871 for ( i = 0; i <= ( number_of_channels - 1 ); i++) {
Kujira 0:1977c2310ef7 3872
Kujira 0:1977c2310ef7 3873 if(c[i] == 0x00) {
Kujira 0:1977c2310ef7 3874 c[i] = 0x32;
Kujira 0:1977c2310ef7 3875 }
Kujira 0:1977c2310ef7 3876
Kujira 0:1977c2310ef7 3877 duty_pwm = COP * c[i];
Kujira 0:1977c2310ef7 3878
Kujira 0:1977c2310ef7 3879 leds[i].write (duty_pwm);//Set Duty
Kujira 0:1977c2310ef7 3880 }
Kujira 0:1977c2310ef7 3881 }
Kujira 0:1977c2310ef7 3882 /*********************************
Kujira 0:1977c2310ef7 3883
Kujira 0:1977c2310ef7 3884 LED 照度調整 (Main)
Kujira 0:1977c2310ef7 3885
Kujira 0:1977c2310ef7 3886 *********************************/
Kujira 0:1977c2310ef7 3887 void adjust_illumination()
Kujira 0:1977c2310ef7 3888 {
Kujira 0:1977c2310ef7 3889 char cmd_gu[32] ; //gu-DへのI2Cコマンド用配列 1byte0
Kujira 0:1977c2310ef7 3890 //char *pcmd = cmd_gu;
Kujira 0:1977c2310ef7 3891 //char msg;
Kujira 0:1977c2310ef7 3892 //char *pmsg = &msg;
Kujira 0:1977c2310ef7 3893 char crdata[3];
Kujira 0:1977c2310ef7 3894 char cswnum; //SW_No. sw1->0x00 ~~ sw32->0x1F gu-D スイッチNo.
Kujira 0:1977c2310ef7 3895 char cswdata; // 0x00 or 0x01 ONかOFFか
Kujira 0:1977c2310ef7 3896 char *pcswnum = &cswnum;
Kujira 0:1977c2310ef7 3897 char *pcswdata = &cswdata;
Kujira 0:1977c2310ef7 3898 char csyoudo[4];//led出力用pwm duty 設定比1バイト255段階
Kujira 0:1977c2310ef7 3899 char ch;
Kujira 0:1977c2310ef7 3900 float duty_pwm;//pwm パーセンテージ
Kujira 0:1977c2310ef7 3901 int i;
Kujira 0:1977c2310ef7 3902 int x[4] = {64,64,192,192}; //レベル値の表示位置 x座標
Kujira 0:1977c2310ef7 3903 int y[4] = {2,4,2,4}; //レベル値の表示位置 y座標
Kujira 0:1977c2310ef7 3904 //
Kujira 0:1977c2310ef7 3905 //EEPROMから照度データ読込とPWMDUTYセット
Kujira 0:1977c2310ef7 3906 read_syoudo( csyoudo );
Kujira 0:1977c2310ef7 3907 //
Kujira 0:1977c2310ef7 3908 //画面表示
Kujira 0:1977c2310ef7 3909 gu_cls();//画面のクリア
Kujira 0:1977c2310ef7 3910 gu_fontsize(2);
Kujira 0:1977c2310ef7 3911 gu_print1("Adjust illumination ");
Kujira 0:1977c2310ef7 3912 //照度レベルを256段階で表示
Kujira 0:1977c2310ef7 3913 //LED1
Kujira 0:1977c2310ef7 3914 gu_cursor(0,16/8);
Kujira 0:1977c2310ef7 3915 gu_print1("LED1 Lv ");
Kujira 0:1977c2310ef7 3916 //LED2
Kujira 0:1977c2310ef7 3917 gu_cursor(0,32/8);
Kujira 0:1977c2310ef7 3918 gu_print1("LED2 Lv ");
Kujira 0:1977c2310ef7 3919 //LED3
Kujira 0:1977c2310ef7 3920 if( number_of_channels >= 3 ) {
Kujira 0:1977c2310ef7 3921 gu_cursor(128,2);
Kujira 0:1977c2310ef7 3922 gu_print1("LED3 Lv ");
Kujira 0:1977c2310ef7 3923 }
Kujira 0:1977c2310ef7 3924 //LED4
Kujira 0:1977c2310ef7 3925 if( number_of_channels >= 4 ) {
Kujira 0:1977c2310ef7 3926 gu_cursor(128,4);
Kujira 0:1977c2310ef7 3927 gu_print1("LED4 Lv ");
Kujira 0:1977c2310ef7 3928 }
Kujira 0:1977c2310ef7 3929 //
Kujira 0:1977c2310ef7 3930 for ( i = 0; i <= ( number_of_channels - 1 ); i++) {
Kujira 0:1977c2310ef7 3931
Kujira 0:1977c2310ef7 3932 gu_cursor(x[i],y[i]);
Kujira 0:1977c2310ef7 3933
Kujira 0:1977c2310ef7 3934 cmd_gu[0] = ((csyoudo[i] / 100) & 0xFF) + 0x30;
Kujira 0:1977c2310ef7 3935 cmd_gu[1] = (csyoudo[i] - (csyoudo[i] / 100) * 100) / 10 + 0x30;
Kujira 0:1977c2310ef7 3936 cmd_gu[2] = ((csyoudo[i] % 10) & 0xFF) + 0x30;
Kujira 0:1977c2310ef7 3937 i2c.write(addr_gu, cmd_gu, 3);
Kujira 0:1977c2310ef7 3938 }
Kujira 0:1977c2310ef7 3939
Kujira 0:1977c2310ef7 3940 //
Kujira 0:1977c2310ef7 3941 gu_fontsize(1);
Kujira 0:1977c2310ef7 3942 gu_cursor(0,56/8);
Kujira 0:1977c2310ef7 3943 gu_print1("LED1");
Kujira 0:1977c2310ef7 3944 gu_cursor(32,56/8);
Kujira 0:1977c2310ef7 3945 gu_print1("fine");
Kujira 0:1977c2310ef7 3946 gu_cursor(64,56/8);
Kujira 0:1977c2310ef7 3947 gu_print1("LED2");
Kujira 0:1977c2310ef7 3948 gu_cursor(96,56/8);
Kujira 0:1977c2310ef7 3949 gu_print1("fine");
Kujira 0:1977c2310ef7 3950
Kujira 0:1977c2310ef7 3951 if( number_of_channels >= 3) {
Kujira 0:1977c2310ef7 3952 gu_cursor(128,56/8);
Kujira 0:1977c2310ef7 3953 gu_print1("LED3");
Kujira 0:1977c2310ef7 3954 gu_cursor(160,56/8);
Kujira 0:1977c2310ef7 3955 gu_print1("fine");
Kujira 0:1977c2310ef7 3956 }
Kujira 0:1977c2310ef7 3957 if( number_of_channels >= 4) {
Kujira 0:1977c2310ef7 3958 gu_cursor(192,56/8);
Kujira 0:1977c2310ef7 3959 gu_print1("LED4");
Kujira 0:1977c2310ef7 3960 gu_cursor(224,56/8);
Kujira 0:1977c2310ef7 3961 gu_print1("fine");
Kujira 0:1977c2310ef7 3962 }
Kujira 0:1977c2310ef7 3963 //
Kujira 0:1977c2310ef7 3964 //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 3965 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 3966 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 3967 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 3968 cmd_gu[3]= 0x02;//SW状態変化時自動送信モード2
Kujira 0:1977c2310ef7 3969 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 3970 //
Kujira 0:1977c2310ef7 3971 //ボタンイメージの表示
Kujira 0:1977c2310ef7 3972 for ( i = 17; i < 17 + ( number_of_channels * 2 ); i++) {
Kujira 0:1977c2310ef7 3973 gu_button_up(i);
Kujira 0:1977c2310ef7 3974 }
Kujira 0:1977c2310ef7 3975 for ( i = 25; i < 25 + ( number_of_channels * 2 ); i++) {
Kujira 0:1977c2310ef7 3976 gu_button_down(i);
Kujira 0:1977c2310ef7 3977 }
Kujira 0:1977c2310ef7 3978 gu_Button_power_on();//show button
Kujira 0:1977c2310ef7 3979 wait(0.2);
Kujira 0:1977c2310ef7 3980
Kujira 0:1977c2310ef7 3981 while(1) {
Kujira 0:1977c2310ef7 3982
Kujira 0:1977c2310ef7 3983 i2c.read ((addr_gu + 0x01), crdata, 3);
Kujira 0:1977c2310ef7 3984
Kujira 0:1977c2310ef7 3985 if (crdata[0] == 0x11 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。
Kujira 0:1977c2310ef7 3986 *pcswnum = crdata[1]; //スイッチ番号
Kujira 0:1977c2310ef7 3987 *pcswdata = crdata[2];//ON/OFF情報
Kujira 0:1977c2310ef7 3988
Kujira 0:1977c2310ef7 3989 if (cswdata == 0x01) { //タッチしたならば
Kujira 0:1977c2310ef7 3990
Kujira 0:1977c2310ef7 3991 switch ( number_of_channels ) { //ver1.1.0
Kujira 0:1977c2310ef7 3992
Kujira 0:1977c2310ef7 3993 case 1:
Kujira 0:1977c2310ef7 3994 case 2:
Kujira 0:1977c2310ef7 3995 if ( cswnum >= 20 && cswnum <= 23 )
Kujira 0:1977c2310ef7 3996 cswnum = 0;
Kujira 0:1977c2310ef7 3997
Kujira 0:1977c2310ef7 3998 if ( cswnum >= 28 && cswnum <= 31 )
Kujira 0:1977c2310ef7 3999 cswnum = 0;
Kujira 0:1977c2310ef7 4000
Kujira 0:1977c2310ef7 4001 break;
Kujira 0:1977c2310ef7 4002
Kujira 0:1977c2310ef7 4003 case 3:
Kujira 0:1977c2310ef7 4004 if ( cswnum >= 22 && cswnum <= 23 )
Kujira 0:1977c2310ef7 4005 cswnum = 0;
Kujira 0:1977c2310ef7 4006
Kujira 0:1977c2310ef7 4007 if ( cswnum >= 30 && cswnum <= 31 )
Kujira 0:1977c2310ef7 4008 cswnum = 0;
Kujira 0:1977c2310ef7 4009
Kujira 0:1977c2310ef7 4010 break;
Kujira 0:1977c2310ef7 4011
Kujira 0:1977c2310ef7 4012 } //switch
Kujira 0:1977c2310ef7 4013
Kujira 0:1977c2310ef7 4014 switch( cswnum ) { //SWの番号(位置)
Kujira 0:1977c2310ef7 4015
Kujira 0:1977c2310ef7 4016 case 22:
Kujira 0:1977c2310ef7 4017 case 20:
Kujira 0:1977c2310ef7 4018 case 16:
Kujira 0:1977c2310ef7 4019 case 18:
Kujira 0:1977c2310ef7 4020
Kujira 0:1977c2310ef7 4021 ch = ( cswnum - 16 ) / 2; //SWnoから選択したLEDNoの算出
Kujira 0:1977c2310ef7 4022
Kujira 0:1977c2310ef7 4023 gu_button_up_on( cswnum + 1 );
Kujira 0:1977c2310ef7 4024 wait(0.2);
Kujira 0:1977c2310ef7 4025 gu_button_up( cswnum + 1 );
Kujira 0:1977c2310ef7 4026 wait(0.1);
Kujira 0:1977c2310ef7 4027
Kujira 0:1977c2310ef7 4028 if(csyoudo[ch] <= 0xEF ) {
Kujira 0:1977c2310ef7 4029 csyoudo[ch] = csyoudo[ch] + 0x0A;
Kujira 0:1977c2310ef7 4030 }
Kujira 0:1977c2310ef7 4031
Kujira 0:1977c2310ef7 4032 break;
Kujira 0:1977c2310ef7 4033
Kujira 0:1977c2310ef7 4034 case 23:
Kujira 0:1977c2310ef7 4035 case 21:
Kujira 0:1977c2310ef7 4036 case 17:
Kujira 0:1977c2310ef7 4037 case 19:
Kujira 0:1977c2310ef7 4038
Kujira 0:1977c2310ef7 4039 ch = ( cswnum - 17 ) / 2; //SWnoから選択したLEDNoの算出
Kujira 0:1977c2310ef7 4040
Kujira 0:1977c2310ef7 4041 gu_button_up_on( cswnum + 1 );
Kujira 0:1977c2310ef7 4042 wait(0.2);
Kujira 0:1977c2310ef7 4043 gu_button_up( cswnum + 1 );
Kujira 0:1977c2310ef7 4044 wait(0.1);
Kujira 0:1977c2310ef7 4045
Kujira 0:1977c2310ef7 4046 if(csyoudo[ch] <= 0xFF ) {
Kujira 0:1977c2310ef7 4047 csyoudo[ch] = csyoudo[ch] + 0x01;
Kujira 0:1977c2310ef7 4048 }
Kujira 0:1977c2310ef7 4049
Kujira 0:1977c2310ef7 4050 break;
Kujira 0:1977c2310ef7 4051
Kujira 0:1977c2310ef7 4052 case 24:
Kujira 0:1977c2310ef7 4053 case 26:
Kujira 0:1977c2310ef7 4054 case 28:
Kujira 0:1977c2310ef7 4055 case 30:
Kujira 0:1977c2310ef7 4056
Kujira 0:1977c2310ef7 4057 ch = ( cswnum - 24 ) / 2; //SWnoから選択したLEDNoの算出
Kujira 0:1977c2310ef7 4058
Kujira 0:1977c2310ef7 4059 gu_button_down_on( cswnum + 1 );
Kujira 0:1977c2310ef7 4060 wait(0.2);
Kujira 0:1977c2310ef7 4061 gu_button_down( cswnum + 1 );
Kujira 0:1977c2310ef7 4062 wait(0.1);
Kujira 0:1977c2310ef7 4063
Kujira 0:1977c2310ef7 4064 if(csyoudo[ch] >= 0x0A ) {
Kujira 0:1977c2310ef7 4065 csyoudo[ch] = csyoudo[ch] - 0x0A;
Kujira 0:1977c2310ef7 4066 }
Kujira 0:1977c2310ef7 4067
Kujira 0:1977c2310ef7 4068 break;
Kujira 0:1977c2310ef7 4069
Kujira 0:1977c2310ef7 4070 case 25:
Kujira 0:1977c2310ef7 4071 case 27:
Kujira 0:1977c2310ef7 4072 case 29:
Kujira 0:1977c2310ef7 4073 case 31:
Kujira 0:1977c2310ef7 4074
Kujira 0:1977c2310ef7 4075 ch = ( cswnum - 24 ) / 2; //SWnoから選択したLEDNoの算出
Kujira 0:1977c2310ef7 4076
Kujira 0:1977c2310ef7 4077 gu_button_down_on( cswnum + 1 );
Kujira 0:1977c2310ef7 4078 wait(0.2);
Kujira 0:1977c2310ef7 4079 gu_button_down( cswnum + 1 );
Kujira 0:1977c2310ef7 4080 wait(0.1);
Kujira 0:1977c2310ef7 4081
Kujira 0:1977c2310ef7 4082 if(csyoudo[ch] >= 0x01 ) {
Kujira 0:1977c2310ef7 4083 csyoudo[ch] = csyoudo[ch] - 0x01;
Kujira 0:1977c2310ef7 4084 }
Kujira 0:1977c2310ef7 4085
Kujira 0:1977c2310ef7 4086 break;
Kujira 0:1977c2310ef7 4087
Kujira 4:24481ebef1c4 4088 case 7 ://SW.8 保存ボタンを押すと現在のLED照度をEEPROMへ保存する
Kujira 4:24481ebef1c4 4089
Kujira 4:24481ebef1c4 4090 wdata[0] = adrs_syoudo[0]; //word address 書込み先頭アドレス指定
Kujira 4:24481ebef1c4 4091 wdata[1] = adrs_syoudo[1]; //ver3
Kujira 0:1977c2310ef7 4092
Kujira 0:1977c2310ef7 4093 for ( i = 0; i <= ( number_of_channels - 1 ); i++) {
Kujira 4:24481ebef1c4 4094 wdata[ i + 2 ] = csyoudo[i]; //DATA_LED i
Kujira 0:1977c2310ef7 4095 }
Kujira 0:1977c2310ef7 4096
Kujira 4:24481ebef1c4 4097 Soushin = i2c.write (eeprom_adrs, wdata,( number_of_channels + 2 )); // ver3 全送信BYTE数は、書込みデータにBYTE ADDRESSの2byteを加算した数
Kujira 0:1977c2310ef7 4098
Kujira 0:1977c2310ef7 4099 if(Soushin == 0) {
Kujira 0:1977c2310ef7 4100 gu_Button_power_off();//電源ボタンイメージ反転表示
Kujira 0:1977c2310ef7 4101 wait(0.3);
Kujira 0:1977c2310ef7 4102
Kujira 0:1977c2310ef7 4103 return;//照度調整ルーチンを抜ける
Kujira 0:1977c2310ef7 4104 }
Kujira 0:1977c2310ef7 4105 } //switch
Kujira 0:1977c2310ef7 4106
Kujira 0:1977c2310ef7 4107
Kujira 0:1977c2310ef7 4108
Kujira 0:1977c2310ef7 4109 //PWMのDUTY設定
Kujira 0:1977c2310ef7 4110
Kujira 0:1977c2310ef7 4111 for( i = 0; i <= ( number_of_channels - 1 ); i++) {
Kujira 0:1977c2310ef7 4112 duty_pwm = COP * csyoudo[i];
Kujira 0:1977c2310ef7 4113 leds[i].write (duty_pwm);//Set Duty
Kujira 0:1977c2310ef7 4114 }
Kujira 0:1977c2310ef7 4115
Kujira 0:1977c2310ef7 4116
Kujira 0:1977c2310ef7 4117 //照度レベルを256段階で表示
Kujira 0:1977c2310ef7 4118 //LED1
Kujira 0:1977c2310ef7 4119 gu_fontsize(2);
Kujira 0:1977c2310ef7 4120
Kujira 0:1977c2310ef7 4121 for ( i = 0; i <= ( number_of_channels - 1 ); i++) {
Kujira 0:1977c2310ef7 4122
Kujira 0:1977c2310ef7 4123 gu_cursor(x[i],y[i]);
Kujira 0:1977c2310ef7 4124
Kujira 0:1977c2310ef7 4125 cmd_gu[0] = ((csyoudo[i] / 100) & 0xFF) + 0x30;
Kujira 0:1977c2310ef7 4126 cmd_gu[1] = (csyoudo[i] - (csyoudo[i] / 100) * 100) / 10 + 0x30;
Kujira 0:1977c2310ef7 4127 cmd_gu[2] = ((csyoudo[i] % 10) & 0xFF) + 0x30;
Kujira 0:1977c2310ef7 4128 i2c.write(addr_gu, cmd_gu, 3);
Kujira 0:1977c2310ef7 4129 }
Kujira 0:1977c2310ef7 4130 }
Kujira 0:1977c2310ef7 4131 } //if
Kujira 0:1977c2310ef7 4132
Kujira 0:1977c2310ef7 4133 wait(0.1);//gu-D 読込間隔の設定
Kujira 0:1977c2310ef7 4134
Kujira 0:1977c2310ef7 4135 }
Kujira 0:1977c2310ef7 4136 }
Kujira 0:1977c2310ef7 4137
Kujira 0:1977c2310ef7 4138 /*********************************
Kujira 0:1977c2310ef7 4139
Kujira 0:1977c2310ef7 4140 サブ基板LED(判定用)全消灯
Kujira 0:1977c2310ef7 4141
Kujira 0:1977c2310ef7 4142 *********************************/
Kujira 0:1977c2310ef7 4143 void led_off()
Kujira 0:1977c2310ef7 4144 {
Kujira 0:1977c2310ef7 4145 int i;
Kujira 0:1977c2310ef7 4146
Kujira 0:1977c2310ef7 4147 for( i = 0; i <= ( number_of_channels - 1 ); i++) {
Kujira 0:1977c2310ef7 4148 led_green[ i ] = 0;
Kujira 0:1977c2310ef7 4149 led_red[ i ] = 0;
Kujira 0:1977c2310ef7 4150 }
Kujira 0:1977c2310ef7 4151
Kujira 0:1977c2310ef7 4152 }
Kujira 0:1977c2310ef7 4153 /*********************************
Kujira 0:1977c2310ef7 4154
Kujira 0:1977c2310ef7 4155 Utility Main
Kujira 0:1977c2310ef7 4156 gu_D 輝度調整 タッチ感度調整
Kujira 0:1977c2310ef7 4157
Kujira 0:1977c2310ef7 4158 *********************************/
Kujira 0:1977c2310ef7 4159 void utility() //輝度調整サブルーチン
Kujira 0:1977c2310ef7 4160 {
Kujira 0:1977c2310ef7 4161
Kujira 0:1977c2310ef7 4162 char cmd_gu[32] ; //gu-DへのI2Cコマンド用配列 1byte0
Kujira 0:1977c2310ef7 4163 //char *pcmd = cmd_gu;
Kujira 0:1977c2310ef7 4164 char clumi; //輝度設定用変数 01h<=n<=08h
Kujira 0:1977c2310ef7 4165 char* pclumi = &clumi; //ポインタの定義
Kujira 0:1977c2310ef7 4166 char msg;
Kujira 0:1977c2310ef7 4167 char *pmsg = &msg;
Kujira 0:1977c2310ef7 4168 char crdata[3];
Kujira 0:1977c2310ef7 4169 char cswnum; //SW_No. sw1->0x00 ~~ sw32->0x1F
Kujira 0:1977c2310ef7 4170 char cswdata; // 0x00 or 0x01
Kujira 0:1977c2310ef7 4171 char *pcswnum = &cswnum;
Kujira 0:1977c2310ef7 4172 char *pcswdata = &cswdata;
Kujira 0:1977c2310ef7 4173 //
Kujira 0:1977c2310ef7 4174 //メモリ00h番地(輝度設定データ)読み出し
Kujira 4:24481ebef1c4 4175 //wdata[0] = 0x00;
Kujira 4:24481ebef1c4 4176 //Soushin = i2c.write (eeprom_adrs, wdata, 1,true); //読込先頭アドレス指定 ReStart
Kujira 4:24481ebef1c4 4177 Soushin = i2c.write (eeprom_adrs, adrs_kido, 2,true); //ver3 読込先頭アドレス指定 2byte
Kujira 4:24481ebef1c4 4178 Jyushin = i2c.read ((eeprom_adrs + 0x01), rdata, 1);//read 1byte
Kujira 0:1977c2310ef7 4179 *pclumi = rdata[0];
Kujira 0:1977c2310ef7 4180
Kujira 0:1977c2310ef7 4181 //輝度設定更新
Kujira 0:1977c2310ef7 4182 if(*pclumi==0x00 || *pclumi > 0x08) *pclumi=0x05;
Kujira 0:1977c2310ef7 4183 gu_luminance(pclumi);
Kujira 0:1977c2310ef7 4184
Kujira 0:1977c2310ef7 4185 //画面表示
Kujira 0:1977c2310ef7 4186 gu_cls();//画面のクリア
Kujira 0:1977c2310ef7 4187 gu_print1("Set Display Brightness");
Kujira 0:1977c2310ef7 4188 gu_cursor(0,16/8);
Kujira 0:1977c2310ef7 4189 gu_print1("LEVEL ");
Kujira 0:1977c2310ef7 4190 *pmsg = *pclumi + 0x30;
Kujira 0:1977c2310ef7 4191 gu_print1(pmsg);
Kujira 0:1977c2310ef7 4192
Kujira 0:1977c2310ef7 4193 gu_cursor(0,96/8); //ver1.1.0
Kujira 0:1977c2310ef7 4194 gu_print1("DELETE EEPROM_DATA");
Kujira 0:1977c2310ef7 4195 gu_set_button_font1(30,"del");
Kujira 0:1977c2310ef7 4196
Kujira 0:1977c2310ef7 4197 //SW状態変化時自動送信モード2
Kujira 0:1977c2310ef7 4198 cmd_gu[0]= 0x1F;
Kujira 0:1977c2310ef7 4199 cmd_gu[1]= 0x4B;
Kujira 0:1977c2310ef7 4200 cmd_gu[2]= 0x18;
Kujira 0:1977c2310ef7 4201 cmd_gu[3]= 0x02;
Kujira 0:1977c2310ef7 4202 i2c.write(addr_gu, cmd_gu, 4); //gu-D タッチスイッチ読み出し動作設定 p49
Kujira 0:1977c2310ef7 4203
Kujira 0:1977c2310ef7 4204 //ボタンイメージの表示
Kujira 0:1977c2310ef7 4205 gu_button_up(6);//show button
Kujira 0:1977c2310ef7 4206 gu_button_down(14);//show button
Kujira 0:1977c2310ef7 4207 gu_Button_power_on();//show button
Kujira 0:1977c2310ef7 4208
Kujira 0:1977c2310ef7 4209 while(1) {
Kujira 0:1977c2310ef7 4210
Kujira 0:1977c2310ef7 4211 i2c.read ((addr_gu + 0x01), crdata, 3, true);
Kujira 0:1977c2310ef7 4212
Kujira 0:1977c2310ef7 4213 if (crdata[0] == 0x11 ) { //個別タッチスイッチ状態読み出しフォーマット。識別子11h。
Kujira 0:1977c2310ef7 4214 *pcswnum = crdata[1]; //スイッチ番号
Kujira 0:1977c2310ef7 4215 *pcswdata = crdata[2];//ON/OFF情報
Kujira 0:1977c2310ef7 4216
Kujira 0:1977c2310ef7 4217 if (cswdata == 0x01) { //タッチしたならば
Kujira 0:1977c2310ef7 4218 switch( cswnum ) { //SWの番号(位置)
Kujira 0:1977c2310ef7 4219 case 5 ://SW6
Kujira 0:1977c2310ef7 4220 gu_button_up_on( 6 );
Kujira 0:1977c2310ef7 4221 wait(0.2);
Kujira 0:1977c2310ef7 4222 gu_button_up( 6 );
Kujira 0:1977c2310ef7 4223 wait(0.1);
Kujira 0:1977c2310ef7 4224
Kujira 0:1977c2310ef7 4225 if(clumi < 8 ) *pclumi = *pclumi + 1;
Kujira 0:1977c2310ef7 4226
Kujira 0:1977c2310ef7 4227 break;
Kujira 0:1977c2310ef7 4228
Kujira 0:1977c2310ef7 4229 case 13 ://SW14
Kujira 0:1977c2310ef7 4230 gu_button_down_on( 14 );
Kujira 0:1977c2310ef7 4231 wait(0.2);
Kujira 0:1977c2310ef7 4232 gu_button_down( 14 );
Kujira 0:1977c2310ef7 4233 wait(0.1);
Kujira 0:1977c2310ef7 4234
Kujira 0:1977c2310ef7 4235 if(clumi >= 1 ) *pclumi = *pclumi - 1;
Kujira 0:1977c2310ef7 4236
Kujira 0:1977c2310ef7 4237 break;
Kujira 0:1977c2310ef7 4238
Kujira 0:1977c2310ef7 4239 case 29: //SW30
Kujira 0:1977c2310ef7 4240
Kujira 0:1977c2310ef7 4241 gu_reverse(0x01); //gu_リバース指定
Kujira 0:1977c2310ef7 4242 gu_set_button_font1(30,"del");
Kujira 0:1977c2310ef7 4243 gu_reverse(0x00); //gu_リバース解除
Kujira 0:1977c2310ef7 4244
Kujira 0:1977c2310ef7 4245 erace_calinfo();
Kujira 0:1977c2310ef7 4246
Kujira 0:1977c2310ef7 4247 gu_set_button_font1(30,"del");
Kujira 0:1977c2310ef7 4248
Kujira 0:1977c2310ef7 4249 break;
Kujira 0:1977c2310ef7 4250
Kujira 0:1977c2310ef7 4251 case 0x07 ://保存ボタンを押すと現在の輝度をEEPROMへ保存する
Kujira 0:1977c2310ef7 4252
Kujira 4:24481ebef1c4 4253 //wdata[0] = 0x00 ; //word address 書込み先頭アドレス指定
Kujira 4:24481ebef1c4 4254 //wdata[1] = *pclumi ; //DATA
Kujira 4:24481ebef1c4 4255
Kujira 4:24481ebef1c4 4256 wdata[0] = adrs_kido[0]; //ver3
Kujira 4:24481ebef1c4 4257 wdata[1] = adrs_kido[1]; //ver3
Kujira 4:24481ebef1c4 4258 wdata[2] = *pclumi ; //ver3
Kujira 4:24481ebef1c4 4259
Kujira 4:24481ebef1c4 4260 Soushin = i2c.write (eeprom_adrs, wdata, 3); //ver3
Kujira 0:1977c2310ef7 4261
Kujira 0:1977c2310ef7 4262 if(Soushin == 0) {
Kujira 0:1977c2310ef7 4263 gu_Button_power_off();//電源ボタンイメージ反転表示
Kujira 0:1977c2310ef7 4264 wait(0.5);
Kujira 0:1977c2310ef7 4265 return;//輝度調整ルーチンを抜ける
Kujira 0:1977c2310ef7 4266 }
Kujira 0:1977c2310ef7 4267
Kujira 0:1977c2310ef7 4268 } //switch
Kujira 0:1977c2310ef7 4269
Kujira 0:1977c2310ef7 4270 gu_luminance(pclumi);//輝度変更
Kujira 0:1977c2310ef7 4271 gu_cursor(0,16/8);
Kujira 0:1977c2310ef7 4272 gu_print1("LEVEL ");
Kujira 0:1977c2310ef7 4273 *pmsg = *pclumi + 0x30;
Kujira 0:1977c2310ef7 4274 gu_print1(pmsg);
Kujira 0:1977c2310ef7 4275
Kujira 0:1977c2310ef7 4276 }
Kujira 0:1977c2310ef7 4277 } //if
Kujira 0:1977c2310ef7 4278
Kujira 0:1977c2310ef7 4279 wait(0.1);//gu-D 読込間隔の設定
Kujira 0:1977c2310ef7 4280
Kujira 0:1977c2310ef7 4281 }
Kujira 0:1977c2310ef7 4282 }
Kujira 0:1977c2310ef7 4283
Kujira 0:1977c2310ef7 4284 /*********************************
Kujira 0:1977c2310ef7 4285 gu_D グラフィックデータ
Kujira 0:1977c2310ef7 4286 *********************************/
Kujira 0:1977c2310ef7 4287 char gu_Button_MODE_data[] = {
Kujira 0:1977c2310ef7 4288 0x7F,0xF0,0x80,0x08,0x80,0x0C,0x80,0x0A,0x80,0x0A,0x80,0x0A,0x80,0x0A,0x80,0x0A,
Kujira 0:1977c2310ef7 4289 0x80,0x0A,0x80,0x0A,0x80,0x0A,0x80,0x0A,0x7F,0xF2,0x20,0x02,0x1F,0xFC,0x00,0x00,
Kujira 0:1977c2310ef7 4290 };
Kujira 0:1977c2310ef7 4291
Kujira 0:1977c2310ef7 4292 void gu_set_button(char sw_num,char* text)
Kujira 0:1977c2310ef7 4293 {
Kujira 0:1977c2310ef7 4294 char x;
Kujira 0:1977c2310ef7 4295 char y;
Kujira 0:1977c2310ef7 4296
Kujira 0:1977c2310ef7 4297 //SW_NoからSWの座標を求める
Kujira 0:1977c2310ef7 4298 x = ((sw_num - 1) % 8 ) * 32;
Kujira 0:1977c2310ef7 4299 y = ((sw_num - 1) / 8 ) * 32;
Kujira 0:1977c2310ef7 4300
Kujira 0:1977c2310ef7 4301 gu_drawButton(x,y,32,32, gu_Button_MODE_data );
Kujira 0:1977c2310ef7 4302
Kujira 0:1977c2310ef7 4303 // Change Font Size
Kujira 0:1977c2310ef7 4304 gu_fontsize(2);
Kujira 0:1977c2310ef7 4305 // set font width
Kujira 0:1977c2310ef7 4306 gu_fontWidth(Proportional1);
Kujira 0:1977c2310ef7 4307 gu_print_dot( x + 8,y + 8,text);
Kujira 0:1977c2310ef7 4308 // Change Font Size
Kujira 0:1977c2310ef7 4309 gu_fontsize(1);
Kujira 0:1977c2310ef7 4310 // set font width
Kujira 0:1977c2310ef7 4311 gu_fontWidth(1);
Kujira 0:1977c2310ef7 4312 }
Kujira 0:1977c2310ef7 4313
Kujira 0:1977c2310ef7 4314 void gu_set_button_font1(char sw_num,char* text)
Kujira 0:1977c2310ef7 4315 {
Kujira 0:1977c2310ef7 4316 char x;
Kujira 0:1977c2310ef7 4317 char y;
Kujira 0:1977c2310ef7 4318
Kujira 0:1977c2310ef7 4319 //SW_NoからSWの座標を求める
Kujira 0:1977c2310ef7 4320 x = ((sw_num - 1) % 8 ) * 32;
Kujira 0:1977c2310ef7 4321 y = ((sw_num - 1) / 8 ) * 32;
Kujira 0:1977c2310ef7 4322
Kujira 0:1977c2310ef7 4323 gu_drawButton(x,y,32,32, gu_Button_MODE_data );
Kujira 0:1977c2310ef7 4324
Kujira 0:1977c2310ef7 4325 // Change Font Size
Kujira 0:1977c2310ef7 4326 gu_fontsize(1);
Kujira 0:1977c2310ef7 4327 // set font width
Kujira 0:1977c2310ef7 4328 gu_fontWidth(1);
Kujira 0:1977c2310ef7 4329 gu_print_dot( x + 2,y + 10,text);
Kujira 0:1977c2310ef7 4330
Kujira 0:1977c2310ef7 4331 }
Kujira 0:1977c2310ef7 4332
Kujira 0:1977c2310ef7 4333 char gu_Button_up_data[] = {
Kujira 0:1977c2310ef7 4334 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x10,0x00,0x00,0x08,
Kujira 0:1977c2310ef7 4335 0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,0x20,0x00,0x18,0x04,
Kujira 0:1977c2310ef7 4336 0x20,0x00,0x38,0x04,0x20,0x00,0x78,0x04,0x20,0x00,0xF8,0x04,0x20,0x01,0xF8,0x04,
Kujira 0:1977c2310ef7 4337 0x20,0x03,0xF8,0x04,0x20,0x07,0xF8,0x04,0x20,0x0F,0xF8,0x04,0x20,0x1F,0xF8,0x04,
Kujira 0:1977c2310ef7 4338 0x20,0x1F,0xF8,0x04,0x20,0x0F,0xF8,0x04,0x20,0x07,0xF8,0x04,0x20,0x03,0xF8,0x04,
Kujira 0:1977c2310ef7 4339 0x20,0x01,0xF8,0x04,0x20,0x00,0xF8,0x04,0x20,0x00,0x78,0x04,0x20,0x00,0x38,0x04,
Kujira 0:1977c2310ef7 4340 0x20,0x00,0x18,0x04,0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,
Kujira 0:1977c2310ef7 4341 0x10,0x00,0x00,0x08,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Kujira 0:1977c2310ef7 4342 };
Kujira 0:1977c2310ef7 4343
Kujira 0:1977c2310ef7 4344 void gu_button_up(char sw_num)
Kujira 0:1977c2310ef7 4345 {
Kujira 0:1977c2310ef7 4346 char x;
Kujira 0:1977c2310ef7 4347 char y;
Kujira 0:1977c2310ef7 4348
Kujira 0:1977c2310ef7 4349 //SW_NoからSWの座標を求める
Kujira 0:1977c2310ef7 4350 x = ((sw_num - 1) % 8 ) * 32;
Kujira 0:1977c2310ef7 4351 y = ((sw_num - 1) / 8 ) * 32;
Kujira 0:1977c2310ef7 4352
Kujira 0:1977c2310ef7 4353 gu_cursor( x, y/8 );
Kujira 0:1977c2310ef7 4354 gu_RealTimeImage(32, 32, gu_Button_up_data);
Kujira 0:1977c2310ef7 4355 }
Kujira 0:1977c2310ef7 4356
Kujira 0:1977c2310ef7 4357 void gu_Button_up1()
Kujira 0:1977c2310ef7 4358 {
Kujira 0:1977c2310ef7 4359 gu_cursor(224,8);
Kujira 0:1977c2310ef7 4360 gu_RealTimeImage(32, 32, gu_Button_up_data);
Kujira 0:1977c2310ef7 4361 }
Kujira 0:1977c2310ef7 4362
Kujira 0:1977c2310ef7 4363 void gu_Button_up2()
Kujira 0:1977c2310ef7 4364 {
Kujira 0:1977c2310ef7 4365 gu_cursor(192,8);
Kujira 0:1977c2310ef7 4366 gu_RealTimeImage(32, 32, gu_Button_up_data);
Kujira 0:1977c2310ef7 4367 }
Kujira 0:1977c2310ef7 4368
Kujira 0:1977c2310ef7 4369 void gu_Button_up3()
Kujira 0:1977c2310ef7 4370 {
Kujira 0:1977c2310ef7 4371 gu_cursor(160,8);
Kujira 0:1977c2310ef7 4372 gu_RealTimeImage(32, 32, gu_Button_up_data);
Kujira 0:1977c2310ef7 4373 }
Kujira 0:1977c2310ef7 4374
Kujira 0:1977c2310ef7 4375 void gu_Button_up4()
Kujira 0:1977c2310ef7 4376 {
Kujira 0:1977c2310ef7 4377 gu_cursor(128,8);
Kujira 0:1977c2310ef7 4378 gu_RealTimeImage(32, 32, gu_Button_up_data);
Kujira 0:1977c2310ef7 4379 }
Kujira 0:1977c2310ef7 4380
Kujira 0:1977c2310ef7 4381 char gu_Button_down_data[] = {
Kujira 0:1977c2310ef7 4382 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x10,0x00,0x00,0x08,
Kujira 0:1977c2310ef7 4383 0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,0x20,0x18,0x00,0x04,
Kujira 0:1977c2310ef7 4384 0x20,0x1C,0x00,0x04,0x20,0x1E,0x00,0x04,0x20,0x1F,0x00,0x04,0x20,0x1F,0x80,0x04,
Kujira 0:1977c2310ef7 4385 0x20,0x1F,0xC0,0x04,0x20,0x1F,0xE0,0x04,0x20,0x1F,0xF0,0x04,0x20,0x1F,0xF8,0x04,
Kujira 0:1977c2310ef7 4386 0x20,0x1F,0xF8,0x04,0x20,0x1F,0xF0,0x04,0x20,0x1F,0xE0,0x04,0x20,0x1F,0xC0,0x04,
Kujira 0:1977c2310ef7 4387 0x20,0x1F,0x80,0x04,0x20,0x1F,0x00,0x04,0x20,0x1E,0x00,0x04,0x20,0x1C,0x00,0x04,
Kujira 0:1977c2310ef7 4388 0x20,0x18,0x00,0x04,0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,
Kujira 0:1977c2310ef7 4389 0x10,0x00,0x00,0x08,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Kujira 0:1977c2310ef7 4390 };
Kujira 0:1977c2310ef7 4391
Kujira 0:1977c2310ef7 4392 void gu_button_down(char sw_num)
Kujira 0:1977c2310ef7 4393 {
Kujira 0:1977c2310ef7 4394 char x;
Kujira 0:1977c2310ef7 4395 char y;
Kujira 0:1977c2310ef7 4396
Kujira 0:1977c2310ef7 4397 //SW_NoからSWの座標を求める
Kujira 0:1977c2310ef7 4398 x = ((sw_num - 1) % 8 ) * 32;
Kujira 0:1977c2310ef7 4399 y = ((sw_num - 1) / 8 ) * 32;
Kujira 0:1977c2310ef7 4400
Kujira 0:1977c2310ef7 4401 gu_cursor( x, y/8 );
Kujira 0:1977c2310ef7 4402 gu_RealTimeImage(32, 32, gu_Button_down_data);
Kujira 0:1977c2310ef7 4403 }
Kujira 0:1977c2310ef7 4404
Kujira 0:1977c2310ef7 4405 void gu_Button_down1()
Kujira 0:1977c2310ef7 4406 {
Kujira 0:1977c2310ef7 4407 gu_cursor(224,12);
Kujira 0:1977c2310ef7 4408 gu_RealTimeImage(32, 32, gu_Button_down_data);
Kujira 0:1977c2310ef7 4409 }
Kujira 0:1977c2310ef7 4410
Kujira 0:1977c2310ef7 4411 void gu_Button_down2()
Kujira 0:1977c2310ef7 4412 {
Kujira 0:1977c2310ef7 4413 gu_cursor(192,12);
Kujira 0:1977c2310ef7 4414 gu_RealTimeImage(32, 32, gu_Button_down_data);
Kujira 0:1977c2310ef7 4415 }
Kujira 0:1977c2310ef7 4416
Kujira 0:1977c2310ef7 4417 void gu_Button_down3()
Kujira 0:1977c2310ef7 4418 {
Kujira 0:1977c2310ef7 4419 gu_cursor(160,12);
Kujira 0:1977c2310ef7 4420 gu_RealTimeImage(32, 32, gu_Button_down_data);
Kujira 0:1977c2310ef7 4421 }
Kujira 0:1977c2310ef7 4422
Kujira 0:1977c2310ef7 4423 void gu_Button_down4()
Kujira 0:1977c2310ef7 4424 {
Kujira 0:1977c2310ef7 4425 gu_cursor(128,12);
Kujira 0:1977c2310ef7 4426 gu_RealTimeImage(32, 32, gu_Button_down_data);
Kujira 0:1977c2310ef7 4427 }
Kujira 0:1977c2310ef7 4428
Kujira 0:1977c2310ef7 4429 char gu_Button_up_on_data[] = {
Kujira 0:1977c2310ef7 4430 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF8,
Kujira 0:1977c2310ef7 4431 0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xE7,0xFC,
Kujira 0:1977c2310ef7 4432 0x3F,0xFF,0xC7,0xFC,0x3F,0xFF,0x87,0xFC,0x3F,0xFF,0x07,0xFC,0x3F,0xFE,0x07,0xFC,
Kujira 0:1977c2310ef7 4433 0x3F,0xFC,0x07,0xFC,0x3F,0xF8,0x07,0xFC,0x3F,0xF0,0x07,0xFC,0x3F,0xE0,0x07,0xFC,
Kujira 0:1977c2310ef7 4434 0x3F,0xE0,0x07,0xFC,0x3F,0xF0,0x07,0xFC,0x3F,0xF8,0x07,0xFC,0x3F,0xFC,0x07,0xFC,
Kujira 0:1977c2310ef7 4435 0x3F,0xFE,0x07,0xFC,0x3F,0xFF,0x07,0xFC,0x3F,0xFF,0x87,0xFC,0x3F,0xFF,0xC7,0xFC,
Kujira 0:1977c2310ef7 4436 0x3F,0xFF,0xE7,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,
Kujira 0:1977c2310ef7 4437 0x1F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Kujira 0:1977c2310ef7 4438 };
Kujira 0:1977c2310ef7 4439
Kujira 0:1977c2310ef7 4440 void gu_button_up_on( char sw_num )
Kujira 0:1977c2310ef7 4441 {
Kujira 0:1977c2310ef7 4442 char x;
Kujira 0:1977c2310ef7 4443 char y;
Kujira 0:1977c2310ef7 4444
Kujira 0:1977c2310ef7 4445 //SW_NoからSWの座標を求める
Kujira 0:1977c2310ef7 4446 x = ((sw_num - 1) % 8 ) * 32;
Kujira 0:1977c2310ef7 4447 y = ((sw_num - 1) / 8 ) * 32;
Kujira 0:1977c2310ef7 4448
Kujira 0:1977c2310ef7 4449 gu_cursor( x, y/8 );
Kujira 0:1977c2310ef7 4450
Kujira 0:1977c2310ef7 4451 gu_RealTimeImage(32, 32, gu_Button_up_on_data);
Kujira 0:1977c2310ef7 4452 }
Kujira 0:1977c2310ef7 4453
Kujira 0:1977c2310ef7 4454 void gu_Button_up_on2()
Kujira 0:1977c2310ef7 4455 {
Kujira 0:1977c2310ef7 4456 gu_cursor(192,8);
Kujira 0:1977c2310ef7 4457 gu_RealTimeImage(32, 32, gu_Button_up_on_data);
Kujira 0:1977c2310ef7 4458 }
Kujira 0:1977c2310ef7 4459
Kujira 0:1977c2310ef7 4460 char gu_Button_down_on_data[] = {
Kujira 0:1977c2310ef7 4461 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF8,
Kujira 0:1977c2310ef7 4462 0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xE7,0xFF,0xFC,
Kujira 0:1977c2310ef7 4463 0x3F,0xE3,0xFF,0xFC,0x3F,0xE1,0xFF,0xFC,0x3F,0xE0,0xFF,0xFC,0x3F,0xE0,0x7F,0xFC,
Kujira 0:1977c2310ef7 4464 0x3F,0xE0,0x3F,0xFC,0x3F,0xE0,0x1F,0xFC,0x3F,0xE0,0x0F,0xFC,0x3F,0xE0,0x07,0xFC,
Kujira 0:1977c2310ef7 4465 0x3F,0xE0,0x07,0xFC,0x3F,0xE0,0x0F,0xFC,0x3F,0xE0,0x1F,0xFC,0x3F,0xE0,0x3F,0xFC,
Kujira 0:1977c2310ef7 4466 0x3F,0xE0,0x7F,0xFC,0x3F,0xE0,0xFF,0xFC,0x3F,0xE1,0xFF,0xFC,0x3F,0xE3,0xFF,0xFC,
Kujira 0:1977c2310ef7 4467 0x3F,0xE7,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,
Kujira 0:1977c2310ef7 4468 0x1F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Kujira 0:1977c2310ef7 4469 };
Kujira 0:1977c2310ef7 4470
Kujira 0:1977c2310ef7 4471 void gu_button_down_on(char sw_num)
Kujira 0:1977c2310ef7 4472 {
Kujira 0:1977c2310ef7 4473 char x;
Kujira 0:1977c2310ef7 4474 char y;
Kujira 0:1977c2310ef7 4475
Kujira 0:1977c2310ef7 4476 //SW_NoからSWの座標を求める
Kujira 0:1977c2310ef7 4477 x = ((sw_num - 1) % 8 ) * 32;
Kujira 0:1977c2310ef7 4478 y = ((sw_num - 1) / 8 ) * 32;
Kujira 0:1977c2310ef7 4479
Kujira 0:1977c2310ef7 4480 gu_cursor( x, y/8 );
Kujira 0:1977c2310ef7 4481
Kujira 0:1977c2310ef7 4482 gu_RealTimeImage(32, 32, gu_Button_down_on_data);
Kujira 0:1977c2310ef7 4483 }
Kujira 0:1977c2310ef7 4484
Kujira 0:1977c2310ef7 4485 void gu_Button_down_on2()
Kujira 0:1977c2310ef7 4486 {
Kujira 0:1977c2310ef7 4487 gu_cursor(192,12);
Kujira 0:1977c2310ef7 4488 gu_RealTimeImage(32, 32, gu_Button_down_on_data);
Kujira 0:1977c2310ef7 4489 }
Kujira 0:1977c2310ef7 4490
Kujira 0:1977c2310ef7 4491 char gu_Button_power_on_data[] = {
Kujira 0:1977c2310ef7 4492 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x10,0x00,0x00,0x08,
Kujira 0:1977c2310ef7 4493 0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,0x20,0x03,0xF0,0x04,
Kujira 0:1977c2310ef7 4494 0x20,0x0F,0xFC,0x04,0x20,0x1F,0xFE,0x04,0x20,0x3C,0x0F,0x04,0x20,0x38,0x07,0x84,
Kujira 0:1977c2310ef7 4495 0x20,0x00,0x03,0x84,0x20,0x00,0x03,0xC4,0x20,0x00,0x01,0xC4,0x21,0xFF,0x01,0xC4,
Kujira 0:1977c2310ef7 4496 0x21,0xFF,0x01,0xC4,0x20,0x00,0x01,0xC4,0x20,0x00,0x03,0xC4,0x20,0x00,0x03,0x84,
Kujira 0:1977c2310ef7 4497 0x20,0x38,0x07,0x84,0x20,0x3C,0x0F,0x04,0x20,0x1F,0xFE,0x04,0x20,0x0F,0xFC,0x04,
Kujira 0:1977c2310ef7 4498 0x20,0x03,0xF0,0x04,0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,0x20,0x00,0x00,0x04,
Kujira 0:1977c2310ef7 4499 0x10,0x00,0x00,0x08,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Kujira 0:1977c2310ef7 4500 };
Kujira 0:1977c2310ef7 4501
Kujira 0:1977c2310ef7 4502 void gu_Button_power_on()
Kujira 0:1977c2310ef7 4503 {
Kujira 0:1977c2310ef7 4504 gu_cursor(224,0);
Kujira 0:1977c2310ef7 4505 gu_RealTimeImage(32, 32, gu_Button_power_on_data);
Kujira 0:1977c2310ef7 4506 }
Kujira 0:1977c2310ef7 4507
Kujira 0:1977c2310ef7 4508
Kujira 0:1977c2310ef7 4509 char gu_Button_power_off_data[] = {
Kujira 0:1977c2310ef7 4510 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF8,
Kujira 0:1977c2310ef7 4511 0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFC,0x0F,0xFC,
Kujira 0:1977c2310ef7 4512 0x3F,0xF0,0x03,0xFC,0x3F,0xE0,0x01,0xFC,0x3F,0xC3,0xF0,0xFC,0x3F,0xC7,0xF8,0x7C,
Kujira 0:1977c2310ef7 4513 0x3F,0xFF,0xFC,0x7C,0x3F,0xFF,0xFC,0x3C,0x3F,0xFF,0xFE,0x3C,0x3C,0x00,0x7E,0x3C,
Kujira 0:1977c2310ef7 4514 0x3C,0x00,0x7E,0x3C,0x3F,0xFF,0xFE,0x3C,0x3F,0xFF,0xFC,0x3C,0x3F,0xFF,0xFC,0x7C,
Kujira 0:1977c2310ef7 4515 0x3F,0xC7,0xF8,0x7C,0x3F,0xC1,0xE0,0xFC,0x3F,0xE0,0x01,0xFC,0x3F,0xF0,0x03,0xFC,
Kujira 0:1977c2310ef7 4516 0x3F,0xFC,0x0F,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,
Kujira 0:1977c2310ef7 4517 0x1F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
Kujira 0:1977c2310ef7 4518 };
Kujira 0:1977c2310ef7 4519
Kujira 0:1977c2310ef7 4520 void gu_Button_power_off()
Kujira 0:1977c2310ef7 4521 {
Kujira 0:1977c2310ef7 4522 gu_cursor(224,0);
Kujira 0:1977c2310ef7 4523 gu_RealTimeImage(32, 32, gu_Button_power_off_data);
Kujira 0:1977c2310ef7 4524 }
Kujira 0:1977c2310ef7 4525
Kujira 0:1977c2310ef7 4526 /*********************************
Kujira 0:1977c2310ef7 4527 ノリタケ関数
Kujira 0:1977c2310ef7 4528 ここから
Kujira 0:1977c2310ef7 4529 **********************************/
Kujira 0:1977c2310ef7 4530 //
Kujira 0:1977c2310ef7 4531 // Clear screen//
Kujira 0:1977c2310ef7 4532 void gu_cls()
Kujira 0:1977c2310ef7 4533 {
Kujira 0:1977c2310ef7 4534
Kujira 0:1977c2310ef7 4535 i2c.start();
Kujira 0:1977c2310ef7 4536 i2c.write(addr_gu);
Kujira 0:1977c2310ef7 4537 i2c.write(0x0c);
Kujira 0:1977c2310ef7 4538 i2c.stop();
Kujira 0:1977c2310ef7 4539
Kujira 0:1977c2310ef7 4540 }
Kujira 0:1977c2310ef7 4541
Kujira 0:1977c2310ef7 4542 void gu_drawButton(int x, int y, int w, int h, const char data[])
Kujira 0:1977c2310ef7 4543 {
Kujira 0:1977c2310ef7 4544 h = h >> 3; // get height in byte
Kujira 0:1977c2310ef7 4545 y = y >> 3; // get Y location in byte
Kujira 0:1977c2310ef7 4546
Kujira 0:1977c2310ef7 4547 gu_cursor(x,y);
Kujira 0:1977c2310ef7 4548 // Realtime Image draw header
Kujira 0:1977c2310ef7 4549
Kujira 0:1977c2310ef7 4550 i2c.start();
Kujira 0:1977c2310ef7 4551 i2c.write(addr_gu);
Kujira 0:1977c2310ef7 4552 gu_sendOneByte(0x1f);
Kujira 0:1977c2310ef7 4553 gu_sendOneByte(0x28);
Kujira 0:1977c2310ef7 4554 gu_sendOneByte(0x66);
Kujira 0:1977c2310ef7 4555 gu_sendOneByte(0x11);
Kujira 0:1977c2310ef7 4556 gu_sendOneByte( w & 0xff);
Kujira 0:1977c2310ef7 4557 gu_sendOneByte( w >> 8);
Kujira 0:1977c2310ef7 4558 gu_sendOneByte( h & 0xff);
Kujira 0:1977c2310ef7 4559 gu_sendOneByte( h >> 8);
Kujira 0:1977c2310ef7 4560 gu_sendOneByte(0x01);
Kujira 0:1977c2310ef7 4561
Kujira 0:1977c2310ef7 4562 for(int i = 0; i<w; i++) {
Kujira 0:1977c2310ef7 4563 if(i<8) { // 8 dots from left
Kujira 0:1977c2310ef7 4564 gu_sendOneByte(data[i*2]);
Kujira 0:1977c2310ef7 4565 if(h>2) {
Kujira 0:1977c2310ef7 4566 for(int j=0; j<(h-2); j++) {
Kujira 0:1977c2310ef7 4567 if((data[i*2]&0x01)==0) {
Kujira 0:1977c2310ef7 4568 gu_sendOneByte(0x00);
Kujira 0:1977c2310ef7 4569 } else {
Kujira 0:1977c2310ef7 4570 gu_sendOneByte(0xff);
Kujira 0:1977c2310ef7 4571 }
Kujira 0:1977c2310ef7 4572 }
Kujira 0:1977c2310ef7 4573 }
Kujira 0:1977c2310ef7 4574 gu_sendOneByte(data[i*2+1]);
Kujira 0:1977c2310ef7 4575 } else if (i > (w-8)) { // 8 dots from right
Kujira 0:1977c2310ef7 4576
Kujira 0:1977c2310ef7 4577 gu_sendOneByte(data[(16+i-w)*2]);
Kujira 0:1977c2310ef7 4578 if(h>2) for(int j=0; j<(h-2); j++) {
Kujira 0:1977c2310ef7 4579 if((data[(16+i-w)*2]&0x01)==0) {
Kujira 0:1977c2310ef7 4580 gu_sendOneByte(0x00);
Kujira 0:1977c2310ef7 4581 } else {
Kujira 0:1977c2310ef7 4582 gu_sendOneByte(0xff);
Kujira 0:1977c2310ef7 4583 }
Kujira 0:1977c2310ef7 4584 }
Kujira 0:1977c2310ef7 4585 gu_sendOneByte(data[(16+i-w)*2+1]);
Kujira 0:1977c2310ef7 4586
Kujira 0:1977c2310ef7 4587 } else { // in the middle
Kujira 0:1977c2310ef7 4588 gu_sendOneByte(data[14]);
Kujira 0:1977c2310ef7 4589 if(h>2) {
Kujira 0:1977c2310ef7 4590 for(int j=0; j<(h-2); j++) {
Kujira 0:1977c2310ef7 4591 if((data[14]&0x01)==0) {
Kujira 0:1977c2310ef7 4592 gu_sendOneByte(0x00);
Kujira 0:1977c2310ef7 4593 } else {
Kujira 0:1977c2310ef7 4594 gu_sendOneByte(0xff);
Kujira 0:1977c2310ef7 4595 }
Kujira 0:1977c2310ef7 4596 }
Kujira 0:1977c2310ef7 4597 }
Kujira 0:1977c2310ef7 4598 gu_sendOneByte(data[15]);
Kujira 0:1977c2310ef7 4599 }
Kujira 0:1977c2310ef7 4600 }
Kujira 0:1977c2310ef7 4601
Kujira 0:1977c2310ef7 4602 i2c.stop();
Kujira 0:1977c2310ef7 4603
Kujira 0:1977c2310ef7 4604 }
Kujira 0:1977c2310ef7 4605
Kujira 0:1977c2310ef7 4606
Kujira 0:1977c2310ef7 4607 // ドット単位キャラクタ表示 p37
Kujira 0:1977c2310ef7 4608 void gu_print_dot(int x, int y, const char* ptext)
Kujira 0:1977c2310ef7 4609 {
Kujira 0:1977c2310ef7 4610
Kujira 0:1977c2310ef7 4611 i2c.start();
Kujira 0:1977c2310ef7 4612 i2c.write(addr_gu);
Kujira 0:1977c2310ef7 4613 gu_sendOneByte(0x1f);
Kujira 0:1977c2310ef7 4614 gu_sendOneByte(0x28);
Kujira 0:1977c2310ef7 4615 gu_sendOneByte(0x64);
Kujira 0:1977c2310ef7 4616 gu_sendOneByte(0x30);
Kujira 0:1977c2310ef7 4617 gu_sendOneByte(x & 0xff);
Kujira 0:1977c2310ef7 4618 gu_sendOneByte(x >> 8);
Kujira 0:1977c2310ef7 4619 gu_sendOneByte(y & 0xff);
Kujira 0:1977c2310ef7 4620 gu_sendOneByte(y >> 8);
Kujira 0:1977c2310ef7 4621 gu_sendOneByte(0x00);
Kujira 0:1977c2310ef7 4622
Kujira 0:1977c2310ef7 4623 int i=0;
Kujira 0:1977c2310ef7 4624 int j=0;
Kujira 0:1977c2310ef7 4625 while(*(ptext+i)) {
Kujira 0:1977c2310ef7 4626 if (*(ptext + i++) =='%') {
Kujira 0:1977c2310ef7 4627 j+=2; //文字列終端”0%"までインクリメント
Kujira 0:1977c2310ef7 4628 }
Kujira 0:1977c2310ef7 4629 }
Kujira 0:1977c2310ef7 4630
Kujira 0:1977c2310ef7 4631 gu_sendOneByte(i-j); //キャラクタデータ長
Kujira 0:1977c2310ef7 4632 gu_print(ptext); //キャラクタデータ
Kujira 0:1977c2310ef7 4633
Kujira 0:1977c2310ef7 4634 i2c.stop();
Kujira 0:1977c2310ef7 4635
Kujira 0:1977c2310ef7 4636 }
Kujira 0:1977c2310ef7 4637
Kujira 0:1977c2310ef7 4638 //
Kujira 0:1977c2310ef7 4639 // Print test//
Kujira 0:1977c2310ef7 4640 void gu_print(const char t[] )
Kujira 0:1977c2310ef7 4641 {
Kujira 0:1977c2310ef7 4642 i2c.start();
Kujira 0:1977c2310ef7 4643 i2c.write(addr_gu);
Kujira 0:1977c2310ef7 4644
Kujira 0:1977c2310ef7 4645 int i=0;
Kujira 0:1977c2310ef7 4646 int j=0;
Kujira 0:1977c2310ef7 4647 int k=0;
Kujira 0:1977c2310ef7 4648 while(t[i]) {
Kujira 0:1977c2310ef7 4649 if(t[i] != 37) {
Kujira 0:1977c2310ef7 4650 gu_sendOneByte(t[i++]);
Kujira 0:1977c2310ef7 4651 } else {
Kujira 0:1977c2310ef7 4652 i++;
Kujira 0:1977c2310ef7 4653 j=t[i++]-0x30;
Kujira 0:1977c2310ef7 4654 if(j>9) {
Kujira 0:1977c2310ef7 4655 j -= 7;
Kujira 0:1977c2310ef7 4656 }
Kujira 0:1977c2310ef7 4657 if(j>0x10) {
Kujira 0:1977c2310ef7 4658 j -= 0x20;
Kujira 0:1977c2310ef7 4659 }
Kujira 0:1977c2310ef7 4660 k=t[i++]-0x30;
Kujira 0:1977c2310ef7 4661 if(k>9) {
Kujira 0:1977c2310ef7 4662 k -= 7;
Kujira 0:1977c2310ef7 4663 }
Kujira 0:1977c2310ef7 4664 if(k>0x10) {
Kujira 0:1977c2310ef7 4665 k -= 0x20;
Kujira 0:1977c2310ef7 4666 }
Kujira 0:1977c2310ef7 4667 gu_sendOneByte(j*16+k);
Kujira 0:1977c2310ef7 4668 }
Kujira 0:1977c2310ef7 4669 }
Kujira 0:1977c2310ef7 4670 i2c.stop();
Kujira 0:1977c2310ef7 4671 }
Kujira 0:1977c2310ef7 4672
Kujira 0:1977c2310ef7 4673 void gu_RealTimeImage(int w, int h, char data[])
Kujira 0:1977c2310ef7 4674 {
Kujira 0:1977c2310ef7 4675 h = h >> 3; // get height in byte
Kujira 0:1977c2310ef7 4676
Kujira 0:1977c2310ef7 4677 i2c.start();
Kujira 0:1977c2310ef7 4678 gu_sendOneByte(addr_gu);
Kujira 0:1977c2310ef7 4679 gu_sendOneByte(0x1f);
Kujira 0:1977c2310ef7 4680 gu_sendOneByte(0x28);
Kujira 0:1977c2310ef7 4681 gu_sendOneByte(0x66);
Kujira 0:1977c2310ef7 4682 gu_sendOneByte(0x11);
Kujira 0:1977c2310ef7 4683 gu_sendOneByte( w & 0xff);
Kujira 0:1977c2310ef7 4684 gu_sendOneByte( w >> 8);
Kujira 0:1977c2310ef7 4685 gu_sendOneByte( h & 0xff);
Kujira 0:1977c2310ef7 4686 gu_sendOneByte( h >> 8);
Kujira 0:1977c2310ef7 4687 gu_sendOneByte(0x01);
Kujira 0:1977c2310ef7 4688 for( int i=0; i < ( w * h ); i++) {
Kujira 0:1977c2310ef7 4689 gu_sendOneByte( data[i]);
Kujira 0:1977c2310ef7 4690 }
Kujira 0:1977c2310ef7 4691 i2c.stop();
Kujira 0:1977c2310ef7 4692 }
Kujira 0:1977c2310ef7 4693
Kujira 0:1977c2310ef7 4694 // Draw RealTimeBitImage by dot
Kujira 0:1977c2310ef7 4695 void gu_RealTimeImage_dot(int x, int y, int w, int h, const char data[])
Kujira 0:1977c2310ef7 4696 {
Kujira 0:1977c2310ef7 4697 i2c.start();
Kujira 0:1977c2310ef7 4698 gu_sendOneByte(addr_gu);
Kujira 0:1977c2310ef7 4699 gu_sendOneByte(0x1f);
Kujira 0:1977c2310ef7 4700 gu_sendOneByte(0x28);
Kujira 0:1977c2310ef7 4701 gu_sendOneByte(0x64);
Kujira 0:1977c2310ef7 4702 gu_sendOneByte(0x21);
Kujira 0:1977c2310ef7 4703 gu_sendOneByte(x & 0xff);
Kujira 0:1977c2310ef7 4704 gu_sendOneByte(x >> 8);
Kujira 0:1977c2310ef7 4705 gu_sendOneByte(y & 0xff);
Kujira 0:1977c2310ef7 4706 gu_sendOneByte(y >> 8);
Kujira 0:1977c2310ef7 4707 gu_sendOneByte(w & 0xff);
Kujira 0:1977c2310ef7 4708 gu_sendOneByte(w >> 8);
Kujira 0:1977c2310ef7 4709 gu_sendOneByte(h & 0xff);
Kujira 0:1977c2310ef7 4710 gu_sendOneByte(h >> 8);
Kujira 0:1977c2310ef7 4711 gu_sendOneByte(0x01);
Kujira 0:1977c2310ef7 4712 for(int i=0; i<( w * ((h + 7)>>3)); i++ ) {
Kujira 0:1977c2310ef7 4713 gu_sendOneByte(data[i]);
Kujira 0:1977c2310ef7 4714 }
Kujira 0:1977c2310ef7 4715 i2c.stop();
Kujira 0:1977c2310ef7 4716 }
Kujira 0:1977c2310ef7 4717
Kujira 0:1977c2310ef7 4718
Kujira 0:1977c2310ef7 4719 // Set Font width
Kujira 0:1977c2310ef7 4720 void gu_fontWidth(const char fontWidth)
Kujira 0:1977c2310ef7 4721 {
Kujira 0:1977c2310ef7 4722 /*
Kujira 0:1977c2310ef7 4723 gu_sendOneByte(0x1f);
Kujira 0:1977c2310ef7 4724 gu_sendOneByte(0x28);
Kujira 0:1977c2310ef7 4725 gu_sendOneByte(0x67);
Kujira 0:1977c2310ef7 4726 gu_sendOneByte(0x03);
Kujira 0:1977c2310ef7 4727 gu_sendOneByte(fontWidth);
Kujira 0:1977c2310ef7 4728 */
Kujira 0:1977c2310ef7 4729
Kujira 0:1977c2310ef7 4730 char accom_gu[5] ; //gu-DへのI2Cコマンド用配列
Kujira 0:1977c2310ef7 4731
Kujira 0:1977c2310ef7 4732 accom_gu[0] = 0x1F;
Kujira 0:1977c2310ef7 4733 accom_gu[1] = 0x28;
Kujira 0:1977c2310ef7 4734 accom_gu[2] = 0x67;
Kujira 0:1977c2310ef7 4735 accom_gu[3] = 0x03;
Kujira 0:1977c2310ef7 4736 accom_gu[4] = fontWidth;
Kujira 0:1977c2310ef7 4737
Kujira 0:1977c2310ef7 4738 i2c.write(addr_gu, accom_gu, 5);
Kujira 0:1977c2310ef7 4739
Kujira 0:1977c2310ef7 4740 }
Kujira 0:1977c2310ef7 4741
Kujira 0:1977c2310ef7 4742 //
Kujira 0:1977c2310ef7 4743 // Move Cursor
Kujira 0:1977c2310ef7 4744 // 動作確認完了 2017/6/26
Kujira 0:1977c2310ef7 4745 void gu_cursor(int x, int y)
Kujira 0:1977c2310ef7 4746 {
Kujira 0:1977c2310ef7 4747
Kujira 0:1977c2310ef7 4748 /*
Kujira 0:1977c2310ef7 4749 gu_sendOneByte(0x1f);
Kujira 0:1977c2310ef7 4750 gu_sendOneByte(0x24);
Kujira 0:1977c2310ef7 4751 gu_sendOneByte(x%256);
Kujira 0:1977c2310ef7 4752 gu_sendOneByte(x>>8);
Kujira 0:1977c2310ef7 4753 gu_sendOneByte(y%256);
Kujira 0:1977c2310ef7 4754 gu_sendOneByte(y>>8);
Kujira 0:1977c2310ef7 4755 */
Kujira 0:1977c2310ef7 4756
Kujira 0:1977c2310ef7 4757 char accom_gu[6] ; //gu-DへのI2Cコマンド用配列
Kujira 0:1977c2310ef7 4758
Kujira 0:1977c2310ef7 4759 accom_gu[0] = 0x1f;
Kujira 0:1977c2310ef7 4760 accom_gu[1] = 0x24;
Kujira 0:1977c2310ef7 4761 accom_gu[2] = x & 0xFF;
Kujira 0:1977c2310ef7 4762 accom_gu[3] = x >> 8;
Kujira 0:1977c2310ef7 4763 accom_gu[4] = y & 0xFF;
Kujira 0:1977c2310ef7 4764 accom_gu[5] = y >> 8;
Kujira 0:1977c2310ef7 4765
Kujira 0:1977c2310ef7 4766 i2c.write(addr_gu, accom_gu, 6);
Kujira 0:1977c2310ef7 4767
Kujira 0:1977c2310ef7 4768 }
Kujira 0:1977c2310ef7 4769
Kujira 0:1977c2310ef7 4770 // Font Body Size
Kujira 0:1977c2310ef7 4771 // 動作確認2017/6/26
Kujira 0:1977c2310ef7 4772 void gu_fontsize(const char code)
Kujira 0:1977c2310ef7 4773 {
Kujira 0:1977c2310ef7 4774 /*
Kujira 0:1977c2310ef7 4775 gu_sendOneByte(0x1f);
Kujira 0:1977c2310ef7 4776 gu_sendOneByte(0x28);
Kujira 0:1977c2310ef7 4777 gu_sendOneByte(0x67);
Kujira 0:1977c2310ef7 4778 gu_sendOneByte(0x01);
Kujira 0:1977c2310ef7 4779 gu_sendOneByte(code);
Kujira 0:1977c2310ef7 4780 */
Kujira 0:1977c2310ef7 4781 char accom_gu[5] ; //gu-DへのI2Cコマンド用配列
Kujira 0:1977c2310ef7 4782
Kujira 0:1977c2310ef7 4783 accom_gu[0] = 0x1F;
Kujira 0:1977c2310ef7 4784 accom_gu[1] = 0x28;
Kujira 0:1977c2310ef7 4785 accom_gu[2] = 0x67;
Kujira 0:1977c2310ef7 4786 accom_gu[3] = 0x01;
Kujira 0:1977c2310ef7 4787 accom_gu[4] = code;
Kujira 0:1977c2310ef7 4788
Kujira 0:1977c2310ef7 4789 i2c.write(addr_gu, accom_gu, 5);
Kujira 0:1977c2310ef7 4790
Kujira 0:1977c2310ef7 4791 }
Kujira 0:1977c2310ef7 4792
Kujira 0:1977c2310ef7 4793
Kujira 0:1977c2310ef7 4794 //
Kujira 0:1977c2310ef7 4795 // Reverse video font
Kujira 0:1977c2310ef7 4796 void gu_fontReverse(int code)
Kujira 0:1977c2310ef7 4797 {
Kujira 0:1977c2310ef7 4798
Kujira 0:1977c2310ef7 4799 i2c.start();
Kujira 0:1977c2310ef7 4800 gu_sendOneByte(addr_gu);
Kujira 0:1977c2310ef7 4801 gu_sendOneByte(0x1f);
Kujira 0:1977c2310ef7 4802 gu_sendOneByte(0x72);
Kujira 0:1977c2310ef7 4803 gu_sendOneByte(code);
Kujira 0:1977c2310ef7 4804 i2c.stop();
Kujira 0:1977c2310ef7 4805
Kujira 0:1977c2310ef7 4806 }
Kujira 0:1977c2310ef7 4807
Kujira 0:1977c2310ef7 4808 void gu_touchPara(int x,int y)
Kujira 0:1977c2310ef7 4809 {
Kujira 0:1977c2310ef7 4810 i2c.start();
Kujira 0:1977c2310ef7 4811 i2c.write(addr_gu);
Kujira 0:1977c2310ef7 4812 i2c.write(0x1F);
Kujira 0:1977c2310ef7 4813 i2c.write(0x4B);
Kujira 0:1977c2310ef7 4814 i2c.write(0x70);
Kujira 0:1977c2310ef7 4815 i2c.write(x & 0xFF);
Kujira 0:1977c2310ef7 4816 i2c.write(y & 0xFF);
Kujira 0:1977c2310ef7 4817 i2c.stop();
Kujira 0:1977c2310ef7 4818 }
Kujira 0:1977c2310ef7 4819
Kujira 0:1977c2310ef7 4820 // Magnify Font キャラクタ拡大表示
Kujira 0:1977c2310ef7 4821 void gu_magnify(int x, int y)
Kujira 0:1977c2310ef7 4822 {
Kujira 0:1977c2310ef7 4823 gu_sendOneByte(0x1f);
Kujira 0:1977c2310ef7 4824 gu_sendOneByte(0x28);
Kujira 0:1977c2310ef7 4825 gu_sendOneByte(0x67);
Kujira 0:1977c2310ef7 4826 gu_sendOneByte(0x40);
Kujira 0:1977c2310ef7 4827 gu_sendOneByte(x);
Kujira 0:1977c2310ef7 4828 gu_sendOneByte(y);
Kujira 0:1977c2310ef7 4829 }
Kujira 0:1977c2310ef7 4830
Kujira 0:1977c2310ef7 4831 /*********************************
Kujira 0:1977c2310ef7 4832 ノリタケ関数
Kujira 0:1977c2310ef7 4833 ここまで
Kujira 0:1977c2310ef7 4834 **********************************/
Kujira 0:1977c2310ef7 4835 //
Kujira 0:1977c2310ef7 4836 //Show text
Kujira 0:1977c2310ef7 4837 void gu_print1(const char* ptext)
Kujira 0:1977c2310ef7 4838 {
Kujira 0:1977c2310ef7 4839 i2c.write(addr_gu, ptext, strlen(ptext));
Kujira 0:1977c2310ef7 4840 }
Kujira 0:1977c2310ef7 4841 //
Kujira 0:1977c2310ef7 4842 //輝度調整
Kujira 0:1977c2310ef7 4843 void gu_luminance(const char* cl)
Kujira 0:1977c2310ef7 4844 {
Kujira 0:1977c2310ef7 4845 i2c.start();
Kujira 0:1977c2310ef7 4846 i2c.write(addr_gu);
Kujira 0:1977c2310ef7 4847 i2c.write(0x1F);
Kujira 0:1977c2310ef7 4848 i2c.write(0x58);
Kujira 0:1977c2310ef7 4849 i2c.write(*cl & 0xFF);
Kujira 0:1977c2310ef7 4850 i2c.stop();
Kujira 0:1977c2310ef7 4851 }
Kujira 0:1977c2310ef7 4852 //
Kujira 0:1977c2310ef7 4853 //gu_Dクラス用 1バイト送信
Kujira 0:1977c2310ef7 4854 void gu_sendOneByte(char data) //arduino->mbed
Kujira 0:1977c2310ef7 4855 {
Kujira 0:1977c2310ef7 4856 i2c.write(data);
Kujira 0:1977c2310ef7 4857 //while(digitalRead(gu_MBUSY)==HIGH){} // wait for ready.
Kujira 0:1977c2310ef7 4858 //Serial.write(data); // send a byte.
Kujira 0:1977c2310ef7 4859 }
Kujira 0:1977c2310ef7 4860 //
Kujira 0:1977c2310ef7 4861 //CF+RF
Kujira 0:1977c2310ef7 4862 void gu_CRLF()
Kujira 0:1977c2310ef7 4863 {
Kujira 0:1977c2310ef7 4864 char com[2];
Kujira 0:1977c2310ef7 4865
Kujira 0:1977c2310ef7 4866 com[0] = 0x0A; //LF
Kujira 0:1977c2310ef7 4867 com[1] = 0x0D; //CR
Kujira 0:1977c2310ef7 4868 i2c.write(addr_gu, com, 2); //LF+CR
Kujira 0:1977c2310ef7 4869 }
Kujira 0:1977c2310ef7 4870 //
Kujira 0:1977c2310ef7 4871 //リバース指定or解除
Kujira 0:1977c2310ef7 4872 void gu_reverse(char x) //リバース指定or解除
Kujira 0:1977c2310ef7 4873 {
Kujira 0:1977c2310ef7 4874 char com[3];
Kujira 0:1977c2310ef7 4875
Kujira 0:1977c2310ef7 4876 com[0] = 0x1F;
Kujira 0:1977c2310ef7 4877 com[1] = 0x72;
Kujira 0:1977c2310ef7 4878 com[2] = x & 0xFF; //0x01:指定 0x00:解除
Kujira 0:1977c2310ef7 4879 i2c.write(addr_gu, com, 3);
Kujira 0:1977c2310ef7 4880 }
Kujira 0:1977c2310ef7 4881 //1byte送信用
Kujira 0:1977c2310ef7 4882 void gu_onebyte(char data)
Kujira 0:1977c2310ef7 4883 {
Kujira 0:1977c2310ef7 4884 i2c.write(addr_gu, &data, 1);
Kujira 0:1977c2310ef7 4885 }
Kujira 0:1977c2310ef7 4886 /*****************************************
Kujira 0:1977c2310ef7 4887
Kujira 0:1977c2310ef7 4888 SD CARD
Kujira 0:1977c2310ef7 4889
Kujira 0:1977c2310ef7 4890 *****************************************/
Kujira 0:1977c2310ef7 4891 void sd_writetext(const char* ptext)
Kujira 0:1977c2310ef7 4892 {
Kujira 0:1977c2310ef7 4893
Kujira 0:1977c2310ef7 4894 mkdir("/sd/mydir", 0777);
Kujira 0:1977c2310ef7 4895
Kujira 0:1977c2310ef7 4896 FILE *fp = fopen("/sd/mydir/iop.txt", "w");//ディレクトリとファイル名の指定
Kujira 0:1977c2310ef7 4897
Kujira 0:1977c2310ef7 4898 if(fp == NULL) {
Kujira 0:1977c2310ef7 4899
Kujira 0:1977c2310ef7 4900 gu_fontsize(1);
Kujira 0:1977c2310ef7 4901 gu_cursor(0,2);
Kujira 0:1977c2310ef7 4902 /* ver1.1.3*/
Kujira 0:1977c2310ef7 4903 gu_print1("No SD card");
Kujira 0:1977c2310ef7 4904 //gu_print1("Could not open file for SD card");
Kujira 0:1977c2310ef7 4905 //error("Could not open file for write\n");
Kujira 0:1977c2310ef7 4906
Kujira 0:1977c2310ef7 4907 }
Kujira 0:1977c2310ef7 4908
Kujira 0:1977c2310ef7 4909 fprintf(fp, ptext);
Kujira 0:1977c2310ef7 4910 fclose(fp);
Kujira 0:1977c2310ef7 4911
Kujira 0:1977c2310ef7 4912 }