Dual CANbus monitor and instrumentation cluster
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed
Fork of CANary by
Diff: utility.cpp
- Branch:
- Metric
- Revision:
- 102:fd19f777a0b4
- Parent:
- 100:63a7456fc972
- Child:
- 104:5a19101aaac5
--- a/utility.cpp Sat Jun 15 19:05:32 2013 +0000 +++ b/utility.cpp Thu Jun 20 05:35:36 2013 +0000 @@ -50,6 +50,7 @@ char sTemp[40]; unsigned char changed; unsigned short i; // was unsigned char + signed short j; signed short packV; signed short packA; signed long imWs_x4; @@ -258,14 +259,35 @@ lasti=i; //remember the msb to detect rollover next time around i+=bdi; //------- - if(i==BatDataBaseG4+2){ // Last of Temperature data + if(i==BatDataBaseG5){ // Last of Temperature data was loaded last time logCP=yesBattLog; // Only log if logging enabled showCP=true; // Always show - battTemp_x4=battData[224+5]+battData[224+8]+battData[224+11]+battData[224+14]; + // 2013 models only have three sensors + battTemp_x4=battData[(BatDataBaseG4*7)+5]+battData[(BatDataBaseG4*7)+8]+battData[(BatDataBaseG4*7)+11]+battData[(BatDataBaseG4*7)+14]; + // Or =25+(467-ADC)/9.33 (C) + // Find hottest temperature + battTemp_x10=467-(battData[(BatDataBaseG4*7)+3]*0x100+battData[(BatDataBaseG4*7)+4]); + j=467-(battData[(BatDataBaseG4*7)+6]*0x100+battData[(BatDataBaseG4*7)+7]); + if(j>battTemp_x10){ + battTemp_x10=j; + } + j=467-(battData[(BatDataBaseG4*7)+9]*0x100+battData[(BatDataBaseG4*7)+10]); + if(j>battTemp_x10){ + battTemp_x10=j; + } + j=467-(battData[(BatDataBaseG4*7)+12]*0x100+battData[(BatDataBaseG4*7)+13]); + if(j>battTemp_x10){ + battTemp_x10=j; + } + battTemp_x10*=100; + battTemp_x10/=93; + battTemp_x10+=250; + SOH_x100=battData[(BatDataBaseG1*7)+29]*0x100+battData[(BatDataBaseG1*7)+30]; + Ah_x10000=battData[(BatDataBaseG1*7)+36]*0x10000+battData[(BatDataBaseG1*7)+37]*0x100+battData[(BatDataBaseG1*7)+38]; + SOC_x10000=battData[(BatDataBaseG1*7)+32]*0x10000+battData[(BatDataBaseG1*7)+33]*0x100+battData[(BatDataBaseG1*7)+34]; } //------- i*=7; - //if(i<0xfa){ // Is there a better way to do this? if(i+6 < BatDataBufMax) { battData[i+0]=canRXmsg.data[1]; battData[i+1]=canRXmsg.data[2]; @@ -337,36 +359,36 @@ static char data[8] = {0x02, 0x21, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff}; if(reqMsgCnt<99){ switch (reqMsgCnt){ - case 0: + case BatDataBaseG1: can1.monitor(false); // set to active mode can1SleepMode = 0; // enable TX data[0]=0x02; //change to request group 1 data[1]=0x21; data[2]=0x01; break; - case 6: // group 1 has 6 frames + case BatDataBaseG2: // group 1 has 6 frames can1.monitor(false); // set to active mode can1SleepMode = 0; // enable TX data[0]=0x02; //change to request group 2 (cp data) data[1]=0x21; data[2]=0x02; break; - case 35: // group 2 has 29 frames + case BatDataBaseG3: // group 2 has 29 frames data[0]=0x02; //change to request group 3 data[1]=0x21; data[2]=0x03; break; - case 40: // group 3 has 5 frames + case BatDataBaseG4: // group 3 has 5 frames data[0]=0x02; //change to request group 4 (temperature) data[1]=0x21; data[2]=0x04; break; - case 43: // group 4 has 3 frames + case BatDataBaseG5: // group 4 has 3 frames data[0]=0x02; //change to request group 5 data[1]=0x21; data[2]=0x05; break; - case 54: // group 5 has 11 frames + case BatDataBaseG6: // group 5 has 11 frames reqMsgCnt = 99; can1SleepMode = 1; // disable TX can1.monitor(true); // set to snoop mode @@ -474,9 +496,9 @@ // NOTE: calibrates screen 1 first, then screen 0. saveConfig(); } else { - ledHi = 0.823; + ledHi = 0.8; ledLo = 0.1; - pollInt = 300; + pollInt = 60; scale12V = 16.2; skin = ttSkin; fscanf(cfile, "format %d\r\n", &ff ); @@ -623,9 +645,9 @@ if(bfile!=NULL) { strftime(sTemp, 40, "%a %m/%d/%Y %X", &t); fprintf(bfile,"%s,%d,%5.1f%%,%5.1f,%5.1f,%d,%d,%d,%d,%d",sTemp,gids,(float)SOC/10,(float)packV/2,(float)packA/2,max,min,avg,max-min,jv); - // BatDataBaseG4 * 7 = 224 - fprintf(bfile,"%d,%d,%d,%d,",(battData[224+ 3]<<8)+battData[224+ 4],battData[224+ 5],(battData[224+ 6]<<8)+battData[224+ 7],battData[224+ 8]); - fprintf(bfile,"%d,%d,%d,%d", (battData[224+ 9]<<8)+battData[224+10],battData[224+11],(battData[224+12]<<8)+battData[224+13],battData[224+14]); + // BatDataBaseG4 * 7 = (BatDataBaseG4*7) + fprintf(bfile,"%d,%d,%d,%d,",(battData[(BatDataBaseG4*7)+ 3]<<8)+battData[(BatDataBaseG4*7)+ 4],battData[(BatDataBaseG4*7)+ 5],(battData[(BatDataBaseG4*7)+ 6]<<8)+battData[(BatDataBaseG4*7)+ 7],battData[(BatDataBaseG4*7)+ 8]); + fprintf(bfile,"%d,%d,%d,%d", (battData[(BatDataBaseG4*7)+ 9]<<8)+battData[(BatDataBaseG4*7)+10],battData[(BatDataBaseG4*7)+11],(battData[(BatDataBaseG4*7)+12]<<8)+battData[(BatDataBaseG4*7)+13],battData[(BatDataBaseG4*7)+14]); for(i=0; i<96; i++) { bd=(battData[i*2+3]<<8)+battData[i*2+4]; fprintf(bfile,",%d",bd);