瀏覽代碼

ADC 500 10mV이내 값 평균 내는 기능 추가

/ EERPROM Table ZeroWrite 기능 추가
PYJ 5 年之前
父節點
當前提交
1ddb9a28d8
共有 8 個文件被更改,包括 183 次插入78 次删除
  1. 1 0
      Bluecell_Inc/Bluecell_operate.h
  2. 2 1
      Bluecell_Inc/eeprom.h
  3. 136 62
      Bluecell_Src/Bluecell_operate.c
  4. 23 1
      Bluecell_Src/eeprom.c
  5. 1 2
      Bluecell_Src/uart.c
  6. 3 0
      Inc/main.h
  7. 1 1
      STM32F103ZET_JDASMBIC.ioc
  8. 16 11
      Src/main.c

+ 1 - 0
Bluecell_Inc/Bluecell_operate.h

@@ -533,6 +533,7 @@ typedef struct{
533 533
     uint8_t bluecell_User_UL3_H;  uint8_t bluecell_User_UL3_L;
534 534
     uint8_t bluecell_User_UL4_H;  uint8_t bluecell_User_UL4_L;
535 535
     uint8_t bluecell_User_TEMP_H;  uint8_t bluecell_User_TEMP_L;
536
+    uint8_t bluecell_User_TEMP_OFFSET_H;  uint8_t bluecell_User_TEMP_OFFSET_L;    
536 537
     uint8_t bluecell_crc;
537 538
     uint8_t bluecell_etx;
538 539
 

+ 2 - 1
Bluecell_Inc/eeprom.h

@@ -14,7 +14,7 @@
14 14
 #define EEPROM_ATT_BASE					  0x0000
15 15
 
16 16
 #if 1 // PYJ.2020.04.25_BEGIN -- 
17
-#define EEPROM_WINDOW_STATUS_ADDRESDS	 ((EEPROM_ATT_BASE + (sizeof(BLUESTATUS_st) + 2)) & 0xFFFF) //96byte
17
+#define EEPROM_WINDOW_STATUS_ADDRESDS	 ((EEPROM_ATT_BASE + (sizeof(BLUESTATUS_st))) & 0xFFFF) //96byte
18 18
 #define EEPROM_ATT_DL1_TABLE_ADDRESDS	 (( EEPROM_WINDOW_STATUS_ADDRESDS  + (sizeof(ATT_TABLE_st))  )& 0xFFFF) //128
19 19
 #define EEPROM_ATT_DL2_TABLE_ADDRESDS	 (( EEPROM_ATT_DL1_TABLE_ADDRESDS  + (sizeof(ATT_TABLE_st))  ) & 0xFFFF) 
20 20
 #define EEPROM_ATT_DL3_TABLE_ADDRESDS	 (( EEPROM_ATT_DL2_TABLE_ADDRESDS  + (sizeof(ATT_TABLE_st))  ) & 0xFFFF)
@@ -89,6 +89,7 @@ HAL_StatusTypeDef EEPROM_M24C08_write(uint8_t devid,uint16_t Address,uint8_t* da
89 89
 
90 90
 HAL_StatusTypeDef EEPROM_M24C08_ByteRead(uint16_t devid,uint16_t Address,uint8_t* data,uint8_t size);
91 91
 HAL_StatusTypeDef EEPROM_M24C08_Bytewrite(uint16_t devid,uint16_t Address,uint8_t* data,uint8_t size);
92
+HAL_StatusTypeDef EEPROM_M24C08_Zerowrite(uint8_t devid,uint16_t Address);
92 93
 
93 94
 void EEPROM_M24C08_Init(void);
94 95
 

+ 136 - 62
Bluecell_Src/Bluecell_operate.c

@@ -1,4 +1,5 @@
1 1
 #include <stdio.h>
2
+#include <stdlib.h>
2 3
 #include "main.h"
3 4
 #include "Bluecell_operate.h"
4 5
 #include "PE43711.h"
@@ -257,6 +258,7 @@ uint8_t MBIC_TxDataArray[256] = {0,};
257 258
 void Boot_LED_Toggle(void){
258 259
   if(LedTimerCnt > 500){
259 260
     HAL_GPIO_TogglePin(BOOT_LED_GPIO_Port,BOOT_LED_Pin);
261
+    HAL_GPIO_TogglePin(LED_ACT_GPIO_Port,LED_ACT_Pin);
260 262
     LedTimerCnt = 0;
261 263
 //    printf("LED OF OFF\r\n");
262 264
   }
@@ -974,6 +976,8 @@ void Bluecell_TableSave(uint8_t* data){
974 976
     
975 977
 }
976 978
 uint8_t Txdata[512];
979
+extern HAL_StatusTypeDef EEPROM_M24C08_Zerowrite(uint8_t devid,uint16_t Address);
980
+
977 981
 bool Bluecell_Operate(uint8_t* data){
978 982
   uint8_t datatype = data[BLUECELL_TYPE];
979 983
 
@@ -1048,6 +1052,7 @@ bool Bluecell_Operate(uint8_t* data){
1048 1052
             CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1049 1053
 //            printf("ATT_DL1_PATH ON\r\n");
1050 1054
         }
1055
+        bluecell_Currdatastatus.ATT_DL1_PATH = data[BLUECELL_DATA];
1051 1056
 	
1052 1057
 
1053 1058
 		break;
@@ -1062,18 +1067,19 @@ bool Bluecell_Operate(uint8_t* data){
1062 1067
             CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1063 1068
 
1064 1069
         }
1070
+        bluecell_Currdatastatus.ATT_UL1_PATH = data[BLUECELL_DATA];
1065 1071
 //        printf("Function : %s Line %d \r\n",__func__,__LINE__);
1066 1072
 		break;
1067 1073
 	case ATT_SelfTest1		 :
1068 1074
         if(data[BLUECELL_DATA]==0){
1069
-        HAL_GPIO_WritePin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin,GPIO_PIN_RESET);//CLOCK
1070
-        HAL_GPIO_WritePin(PATH_SW1_GPIO_Port,PATH_SW1_Pin,GPIO_PIN_SET);//CLOCK
1075
+            HAL_GPIO_WritePin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin,GPIO_PIN_RESET);//CLOCK
1076
+            HAL_GPIO_WritePin(PATH_SW1_GPIO_Port,PATH_SW1_Pin,GPIO_PIN_SET);//CLOCK
1071 1077
         }
1072 1078
         else{
1073 1079
             HAL_GPIO_WritePin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin,GPIO_PIN_SET);//CLOCK
1074 1080
             HAL_GPIO_WritePin(PATH_SW1_GPIO_Port,PATH_SW1_Pin,GPIO_PIN_RESET);//CLOCK
1075 1081
         }
1076
-        bluecell_Prevdatastatus.Selftest1 = data[BLUECELL_DATA];
1082
+        bluecell_Currdatastatus.Selftest1 = data[BLUECELL_DATA];
1077 1083
 //		printf("Function : %s Line %d \r\n",__func__,__LINE__);
1078 1084
 		break;
1079 1085
 	case ATT_DL2_PATH		 :
@@ -1082,7 +1088,11 @@ bool Bluecell_Operate(uint8_t* data){
1082 1088
         }
1083 1089
         else{
1084 1090
             HAL_GPIO_WritePin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin,GPIO_PIN_SET);//CLOCK
1091
+            bluecell_Prevdatastatus.ATT_DL2_H = ~bluecell_Prevdatastatus.ATT_DL2_H;
1092
+            bluecell_Prevdatastatus.ATT_DL2_L = ~bluecell_Prevdatastatus.ATT_DL2_L;
1093
+            CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1085 1094
         }
1095
+        bluecell_Currdatastatus.ATT_DL2_PATH = data[BLUECELL_DATA];
1086 1096
 //		printf("Function : %s Line %d \r\n",__func__,__LINE__);
1087 1097
 		break;
1088 1098
 
@@ -1097,6 +1107,7 @@ bool Bluecell_Operate(uint8_t* data){
1097 1107
             bluecell_Prevdatastatus.ATT_UL2_L = ~bluecell_Prevdatastatus.ATT_UL2_L;
1098 1108
             CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1099 1109
         }
1110
+        bluecell_Currdatastatus.ATT_UL2_PATH = data[BLUECELL_DATA];
1100 1111
 		break;
1101 1112
 	case ATT_SelfTest2		 :
1102 1113
         if(data[BLUECELL_DATA]==0){
@@ -1106,7 +1117,7 @@ bool Bluecell_Operate(uint8_t* data){
1106 1117
             HAL_GPIO_WritePin(PATH_SW2_GPIO_Port,PATH_SW2_Pin,GPIO_PIN_RESET);//CLOCK
1107 1118
             HAL_GPIO_WritePin(_PATH_SW2_GPIO_Port,_PATH_SW2_Pin,GPIO_PIN_SET);//CLOCK
1108 1119
         }
1109
-        bluecell_Prevdatastatus.Selftest2 = data[BLUECELL_DATA];
1120
+        bluecell_Currdatastatus.Selftest2 = data[BLUECELL_DATA];
1110 1121
 //		printf("Function : %s Line %d \r\n",__func__,__LINE__);
1111 1122
 		break;
1112 1123
 	case ATT_DL3_PATH :
@@ -1119,6 +1130,7 @@ bool Bluecell_Operate(uint8_t* data){
1119 1130
             bluecell_Prevdatastatus.ATT_DL3_L = ~bluecell_Prevdatastatus.ATT_DL3_L;
1120 1131
             CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1121 1132
         }
1133
+        bluecell_Currdatastatus.ATT_DL3_PATH = data[BLUECELL_DATA];
1122 1134
 //		printf("Function : %s Line %d \r\n",__func__,__LINE__);
1123 1135
 		break;
1124 1136
 	case ATT_UL3_PATH :
@@ -1131,6 +1143,7 @@ bool Bluecell_Operate(uint8_t* data){
1131 1143
             bluecell_Prevdatastatus.ATT_UL3_L = ~bluecell_Prevdatastatus.ATT_UL3_L;
1132 1144
             CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1133 1145
         }
1146
+        bluecell_Currdatastatus.ATT_UL3_PATH = data[BLUECELL_DATA];
1134 1147
 //		printf("Function : %s Line %d \r\n",__func__,__LINE__);
1135 1148
 		break;
1136 1149
 	case ATT_SelfTest3 :
@@ -1142,7 +1155,7 @@ bool Bluecell_Operate(uint8_t* data){
1142 1155
             HAL_GPIO_WritePin(PATH_SW3_GPIO_Port,PATH_SW3_Pin,GPIO_PIN_RESET);//CLOCK
1143 1156
             HAL_GPIO_WritePin(_PATH_SW3_GPIO_Port,_PATH_SW3_Pin,GPIO_PIN_SET);//CLOCK
1144 1157
         }
1145
-        bluecell_Prevdatastatus.Selftest3 = data[BLUECELL_DATA];
1158
+        bluecell_Currdatastatus.Selftest3 = data[BLUECELL_DATA];
1146 1159
 //		printf("Function : %s Line %d \r\n",__func__,__LINE__);
1147 1160
 		break;
1148 1161
 	case ATT_DL4_PATH :
@@ -1155,6 +1168,7 @@ bool Bluecell_Operate(uint8_t* data){
1155 1168
             CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1156 1169
 
1157 1170
         }
1171
+        bluecell_Currdatastatus.ATT_DL4_PATH = data[BLUECELL_DATA];
1158 1172
 //		printf("Function : %s Line %d \r\n",__func__,__LINE__);
1159 1173
 		break;
1160 1174
 	case ATT_UL4_PATH:
@@ -1167,6 +1181,7 @@ bool Bluecell_Operate(uint8_t* data){
1167 1181
             bluecell_Prevdatastatus.ATT_UL4_L = ~bluecell_Prevdatastatus.ATT_UL4_L;
1168 1182
             CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1169 1183
         }
1184
+        bluecell_Currdatastatus.ATT_UL4_PATH = data[BLUECELL_DATA];
1170 1185
 //		printf("Function : %s Line %d \r\n",__func__,__LINE__);
1171 1186
 		break;
1172 1187
 	case ATT_SelfTest4 :
@@ -1177,7 +1192,7 @@ bool Bluecell_Operate(uint8_t* data){
1177 1192
 	    HAL_GPIO_WritePin(_PATH_SW4_GPIO_Port,_PATH_SW4_Pin,GPIO_PIN_SET);//CLOCK
1178 1193
 	    HAL_GPIO_WritePin(PATH_SW4_GPIO_Port,PATH_SW4_Pin,GPIO_PIN_RESET);//CLOCK
1179 1194
 	  }
1180
-      bluecell_Prevdatastatus.Selftest4 = data[BLUECELL_DATA];
1195
+      bluecell_Currdatastatus.Selftest4 = data[BLUECELL_DATA];
1181 1196
 //		printf("Function : %s Line %d \r\n",__func__,__LINE__);
1182 1197
 		break;
1183 1198
     case ALC1_EN :
@@ -1278,11 +1293,13 @@ bool Bluecell_Operate(uint8_t* data){
1278 1293
         break;
1279 1294
     case Bluecell_StatusSave:
1280 1295
 //        printf("Copy Complete");
1281
-        Bluecell_StructCpy(&DataWrite[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
1282
-        EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_BASE),&DataWrite[0],sizeof(BLUESTATUS_st));
1283
-        Bluecell_StructCpy(&Txdata[0],&DataWrite[0],sizeof(BLUESTATUS_st));
1284
-        Txdata[sizeof(BLUESTATUS_st) - 2] = STH30_CreateCrc(&Txdata[BLUECELL_TYPE], sizeof(BLUESTATUS_st) - 3);
1285
-        Uart1_Data_Send(&Txdata[0], sizeof(BLUESTATUS_st));        
1296
+//        Bluecell_StructCpy(&DataWrite[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
1297
+//        EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_BASE),&DataWrite[0],sizeof(BLUESTATUS_st));
1298
+//        Bluecell_StructCpy(&Txdata[0],&DataWrite[0],sizeof(BLUESTATUS_st));
1299
+//        Txdata[sizeof(BLUESTATUS_st) - 2] = STH30_CreateCrc(&Txdata[BLUECELL_TYPE], sizeof(BLUESTATUS_st) - 3);
1300
+//        Uart1_Data_Send(&Txdata[0], sizeof(BLUESTATUS_st));        
1301
+        EEPROM_M24C08_Zerowrite(EEPROM_M24C08_ID ,(EEPROM_ATT_BASE));
1302
+
1286 1303
         break;
1287 1304
 
1288 1305
     case Bluecell_DL1_USER: 
@@ -1332,6 +1349,9 @@ bool Bluecell_Operate(uint8_t* data){
1332 1349
   if(datatype != Bluecell_StatusReq){
1333 1350
       Bluecell_StructCpy(&DataWrite[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
1334 1351
       EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_BASE),&DataWrite[0],sizeof(BLUESTATUS_st));
1352
+//      Bluecell_StructCpy(&Txdata[0],&DataWrite[0],sizeof(BLUESTATUS_st));
1353
+//      Txdata[sizeof(BLUESTATUS_st) - 2] = STH30_CreateCrc(&Txdata[BLUECELL_TYPE], sizeof(BLUESTATUS_st) - 3);
1354
+//      Uart1_Data_Send(&Txdata[0], sizeof(BLUESTATUS_st));        
1335 1355
   }
1336 1356
   return true;
1337 1357
 }
@@ -1340,11 +1360,6 @@ void DataStatusSet(void){
1340 1360
         bluecell_Currdatastatus.bluecell_type = Bluecell_StatusReq;
1341 1361
         bluecell_Currdatastatus.bluecell_length = sizeof(bluecell_Currdatastatus) - 3;    
1342 1362
         bluecell_Currdatastatus.bluecell_crcindex = sizeof(bluecell_Currdatastatus) - 2 + 1;    
1343
-        bluecell_Currdatastatus.Selftest1 = HAL_GPIO_ReadPin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin);
1344
-        bluecell_Currdatastatus.Selftest2 = HAL_GPIO_ReadPin(_PATH_SW2_GPIO_Port,_PATH_SW2_Pin);
1345
-        bluecell_Currdatastatus.Selftest3 = HAL_GPIO_ReadPin(_PATH_SW3_GPIO_Port,_PATH_SW3_Pin);
1346
-        bluecell_Currdatastatus.Selftest4 = HAL_GPIO_ReadPin(_PATH_SW4_GPIO_Port,_PATH_SW4_Pin);
1347
-        bluecell_Currdatastatus.ATT_DL1_PATH = HAL_GPIO_ReadPin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin);//CLOCK;
1348 1363
         bluecell_Currdatastatus.ATT_DL2_PATH = HAL_GPIO_ReadPin(PATH_EN_DL2_GPIO_Port,PATH_EN_DL2_Pin);//CLOCK;
1349 1364
         bluecell_Currdatastatus.ATT_DL3_PATH = HAL_GPIO_ReadPin(PATH_EN_DL3_GPIO_Port,PATH_EN_DL3_Pin);//CLOCK;
1350 1365
         bluecell_Currdatastatus.ATT_DL4_PATH = HAL_GPIO_ReadPin(PATH_EN_DL4_GPIO_Port,PATH_EN_DL4_Pin);//CLOCK;
@@ -1356,44 +1371,8 @@ void DataStatusSet(void){
1356 1371
              
1357 1372
         
1358 1373
      
1359
-        /*bluecell_Currdatastatus.ATT_AGC1_ONOFF;
1360
-        bluecell_Currdatastatus.ATT_ALC1_ONOFF;
1361
-        bluecell_Currdatastatus.ATT_AGC2_ONOFF;
1362
-        bluecell_Currdatastatus.ATT_ALC2_ONOFF;
1363
-        bluecell_Currdatastatus.ATT_AGC3_ONOFF;
1364
-        bluecell_Currdatastatus.ATT_ALC3_ONOFF;
1365
-        bluecell_Currdatastatus.ATT_AGC4_ONOFF;
1366
-        bluecell_Currdatastatus.ATT_ALC4_ONOFF;
1367
-        bluecell_Currdatastatus.ATT_ALC1_MIN_H;
1368
-        bluecell_Currdatastatus.ATT_ALC1_MIN_L;
1369
-        bluecell_Currdatastatus.ATT_ALC1_MAX_H;
1370
-        bluecell_Currdatastatus.ATT_ALC1_MAX_L;
1371
-        bluecell_Currdatastatus.ATT_ALC2_MIN_H;
1372
-        bluecell_Currdatastatus.ATT_ALC2_MIN_L;
1373
-        bluecell_Currdatastatus.ATT_ALC2_MAX_H;
1374
-        bluecell_Currdatastatus.ATT_ALC2_MAX_L;
1375
-        bluecell_Currdatastatus.ATT_ALC3_MIN_H;
1376
-        bluecell_Currdatastatus.ATT_ALC3_MIN_L;
1377
-        bluecell_Currdatastatus.ATT_ALC3_MAX_H;
1378
-        bluecell_Currdatastatus.ATT_ALC3_MAX_L;
1379
-        bluecell_Currdatastatus.ATT_ALC4_MIN_H;
1380
-        bluecell_Currdatastatus.ATT_ALC4_MIN_L;
1381
-        bluecell_Currdatastatus.ATT_ALC4_MAX_H;
1382
-        bluecell_Currdatastatus.ATT_ALC4_MAX_L;  */
1383 1374
 }
1384 1375
  void Bluecell_DataInit(){
1385
-    HAL_GPIO_WritePin(PATH_SW1_GPIO_Port,_PATH_SW1_Pin,bluecell_Currdatastatus.Selftest1   );     
1386
-    HAL_GPIO_WritePin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin,bluecell_Currdatastatus.Selftest1   );     
1387
-    
1388
-    HAL_GPIO_WritePin(PATH_SW2_GPIO_Port,_PATH_SW2_Pin,bluecell_Currdatastatus.Selftest2   );     
1389
-    HAL_GPIO_WritePin(_PATH_SW2_GPIO_Port,_PATH_SW2_Pin,bluecell_Currdatastatus.Selftest2   );     
1390
-    
1391
-    HAL_GPIO_WritePin(PATH_SW3_GPIO_Port,_PATH_SW3_Pin,bluecell_Currdatastatus.Selftest3   );     
1392
-    HAL_GPIO_WritePin(_PATH_SW3_GPIO_Port,_PATH_SW3_Pin,bluecell_Currdatastatus.Selftest3   );     
1393
-    
1394
-    HAL_GPIO_WritePin(PATH_SW4_GPIO_Port,_PATH_SW4_Pin,bluecell_Currdatastatus.Selftest4   );     
1395
-    HAL_GPIO_WritePin(_PATH_SW4_GPIO_Port,_PATH_SW4_Pin,bluecell_Currdatastatus.Selftest4   );     
1396
-
1397 1376
 
1398 1377
     
1399 1378
     HAL_GPIO_WritePin(PATH_EN_DL1_GPIO_Port,PATH_EN_DL1_Pin,bluecell_Currdatastatus.ATT_DL1_PATH);   
@@ -1410,39 +1389,44 @@ void DataStatusSet(void){
1410 1389
 
1411 1390
     CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1412 1391
     if(bluecell_Currdatastatus.Selftest1==0){
1392
+//        printf("Selftest1 : 0 \r\n");
1413 1393
         HAL_GPIO_WritePin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin,GPIO_PIN_RESET);//CLOCK
1414 1394
         HAL_GPIO_WritePin(PATH_SW1_GPIO_Port,PATH_SW1_Pin,GPIO_PIN_SET);//CLOCK
1415 1395
     }else{
1396
+//        printf("Selftest1 : 1 \r\n");
1416 1397
         HAL_GPIO_WritePin(_PATH_SW1_GPIO_Port,_PATH_SW1_Pin,GPIO_PIN_SET);//CLOCK
1417 1398
         HAL_GPIO_WritePin(PATH_SW1_GPIO_Port,PATH_SW1_Pin,GPIO_PIN_RESET);//CLOCK
1418 1399
     }
1419
-    if(bluecell_Currdatastatus.Selftest2=0){
1400
+    if(bluecell_Currdatastatus.Selftest2==0){
1401
+//                printf("Selftest1 : 0 \r\n");
1420 1402
         HAL_GPIO_WritePin(_PATH_SW2_GPIO_Port,_PATH_SW2_Pin,GPIO_PIN_RESET);//CLOCK
1421 1403
         HAL_GPIO_WritePin(PATH_SW2_GPIO_Port,PATH_SW2_Pin,GPIO_PIN_SET);//CLOCK
1422 1404
     }else{
1405
+//        printf("Selftest2 : 1 \r\n");
1423 1406
         HAL_GPIO_WritePin(_PATH_SW2_GPIO_Port,_PATH_SW2_Pin,GPIO_PIN_SET);//CLOCK
1424 1407
         HAL_GPIO_WritePin(PATH_SW2_GPIO_Port,PATH_SW2_Pin,GPIO_PIN_RESET);//CLOCK
1425 1408
     }
1426
-    if(bluecell_Currdatastatus.Selftest3=0){
1409
+    if(bluecell_Currdatastatus.Selftest3==0){
1410
+//                printf("Selftest1 : 0 \r\n");
1427 1411
         HAL_GPIO_WritePin(_PATH_SW3_GPIO_Port,_PATH_SW3_Pin,GPIO_PIN_RESET);//CLOCK
1428 1412
         HAL_GPIO_WritePin(PATH_SW3_GPIO_Port,PATH_SW3_Pin,GPIO_PIN_SET);//CLOCK
1429 1413
     }else{
1414
+//                printf("Selftest3 : 1 \r\n");
1430 1415
         HAL_GPIO_WritePin(_PATH_SW3_GPIO_Port,_PATH_SW3_Pin,GPIO_PIN_SET);//CLOCK
1431 1416
         HAL_GPIO_WritePin(PATH_SW3_GPIO_Port,PATH_SW3_Pin,GPIO_PIN_RESET);//CLOCK
1432 1417
     }
1433
-    if(bluecell_Currdatastatus.Selftest4=0){
1418
+    if(bluecell_Currdatastatus.Selftest4==0){
1419
+//                printf("Selftest4 : 0 \r\n");
1434 1420
         HAL_GPIO_WritePin(_PATH_SW4_GPIO_Port,_PATH_SW4_Pin,GPIO_PIN_RESET);//CLOCK
1435 1421
         HAL_GPIO_WritePin(PATH_SW4_GPIO_Port,PATH_SW4_Pin,GPIO_PIN_SET);//CLOCK
1436 1422
     }else{
1423
+//                printf("Selftest4 : 1 \r\n");
1437 1424
         HAL_GPIO_WritePin(_PATH_SW4_GPIO_Port,_PATH_SW4_Pin,GPIO_PIN_SET);//CLOCK
1438 1425
         HAL_GPIO_WritePin(PATH_SW4_GPIO_Port,PATH_SW4_Pin,GPIO_PIN_RESET);//CLOCK
1439 1426
     }
1440 1427
 
1441 1428
 
1442 1429
     DataStatusSet();
1443
-//    Bluecell_StructCpy(&Txdata[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
1444
-//    Txdata[Txdata[BLUECELL_LENGTH] + 1] = STH30_CreateCrc(&Txdata[BLUECELL_TYPE], Txdata[BLUECELL_LENGTH]);    
1445
-//    Uart1_Data_Send(&Txdata[0], sizeof(BLUESTATUS_st));
1446 1430
 }
1447 1431
 uint8_t* MBIC_HeaderDataSetting(uint8_t* data){
1448 1432
 	ResultData[MBIC_PREAMBLE_0] = MBIC_PREAMBLE0;
@@ -1477,7 +1461,7 @@ uint8_t* MBIC_HeaderDataSetting(uint8_t* data){
1477 1461
 bool MBIC_Operate(uint8_t* data){
1478 1462
 	uint16_t datatype = 0;
1479 1463
     uint8_t Length = 0;
1480
-    uint8_t SubData[256] = 0;
1464
+    uint8_t SubData[256] = {0,};
1481 1465
     /*AID*/
1482 1466
     datatype = ((data[MBIC_PROT_SUB_DATA_INDEX] << 8) & 0xFF00)  // 2byte Data
1483 1467
               |((data[MBIC_PROT_SUB_DATA_INDEX + 1] << 8) & 0x00FF) ;
@@ -1608,10 +1592,60 @@ bool MBIC_Operate(uint8_t* data){
1608 1592
 	return true;
1609 1593
 }
1610 1594
 
1595
+uint16_t Ascendingcompare(const void *a, const void *b)    // 오름차순 비교 함수 구현
1596
+{
1597
+    uint16_t num1 = *(int *)a;    // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴
1598
+    uint16_t num2 = *(int *)b;    // void 포인터를 int 포인터로 변환한 뒤 역참조하여 값을 가져옴
1611 1599
 
1600
+    if (num1 < num2)    // a가 b보다 작을 때는
1601
+        return -1;      // -1 반환
1602
+    
1603
+    if (num1 > num2)    // a가 b보다 클 때는
1604
+        return 1;       // 1 반환
1605
+    
1606
+    return 0;    // a와 b가 같을 때는 0 반환
1607
+}
1608
+uint16_t Descendingcompare(const void *a, const void *b)    // 내림차순 비교 함수 구현
1609
+{
1610
+    uint16_t num1 = *(uint16_t *)a;    // void 포인터를 uint16_t 포인터로 변환한 뒤 역참조하여 값을 가져옴
1611
+    uint16_t num2 = *(uint16_t *)b;    // void 포인터를 uint16_t 포인터로 변환한 뒤 역참조하여 값을 가져옴
1612
+
1613
+    if (num1 > num2)    // a가 b보다 클 때는
1614
+        return -1;      // -1 반환
1615
+    
1616
+    if (num1 < num2)    // a가 b보다 작을 때는
1617
+        return 1;       // 1 반환
1618
+    
1619
+    return 0;           // a와 b가 같을 때는 0 반환
1620
+}
1621
+void DascendigFunc(uint16_t* data,uint32_t size ){
1622
+
1623
+  int temp;
1624
+  for(int i = 0 ; i < size - 1 ; i ++) {
1625
+      for(int j = i+1 ; j < size ; j ++) {
1626
+          if(data[i] < data[j]) {
1627
+              temp = data[j];
1628
+              data[j] = data[i];
1629
+              data[i] = temp;
1630
+        }
1631
+      }
1632
+  }
1633
+}
1634
+
1635
+uint32_t SumFunc(uint16_t* data,uint16_t size){
1636
+    uint32_t ret = 0;
1637
+    for (uint16_t i = 0; i < size; i++)    // 배열의 요소 개수만큼 반복
1638
+    {
1639
+        ret += data[i];    // sum과 배열의 요소를 더해서 다시 sum에 저장
1640
+    }
1641
+    return ret;
1642
+}
1612 1643
 
1613 1644
 extern volatile uint32_t ADC1_Average_value[4];
1614 1645
 extern volatile uint32_t ADC3_Average_value[5];
1646
+extern volatile uint16_t ADC1valuearray[4][ADC_AVERAGECNT];
1647
+extern volatile uint16_t ADC3valuearray[5][ADC_AVERAGECNT];
1648
+
1615 1649
 uint16_t ADC1Ret[4];
1616 1650
 uint16_t ADC3Ret[5];
1617 1651
 
@@ -1619,11 +1653,33 @@ void ADC_Check(void){
1619 1653
     static uint8_t Cnt = 0;
1620 1654
     double Volt_Calc_val = 3.3 / 4095;
1621 1655
     double ret = 0;
1656
+    uint16_t MIN_ADC[ADC3_CNT] = {0,};
1657
+    uint16_t cnt[ADC3_CNT] = {0,};
1622 1658
 //    if(AdcTimerCnt > 10){
1623
-    
1659
+    // 정렬할 배열, 요소 개수, 요소 크기, 비교 함수를 넣어줌
1660
+
1661
+
1662
+
1624 1663
     if(adc3cnt >= 500){
1664
+  for(int i = 0; i < ADC1_CNT; i++){
1665
+            DascendigFunc(&ADC3valuearray[i][0],ADC_AVERAGECNT);
1666
+            MIN_ADC[i] = ADC3valuearray[i][0] - 12;
1667
+            for(int a = 0; a < ADC_AVERAGECNT; a++){
1668
+//                 printf("ADC3valuearray[%d][%d] : %d \r\n",i,a,ADC3valuearray[i][a]);
1669
+                if(ADC3valuearray[i][a] < MIN_ADC[i]){
1670
+                    cnt[i] = a;
1671
+//                    printf("cnt[i] %d \r\n",cnt[i]);
1672
+                    break;
1673
+                }else{
1674
+                    cnt[i] = ADC_AVERAGECNT;
1675
+                }
1676
+            }
1677
+            ADC3_Average_value[i] = SumFunc(&ADC3valuearray[i][0],cnt[i]);
1678
+//            printf("ADC3_Average_value[%d] : %d / %f \r\n",i,ADC3_Average_value[i],ADC3_Average_value[i]/cnt[i] * Volt_Calc_val);
1679
+        }
1680
+
1625 1681
         for(int i = 0; i < 5; i++){
1626
-            ADC3Ret[i] = ADC3_Average_value[i] / adc3cnt;
1682
+            ADC3Ret[i] = ADC3_Average_value[i] / cnt[i];
1627 1683
             ADC3_Average_value[i] = 0;
1628 1684
         }
1629 1685
         adc3cnt = 0;
@@ -1669,9 +1725,27 @@ void ADC_Check(void){
1669 1725
         printf("ADC3Ret[4] : %d        DL4 : %f\r\n",ADC3Ret[4],ret);
1670 1726
 #endif // PYJ.2020.04.26_END -- 
1671 1727
     }
1728
+
1672 1729
     if(adc1cnt >= 500){ 
1730
+        for(int i = 0; i < ADC1_CNT; i++){
1731
+            DascendigFunc(&ADC1valuearray[i][0],ADC_AVERAGECNT);
1732
+            MIN_ADC[i] = ADC1valuearray[i][0] - 12;
1733
+            for(int a = 0; a < ADC_AVERAGECNT; a++){
1734
+//                 printf("ADC1valuearray[%d][%d] : %d \r\n",i,a,ADC1valuearray[i][a]);
1735
+                if(ADC1valuearray[i][a] < MIN_ADC[i]){
1736
+                    cnt[i] = a;
1737
+//                    printf("cnt[i] %d \r\n",cnt[i]);
1738
+                    break;
1739
+                }else{
1740
+                    cnt[i] = ADC_AVERAGECNT;
1741
+                }
1742
+            }
1743
+            ADC1_Average_value[i] = SumFunc(&ADC1valuearray[i][0],cnt[i]);
1744
+//            printf("ADC1_Average_value[%d] : %d / %f \r\n",i,ADC1_Average_value[i],ADC1_Average_value[i]/cnt[i] * Volt_Calc_val);
1745
+        }
1746
+
1673 1747
         for(int i = 0; i < 4; i++){
1674
-            ADC1Ret[i] = ADC1_Average_value[i] / adc1cnt;
1748
+            ADC1Ret[i] = ADC1_Average_value[i] / cnt[i];
1675 1749
             ADC1_Average_value[i] = 0;
1676 1750
         }
1677 1751
         adc1cnt = 0;

+ 23 - 1
Bluecell_Src/eeprom.c

@@ -165,7 +165,7 @@ HAL_StatusTypeDef EEPROM_M24C08_write(uint8_t devid,uint16_t Address,uint8_t* da
165 165
 //    printf("Remain Data Index : %d \r\n",sizeremain);
166 166
     
167 167
     if(sizeremain > 0){
168
-         printf("Remain Data Write Start ");
168
+//         printf("Remain Data Write Start ");
169 169
         for(int i = 0; i < sizeremain; i++){
170 170
             ret = HAL_I2C_Mem_Write(&hi2c2, devid  ,((Address + addrees_inc + i)& 0xFFFF) ,  I2C_MEMADD_SIZE_16BIT, &data[addrees_inc + i], 1, 1024);
171 171
          //       EEPROM24XX_Save( Address,data, size);
@@ -180,6 +180,28 @@ HAL_StatusTypeDef EEPROM_M24C08_write(uint8_t devid,uint16_t Address,uint8_t* da
180 180
     return ret;
181 181
 }
182 182
 
183
+HAL_StatusTypeDef EEPROM_M24C08_Zerowrite(uint8_t devid,uint16_t Address){
184
+    HAL_StatusTypeDef ret = HAL_ERROR;
185
+    uint8_t sizecnt = 0,sizeremain = 0; 
186
+    uint16_t addrees_inc = 0;
187
+    addrees_inc = 0;
188
+    uint8_t data[4096] = {0,};
189
+
190
+
191
+    for(int i = 0 ; i < 128; i++ ){
192
+         addrees_inc = i * MAXEEPROM_LENG;
193
+         ret = HAL_I2C_Mem_Write(&hi2c2, devid  ,((Address + addrees_inc) & 0xFFFF) ,  I2C_MEMADD_SIZE_16BIT, &data[0], MAXEEPROM_LENG, 1024);
194
+
195
+         if(ret == HAL_ERROR)
196
+             printf("Write ERR\r\n");
197
+         else
198
+             HAL_Delay(20);
199
+    }
200
+
201
+
202
+    return ret;
203
+}
204
+
183 205
 
184 206
 
185 207
 

+ 1 - 2
Bluecell_Src/uart.c

@@ -20,12 +20,11 @@ extern volatile uint32_t UartRxTimerCnt;
20 20
 extern bool Bluecell_Operate(uint8_t* data);
21 21
 void InitUartQueue(pUARTQUEUE pQueue)
22 22
 {
23
-  setbuf(stdout, NULL);
24 23
   pQueue->data = pQueue->head = pQueue->tail = 0;
25 24
   uart_hal_tx.output_p = uart_hal_tx.input_p = 0;
26 25
   if (HAL_UART_Receive_DMA(&hTerminal, TerminalQueue.Buffer, 1) != HAL_OK)
27 26
   {
28
-    //_Error_Handler(__FILE__, __LINE__);
27
+//    _Error_Handler(__FILE__, __LINE__);
29 28
   }
30 29
   //HAL_UART_Receive_DMA(&hTerminal,  TerminalQueue.Buffer, 1);
31 30
   //HAL_UART_Receive_IT(hTerminal, pQueue->Buffer + pQueue->head, 1);

+ 3 - 0
Inc/main.h

@@ -174,6 +174,9 @@ extern I2C_HandleTypeDef hi2c2;
174 174
 #define ATT_EN_DL1_Pin GPIO_PIN_9
175 175
 #define ATT_EN_DL1_GPIO_Port GPIOB
176 176
 /* USER CODE BEGIN Private defines */
177
+#define ADC_AVERAGECNT 500
178
+#define ADC1_CNT 4
179
+#define ADC3_CNT 5
177 180
 
178 181
 /* USER CODE END Private defines */
179 182
 

+ 1 - 1
STM32F103ZET_JDASMBIC.ioc

@@ -425,7 +425,7 @@ ProjectManager.StackSize=0x400
425 425
 ProjectManager.TargetToolchain=TrueSTUDIO
426 426
 ProjectManager.ToolChainLocation=
427 427
 ProjectManager.UnderRoot=true
428
-ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_ADC1_Init-ADC1-false-HAL-true,6-MX_ADC3_Init-ADC3-false-HAL-true,7-MX_USART2_UART_Init-USART2-false-HAL-true,8-MX_TIM6_Init-TIM6-false-HAL-true,9-MX_CRC_Init-CRC-false-HAL-true
428
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_ADC1_Init-ADC1-false-HAL-true,6-MX_ADC3_Init-ADC3-false-HAL-true,7-MX_USART2_UART_Init-USART2-false-HAL-true,8-MX_TIM6_Init-TIM6-false-HAL-true,9-MX_CRC_Init-CRC-false-HAL-true,10-MX_I2C2_Init-I2C2-false-HAL-true
429 429
 RCC.ADCFreqValue=14000000
430 430
 RCC.ADCPresc=RCC_ADCPCLK2_DIV4
431 431
 RCC.AHBFreq_Value=56000000

+ 16 - 11
Src/main.c

@@ -62,10 +62,12 @@ DMA_HandleTypeDef hdma_usart1_rx;
62 62
 DMA_HandleTypeDef hdma_usart1_tx;
63 63
 
64 64
 /* USER CODE BEGIN PV */
65
-volatile uint16_t ADC1value[4];
66
-volatile uint16_t ADC3value[5];
67
-volatile uint32_t ADC1_Average_value[4];
68
-volatile uint32_t ADC3_Average_value[5];
65
+volatile uint16_t ADC1value[ADC1_CNT];
66
+volatile uint16_t ADC3value[ADC3_CNT];
67
+volatile uint32_t ADC1_Average_value[ADC1_CNT];
68
+volatile uint32_t ADC3_Average_value[ADC3_CNT];
69
+volatile uint16_t ADC1valuearray[ADC1_CNT][ADC_AVERAGECNT];
70
+volatile uint16_t ADC3valuearray[ADC3_CNT][ADC_AVERAGECNT];
69 71
 
70 72
 volatile uint32_t AdcTimerCnt = 0;
71 73
 volatile uint32_t LedTimerCnt = 0;
@@ -117,13 +119,14 @@ uint16_t adc3cnt = 0 ;
117 119
 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
118 120
 {
119 121
 //?��?��?�� 코드 ?��?��
120
-//만약 ?��?�� adc?���??? �????��?�� ?�� ?��?���??? ?��?���??? ?��?��?? 같이 조건�??? ?��?��
122
+//諤嵸烄 ?嚙踝蕭?嚙踝蕭 adc?嚙踝蕭嚙???? 嚙?????嚙踝蕭?嚙踝蕭 ?嚙踝蕭 ?嚙踝蕭?嚙踝蕭嚙???? ?嚙踝蕭?嚙踝蕭嚙???? ?嚙踝蕭?嚙踝蕭?? 穈軤𦚯 魽國探嚙???? ?嚙踝蕭?嚙踝蕭
121 123
 
122 124
     if(hadc->Instance == hadc1.Instance)
123 125
     {
124 126
         if(adc1cnt < 500){
125 127
             for(int i = 0; i < 4; i++){
126
-                ADC1_Average_value[i] += ADC1value[i]  ;
128
+//                ADC1_Average_value[i] += ADC1value[i];
129
+                ADC1valuearray[i][adc1cnt] = ADC1value[i];
127 130
             }
128 131
             adc1cnt++;
129 132
         }
@@ -132,7 +135,8 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
132 135
     {
133 136
         if(adc3cnt < 500){
134 137
             for(int i = 0; i < 5; i++){
135
-                ADC3_Average_value[i] += ADC3value[i]  ;
138
+//                ADC3_Average_value[i] += ADC3value[i]  ;
139
+                ADC3valuearray[i][adc3cnt] = ADC3value[i];
136 140
             }
137 141
             adc3cnt++;
138 142
         }
@@ -209,13 +213,15 @@ void eepromtest(){
209 213
 uint8_t i2ctest[10] = {22,};
210 214
 uint8_t i2cTestData[1] = {44};
211 215
 #endif // PYJ.2020.04.23_END -- 
216
+#if 0
212 217
 uint8_t eepromtestarray[1024 * 3];
213 218
 uint8_t eepromtestReadarray[1024 * 3];
214 219
 uint8_t eepromtestarray1[EEPROM_WINDOW_STATUS_ADDRESDS];
215 220
 uint8_t eepromtestReadarray1[EEPROM_WINDOW_STATUS_ADDRESDS];
216 221
 #define TESTINDEX  sizeof(TEMP_TABLE_st) 
217
-void EEPROMTEST_J(){
222
+#endif
218 223
 #if 0 // PYJ.2020.04.25_BEGIN -- 
224
+void EEPROMTEST_J(){
219 225
       for(int i = 0; i< TESTINDEX; i++)
220 226
           eepromtestarray[i] = i;
221 227
       printf("Value %x\r\n",eepromtestarray[1]);
@@ -229,16 +235,15 @@ void EEPROMTEST_J(){
229 235
         for(int i = 0; i< TESTINDEX; i++)
230 236
             printf("%d ",eepromtestReadarray[i]);
231 237
                printf("\r\n");
232
-#else        
233 238
     EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_ATT_BASE,&eepromtestReadarray[0],sizeof(BLUESTATUS_st) );
234 239
     for(int i = 0; i< sizeof(BLUESTATUS_st); i++)
235 240
                printf("%d ",eepromtestReadarray[i]);
236 241
 
237
-#endif // PYJ.2020.04.25_END -- 
238 242
 
239 243
 
240 244
 }
241
-#if 1 // PYJ.2020.04.23_BEGIN -- 
245
+#endif // PYJ.2020.04.25_END -- 
246
+#if 0 // PYJ.2020.04.23_BEGIN -- 
242 247
 void eepromtest_j1(){
243 248
 uint8_t ret  = 0;
244 249
   for(int i = 0; i < 128; i++)