test MAX31850

Dependencies:   OneWireFB mbed

Committer:
fblanc
Date:
Mon Jun 02 13:17:18 2014 +0000
Revision:
3:b4277f7c538e
Parent:
2:8e35ddc26023
Child:
4:031e71e61e80
ok tk.ini

Who changed what in which revision?

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