test MAX31850

Dependencies:   OneWireFB mbed

Committer:
fblanc
Date:
Tue May 27 15:01:13 2014 +0000
Revision:
0:55f2866e9c0c
Child:
1:a5b2695069e5
ok

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 0:55f2866e9c0c 115 MAX31850_Start_meas(gSensorIDs[n][num_sensor],n);
fblanc 0:55f2866e9c0c 116 wait(0.5);
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 0:55f2866e9c0c 124 pc.printf( "-1\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 0:55f2866e9c0c 135
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 0:55f2866e9c0c 141 if (shtpresent==true) {
fblanc 0:55f2866e9c0c 142 float sht_temp,sht_rh;
fblanc 0:55f2866e9c0c 143 sht_writefile(sht,&sht_temp,&sht_rh);
fblanc 0:55f2866e9c0c 144
fblanc 0:55f2866e9c0c 145 //console
fblanc 0:55f2866e9c0c 146 pc.printf("%f", sht_temp);
fblanc 0:55f2866e9c0c 147 pc.printf("%f\r", sht_rh);
fblanc 0:55f2866e9c0c 148
fblanc 0:55f2866e9c0c 149 } else {
fblanc 0:55f2866e9c0c 150 pc.printf("-1");
fblanc 0:55f2866e9c0c 151 pc.printf("-1\r");
fblanc 0:55f2866e9c0c 152 }
fblanc 0:55f2866e9c0c 153 break;
fblanc 0:55f2866e9c0c 154 case '*':
fblanc 0:55f2866e9c0c 155
fblanc 0:55f2866e9c0c 156
fblanc 0:55f2866e9c0c 157 pc.printf("Mbed Temp SHT\r");
fblanc 0:55f2866e9c0c 158
fblanc 0:55f2866e9c0c 159 break;
fblanc 0:55f2866e9c0c 160
fblanc 0:55f2866e9c0c 161 }
fblanc 0:55f2866e9c0c 162
fblanc 0:55f2866e9c0c 163 }
fblanc 0:55f2866e9c0c 164
fblanc 0:55f2866e9c0c 165
fblanc 0:55f2866e9c0c 166
fblanc 0:55f2866e9c0c 167
fblanc 0:55f2866e9c0c 168
fblanc 0:55f2866e9c0c 169
fblanc 0:55f2866e9c0c 170 #define DELAISMESURE 1
fblanc 0:55f2866e9c0c 171 int delaismesure=DELAISMESURE;
fblanc 0:55f2866e9c0c 172 int main(void)
fblanc 0:55f2866e9c0c 173 {
fblanc 0:55f2866e9c0c 174 uint8_t num_sensor;
fblanc 0:55f2866e9c0c 175 //init SHT
fblanc 0:55f2866e9c0c 176 shtpresent=sht_init(sht, "0002F7F070DB", sht_temp_code, sht_humi_code);
fblanc 0:55f2866e9c0c 177
fblanc 0:55f2866e9c0c 178 //init FILEMAX31850
fblanc 0:55f2866e9c0c 179 int nbMAX31850;
fblanc 0:55f2866e9c0c 180 FILE *fpini = fopen("/local/tk.ini", "r");
fblanc 0:55f2866e9c0c 181 if(fpini == NULL) {
fblanc 0:55f2866e9c0c 182 ;
fblanc 0:55f2866e9c0c 183 } else {
fblanc 0:55f2866e9c0c 184 fscanf(fpini,"%d",&nbMAX31850);
fblanc 0:55f2866e9c0c 185 for (int i=0; i<nbMAX31850; ++i) {
fblanc 0:55f2866e9c0c 186 uint64_t uint64_owID;
fblanc 0:55f2866e9c0c 187 char owID[17];
fblanc 0:55f2866e9c0c 188 char owIDinv[17];
fblanc 0:55f2866e9c0c 189 fscanf(fpini,"%s ",owID);
fblanc 0:55f2866e9c0c 190
fblanc 0:55f2866e9c0c 191 owIDinv[0]=owID[14];
fblanc 0:55f2866e9c0c 192 owIDinv[1]=owID[15];
fblanc 0:55f2866e9c0c 193 for(int j=2; j<14; ++j) {
fblanc 0:55f2866e9c0c 194 owIDinv[j]=owID[j];
fblanc 0:55f2866e9c0c 195 }
fblanc 0:55f2866e9c0c 196 owIDinv[14]=owID[0];
fblanc 0:55f2866e9c0c 197 owIDinv[15]=owID[1];
fblanc 0:55f2866e9c0c 198 owIDinv[16]=owID[16];
fblanc 0:55f2866e9c0c 199 uint64_owID = strtoull(owIDinv,NULL,16);
fblanc 0:55f2866e9c0c 200 mMax31850[uint64_owID] = new Max31850;
fblanc 0:55f2866e9c0c 201 mMax31850[uint64_owID]->Set_owID(owID);
fblanc 0:55f2866e9c0c 202 char tkID[5];
fblanc 0:55f2866e9c0c 203 fscanf(fpini,"%s",tkID);
fblanc 0:55f2866e9c0c 204 mMax31850[uint64_owID]->Set_tkID(tkID);
fblanc 0:55f2866e9c0c 205 float offset;
fblanc 0:55f2866e9c0c 206 fscanf(fpini,"%f",&offset);
fblanc 0:55f2866e9c0c 207 mMax31850[uint64_owID]->Set_offset(offset);
fblanc 0:55f2866e9c0c 208
fblanc 0:55f2866e9c0c 209 }
fblanc 0:55f2866e9c0c 210 fclose(fpini);
fblanc 0:55f2866e9c0c 211 }
fblanc 0:55f2866e9c0c 212 //***init OW
fblanc 0:55f2866e9c0c 213
fblanc 0:55f2866e9c0c 214 for (uint8_t n=0; n<MAXBUS; ++n) {
fblanc 0:55f2866e9c0c 215 search_sensors(n,&nSensors[n],gSensorIDs);
fblanc 0:55f2866e9c0c 216 owpresent+=nSensors[n];
fblanc 0:55f2866e9c0c 217 if (owpresent) {
fblanc 0:55f2866e9c0c 218 for (num_sensor=0; num_sensor<nSensors[n]; ++num_sensor) {
fblanc 0:55f2866e9c0c 219
fblanc 0:55f2866e9c0c 220 switch (gSensorIDs[n][num_sensor][0]) {
fblanc 0:55f2866e9c0c 221
fblanc 0:55f2866e9c0c 222 //MAX31850
fblanc 0:55f2866e9c0c 223 case MAX31850_ID:
fblanc 0:55f2866e9c0c 224
fblanc 0:55f2866e9c0c 225
fblanc 0:55f2866e9c0c 226 MAX31850_Start_meas(gSensorIDs[n][num_sensor],n);
fblanc 0:55f2866e9c0c 227 wait(0.1);
fblanc 0:55f2866e9c0c 228
fblanc 0:55f2866e9c0c 229 break;
fblanc 0:55f2866e9c0c 230 }
fblanc 0:55f2866e9c0c 231 }
fblanc 0:55f2866e9c0c 232 }
fblanc 0:55f2866e9c0c 233 }
fblanc 0:55f2866e9c0c 234
fblanc 0:55f2866e9c0c 235
fblanc 0:55f2866e9c0c 236 while (1) {
fblanc 0:55f2866e9c0c 237 if (pc.readable())
fblanc 0:55f2866e9c0c 238 pc_rx();
fblanc 0:55f2866e9c0c 239 }
fblanc 0:55f2866e9c0c 240 return 0;
fblanc 0:55f2866e9c0c 241 }