test MAX31850

Dependencies:   OneWireFB mbed

Committer:
fblanc
Date:
Wed May 28 10:43:37 2014 +0000
Revision:
1:a5b2695069e5
Parent:
0:55f2866e9c0c
Child:
2:8e35ddc26023
modif sht off tk0 et tk1

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