test MAX31850

Dependencies:   OneWireFB mbed

Committer:
fblanc
Date:
Wed Sep 28 06:46:10 2016 +0000
Revision:
4:031e71e61e80
Parent:
3:b4277f7c538e
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fblanc 4:031e71e61e80 1 /**
fblanc 4:031e71e61e80 2 * @brief MAX31850
fblanc 4:031e71e61e80 3 * @date 02/06/2014
fblanc 4:031e71e61e80 4 * @author F.BLANC LAAS-CNRS
fblanc 4:031e71e61e80 5 *
fblanc 4:031e71e61e80 6 */
fblanc 0:55f2866e9c0c 7 #include "mbed.h"
fblanc 0:55f2866e9c0c 8 #include <stdint.h>
fblanc 0:55f2866e9c0c 9 #include <string.h>
fblanc 0:55f2866e9c0c 10 #include <map>
fblanc 0:55f2866e9c0c 11
fblanc 0:55f2866e9c0c 12 #include "onewire.h"
fblanc 0:55f2866e9c0c 13 #include "shtlib.h"
fblanc 0:55f2866e9c0c 14
fblanc 3:b4277f7c538e 15 #define VERSION "TK_2014_06_02"
fblanc 0:55f2866e9c0c 16 //OW
fblanc 0:55f2866e9c0c 17 uint8_t gSensorIDs[MAXBUS][MAXSENSORS][OW_ROMCODE_SIZE];
fblanc 0:55f2866e9c0c 18 uint8_t nSensors[MAXBUS];
fblanc 3:b4277f7c538e 19 //file
fblanc 3:b4277f7c538e 20 LocalFileSystem local("local");
fblanc 0:55f2866e9c0c 21
fblanc 0:55f2866e9c0c 22 //console
fblanc 0:55f2866e9c0c 23 Serial pc(USBTX, USBRX); // tx, rx
fblanc 0:55f2866e9c0c 24 char txt[128];
fblanc 0:55f2866e9c0c 25 //LED
fblanc 0:55f2866e9c0c 26 DigitalOut led1(LED1);
fblanc 0:55f2866e9c0c 27 DigitalOut led2(LED2);
fblanc 0:55f2866e9c0c 28 DigitalOut led3(LED3);
fblanc 0:55f2866e9c0c 29 DigitalOut led4(LED4);
fblanc 0:55f2866e9c0c 30 // SHT
fblanc 0:55f2866e9c0c 31 SHT75 sht(p19, p20);
fblanc 0:55f2866e9c0c 32 int shtpresent=false;
fblanc 0:55f2866e9c0c 33 char sht_temp_code[32],sht_humi_code[32];
fblanc 0:55f2866e9c0c 34 int owpresent=false;
fblanc 0:55f2866e9c0c 35 //MAX31850
fblanc 0:55f2866e9c0c 36 class Max31850
fblanc 0:55f2866e9c0c 37 {
fblanc 0:55f2866e9c0c 38 private :
fblanc 0:55f2866e9c0c 39 char owID[17];
fblanc 0:55f2866e9c0c 40 uint64_t uint64_owID;
fblanc 0:55f2866e9c0c 41 char tkID[5];
fblanc 0:55f2866e9c0c 42 float offset;
fblanc 0:55f2866e9c0c 43
fblanc 0:55f2866e9c0c 44 public :
fblanc 0:55f2866e9c0c 45 Max31850();
fblanc 0:55f2866e9c0c 46 char *Get_owID();
fblanc 0:55f2866e9c0c 47 uint64_t Get_uint64_owID();
fblanc 0:55f2866e9c0c 48 char *Get_tkID();
fblanc 0:55f2866e9c0c 49 float Get_offset();
fblanc 0:55f2866e9c0c 50
fblanc 0:55f2866e9c0c 51 void Set_owID(char *idow);
fblanc 0:55f2866e9c0c 52 void Set_tkID(char *tk);
fblanc 0:55f2866e9c0c 53 void Set_offset(float off);
fblanc 0:55f2866e9c0c 54
fblanc 0:55f2866e9c0c 55 ~Max31850();
fblanc 0:55f2866e9c0c 56 };
fblanc 0:55f2866e9c0c 57 Max31850::Max31850()
fblanc 0:55f2866e9c0c 58 {
fblanc 0:55f2866e9c0c 59
fblanc 0:55f2866e9c0c 60 }
fblanc 0:55f2866e9c0c 61 char * Max31850::Get_owID()
fblanc 0:55f2866e9c0c 62 {
fblanc 0:55f2866e9c0c 63 return owID;
fblanc 0:55f2866e9c0c 64 }
fblanc 0:55f2866e9c0c 65 uint64_t Max31850::Get_uint64_owID()
fblanc 0:55f2866e9c0c 66 {
fblanc 0:55f2866e9c0c 67 return uint64_owID;
fblanc 0:55f2866e9c0c 68 }
fblanc 0:55f2866e9c0c 69 char * Max31850::Get_tkID()
fblanc 0:55f2866e9c0c 70 {
fblanc 0:55f2866e9c0c 71 return tkID;
fblanc 0:55f2866e9c0c 72 }
fblanc 0:55f2866e9c0c 73 float Max31850::Get_offset()
fblanc 0:55f2866e9c0c 74 {
fblanc 0:55f2866e9c0c 75 return offset;
fblanc 0:55f2866e9c0c 76 }
fblanc 0:55f2866e9c0c 77 void Max31850::Set_owID(char *idow)
fblanc 0:55f2866e9c0c 78 {
fblanc 0:55f2866e9c0c 79 for(int i=0; i<17; ++i)
fblanc 0:55f2866e9c0c 80 owID[i]=idow[i];
fblanc 0:55f2866e9c0c 81 uint64_owID=uint64_id( (uint8_t *)owID);
fblanc 0:55f2866e9c0c 82 }
fblanc 0:55f2866e9c0c 83 void Max31850::Set_tkID(char *tk)
fblanc 0:55f2866e9c0c 84 {
fblanc 0:55f2866e9c0c 85 for(int i=0; i<5; ++i)
fblanc 0:55f2866e9c0c 86 tkID[i]=tk[i];
fblanc 0:55f2866e9c0c 87 }
fblanc 0:55f2866e9c0c 88 void Max31850::Set_offset(float off)
fblanc 0:55f2866e9c0c 89 {
fblanc 0:55f2866e9c0c 90 offset=off;
fblanc 0:55f2866e9c0c 91 }
fblanc 0:55f2866e9c0c 92
fblanc 0:55f2866e9c0c 93 Max31850::~Max31850()
fblanc 0:55f2866e9c0c 94 {
fblanc 0:55f2866e9c0c 95 delete [] owID;
fblanc 0:55f2866e9c0c 96 delete [] tkID;
fblanc 0:55f2866e9c0c 97
fblanc 0:55f2866e9c0c 98 }
fblanc 0:55f2866e9c0c 99
fblanc 0:55f2866e9c0c 100 map < uint64_t, Max31850 *> mMax31850;
fblanc 0:55f2866e9c0c 101
fblanc 0:55f2866e9c0c 102 //pc_rx
fblanc 0:55f2866e9c0c 103
fblanc 0:55f2866e9c0c 104
fblanc 0:55f2866e9c0c 105 void pc_rx(void)
fblanc 0:55f2866e9c0c 106 {
fblanc 0:55f2866e9c0c 107 char c;
fblanc 0:55f2866e9c0c 108
fblanc 0:55f2866e9c0c 109 c=pc.getc();
fblanc 3:b4277f7c538e 110 if (owpresent) {
fblanc 3:b4277f7c538e 111 int n;
fblanc 3:b4277f7c538e 112 int num_sensor;
fblanc 3:b4277f7c538e 113 uint64_t uint64_owID;
fblanc 3:b4277f7c538e 114 uint8_t sp[MAX31850_SP_SIZE];
fblanc 3:b4277f7c538e 115 float temp;
fblanc 3:b4277f7c538e 116 int err;
fblanc 3:b4277f7c538e 117 switch (c) {
fblanc 3:b4277f7c538e 118 case '1':
fblanc 3:b4277f7c538e 119 n=0;
fblanc 3:b4277f7c538e 120 num_sensor=0;
fblanc 0:55f2866e9c0c 121 uint64_owID = uint64_id(&gSensorIDs[n][num_sensor][0]);
fblanc 0:55f2866e9c0c 122 for (uint8_t i=0 ; i< MAX31850_SP_SIZE; i++ )
fblanc 0:55f2866e9c0c 123 sp[i]=0;
fblanc 0:55f2866e9c0c 124 MAX31850_Read_Scratch(gSensorIDs[n][num_sensor],sp,n) ;
fblanc 3:b4277f7c538e 125 err = MAX31850_Temp_TC(sp,&temp);
fblanc 1:a5b2695069e5 126 if(err) {
fblanc 1:a5b2695069e5 127 pc.printf( "-1.0\r ");
fblanc 1:a5b2695069e5 128 } else {
fblanc 1:a5b2695069e5 129 float temp_CJ;
fblanc 1:a5b2695069e5 130 double temp_true;
fblanc 1:a5b2695069e5 131 MAX31850_Temp_CJ(sp,&temp_CJ);
fblanc 1:a5b2695069e5 132 MAX31850_Temp_TRUE(sp,&temp_true);
fblanc 1:a5b2695069e5 133 temp_true=temp_true-mMax31850[uint64_owID]->Get_offset();
fblanc 2:8e35ddc26023 134 pc.printf( "%f\r",temp_true);
fblanc 0:55f2866e9c0c 135
fblanc 1:a5b2695069e5 136 }
fblanc 1:a5b2695069e5 137 MAX31850_Start_meas(gSensorIDs[n][num_sensor],n);
fblanc 3:b4277f7c538e 138 break;
fblanc 3:b4277f7c538e 139 case '2':
fblanc 3:b4277f7c538e 140 n=0;
fblanc 3:b4277f7c538e 141 num_sensor=1;
fblanc 3:b4277f7c538e 142 uint64_owID = uint64_id(&gSensorIDs[n][num_sensor][0]);
fblanc 3:b4277f7c538e 143 for (uint8_t i=0 ; i< MAX31850_SP_SIZE; i++ )
fblanc 3:b4277f7c538e 144 sp[i]=0;
fblanc 3:b4277f7c538e 145 MAX31850_Read_Scratch(gSensorIDs[n][num_sensor],sp,n) ;
fblanc 3:b4277f7c538e 146 err = MAX31850_Temp_TC(sp,&temp);
fblanc 3:b4277f7c538e 147 if(err) {
fblanc 3:b4277f7c538e 148 pc.printf( "-1.0\r ");
fblanc 3:b4277f7c538e 149 } else {
fblanc 3:b4277f7c538e 150 float temp_CJ;
fblanc 3:b4277f7c538e 151 double temp_true;
fblanc 3:b4277f7c538e 152 MAX31850_Temp_CJ(sp,&temp_CJ);
fblanc 3:b4277f7c538e 153 MAX31850_Temp_TRUE(sp,&temp_true);
fblanc 3:b4277f7c538e 154 temp_true=temp_true-mMax31850[uint64_owID]->Get_offset();
fblanc 3:b4277f7c538e 155 pc.printf( "%f\r",temp_true);
fblanc 0:55f2866e9c0c 156
fblanc 3:b4277f7c538e 157 }
fblanc 3:b4277f7c538e 158 MAX31850_Start_meas(gSensorIDs[n][num_sensor],n);
fblanc 3:b4277f7c538e 159 break;
fblanc 3:b4277f7c538e 160 case '3':
fblanc 3:b4277f7c538e 161 n=0;
fblanc 3:b4277f7c538e 162 num_sensor=2;
fblanc 3:b4277f7c538e 163 uint64_owID = uint64_id(&gSensorIDs[n][num_sensor][0]);
fblanc 3:b4277f7c538e 164 for (uint8_t i=0 ; i< MAX31850_SP_SIZE; i++ )
fblanc 3:b4277f7c538e 165 sp[i]=0;
fblanc 3:b4277f7c538e 166 MAX31850_Read_Scratch(gSensorIDs[n][num_sensor],sp,n) ;
fblanc 3:b4277f7c538e 167 err = MAX31850_Temp_TC(sp,&temp);
fblanc 3:b4277f7c538e 168 if(err) {
fblanc 3:b4277f7c538e 169 pc.printf( "-1.0\r ");
fblanc 3:b4277f7c538e 170 } else {
fblanc 3:b4277f7c538e 171 float temp_CJ;
fblanc 3:b4277f7c538e 172 double temp_true;
fblanc 3:b4277f7c538e 173 MAX31850_Temp_CJ(sp,&temp_CJ);
fblanc 3:b4277f7c538e 174 MAX31850_Temp_TRUE(sp,&temp_true);
fblanc 3:b4277f7c538e 175 temp_true=temp_true-mMax31850[uint64_owID]->Get_offset();
fblanc 3:b4277f7c538e 176 pc.printf( "%f\r",temp_true);
fblanc 0:55f2866e9c0c 177
fblanc 3:b4277f7c538e 178 }
fblanc 3:b4277f7c538e 179 MAX31850_Start_meas(gSensorIDs[n][num_sensor],n);
fblanc 3:b4277f7c538e 180 break;
fblanc 3:b4277f7c538e 181 }
fblanc 3:b4277f7c538e 182 }
fblanc 0:55f2866e9c0c 183
fblanc 3:b4277f7c538e 184 if(c=='*') {
fblanc 3:b4277f7c538e 185 pc.printf("Mbed Temp tk\r");
fblanc 0:55f2866e9c0c 186 }
fblanc 0:55f2866e9c0c 187
fblanc 0:55f2866e9c0c 188 }
fblanc 0:55f2866e9c0c 189
fblanc 0:55f2866e9c0c 190
fblanc 0:55f2866e9c0c 191
fblanc 0:55f2866e9c0c 192
fblanc 0:55f2866e9c0c 193
fblanc 0:55f2866e9c0c 194
fblanc 0:55f2866e9c0c 195 #define DELAISMESURE 1
fblanc 0:55f2866e9c0c 196 int delaismesure=DELAISMESURE;
fblanc 0:55f2866e9c0c 197 int main(void)
fblanc 0:55f2866e9c0c 198 {
fblanc 0:55f2866e9c0c 199 uint8_t num_sensor;
fblanc 0:55f2866e9c0c 200 //init SHT
fblanc 0:55f2866e9c0c 201 shtpresent=sht_init(sht, "0002F7F070DB", sht_temp_code, sht_humi_code);
fblanc 0:55f2866e9c0c 202
fblanc 0:55f2866e9c0c 203 //init FILEMAX31850
fblanc 0:55f2866e9c0c 204 int nbMAX31850;
fblanc 0:55f2866e9c0c 205 FILE *fpini = fopen("/local/tk.ini", "r");
fblanc 0:55f2866e9c0c 206 if(fpini == NULL) {
fblanc 0:55f2866e9c0c 207 ;
fblanc 0:55f2866e9c0c 208 } else {
fblanc 0:55f2866e9c0c 209 fscanf(fpini,"%d",&nbMAX31850);
fblanc 0:55f2866e9c0c 210 for (int i=0; i<nbMAX31850; ++i) {
fblanc 0:55f2866e9c0c 211 uint64_t uint64_owID;
fblanc 0:55f2866e9c0c 212 char owID[17];
fblanc 0:55f2866e9c0c 213 char owIDinv[17];
fblanc 0:55f2866e9c0c 214 fscanf(fpini,"%s ",owID);
fblanc 0:55f2866e9c0c 215
fblanc 0:55f2866e9c0c 216 owIDinv[0]=owID[14];
fblanc 0:55f2866e9c0c 217 owIDinv[1]=owID[15];
fblanc 0:55f2866e9c0c 218 for(int j=2; j<14; ++j) {
fblanc 0:55f2866e9c0c 219 owIDinv[j]=owID[j];
fblanc 0:55f2866e9c0c 220 }
fblanc 0:55f2866e9c0c 221 owIDinv[14]=owID[0];
fblanc 0:55f2866e9c0c 222 owIDinv[15]=owID[1];
fblanc 0:55f2866e9c0c 223 owIDinv[16]=owID[16];
fblanc 0:55f2866e9c0c 224 uint64_owID = strtoull(owIDinv,NULL,16);
fblanc 0:55f2866e9c0c 225 mMax31850[uint64_owID] = new Max31850;
fblanc 0:55f2866e9c0c 226 mMax31850[uint64_owID]->Set_owID(owID);
fblanc 0:55f2866e9c0c 227 char tkID[5];
fblanc 0:55f2866e9c0c 228 fscanf(fpini,"%s",tkID);
fblanc 0:55f2866e9c0c 229 mMax31850[uint64_owID]->Set_tkID(tkID);
fblanc 0:55f2866e9c0c 230 float offset;
fblanc 0:55f2866e9c0c 231 fscanf(fpini,"%f",&offset);
fblanc 0:55f2866e9c0c 232 mMax31850[uint64_owID]->Set_offset(offset);
fblanc 0:55f2866e9c0c 233
fblanc 0:55f2866e9c0c 234 }
fblanc 0:55f2866e9c0c 235 fclose(fpini);
fblanc 0:55f2866e9c0c 236 }
fblanc 0:55f2866e9c0c 237 //***init OW
fblanc 0:55f2866e9c0c 238
fblanc 0:55f2866e9c0c 239 for (uint8_t n=0; n<MAXBUS; ++n) {
fblanc 0:55f2866e9c0c 240 search_sensors(n,&nSensors[n],gSensorIDs);
fblanc 0:55f2866e9c0c 241 owpresent+=nSensors[n];
fblanc 0:55f2866e9c0c 242 if (owpresent) {
fblanc 0:55f2866e9c0c 243 for (num_sensor=0; num_sensor<nSensors[n]; ++num_sensor) {
fblanc 0:55f2866e9c0c 244
fblanc 0:55f2866e9c0c 245 switch (gSensorIDs[n][num_sensor][0]) {
fblanc 0:55f2866e9c0c 246
fblanc 0:55f2866e9c0c 247 //MAX31850
fblanc 0:55f2866e9c0c 248 case MAX31850_ID:
fblanc 0:55f2866e9c0c 249
fblanc 0:55f2866e9c0c 250
fblanc 0:55f2866e9c0c 251 MAX31850_Start_meas(gSensorIDs[n][num_sensor],n);
fblanc 0:55f2866e9c0c 252 wait(0.1);
fblanc 0:55f2866e9c0c 253
fblanc 0:55f2866e9c0c 254 break;
fblanc 0:55f2866e9c0c 255 }
fblanc 0:55f2866e9c0c 256 }
fblanc 0:55f2866e9c0c 257 }
fblanc 0:55f2866e9c0c 258 }
fblanc 0:55f2866e9c0c 259
fblanc 0:55f2866e9c0c 260
fblanc 0:55f2866e9c0c 261 while (1) {
fblanc 0:55f2866e9c0c 262 if (pc.readable())
fblanc 0:55f2866e9c0c 263 pc_rx();
fblanc 0:55f2866e9c0c 264 }
fblanc 0:55f2866e9c0c 265 return 0;
fblanc 0:55f2866e9c0c 266 }