Dual CANbus monitor and instrumentation cluster supporting ILI9341 display controller
Dependencies: SPI_TFTx2_ILI9341 TOUCH_TFTx2_ILI9341 TFT_fonts mbed
Fork of CANary by
Diff: utility.cpp
- Branch:
- Metric
- Revision:
- 119:0e2b641e98a2
- Parent:
- 118:02010b18efdc
- Child:
- 120:041edeec08f5
--- a/utility.cpp Fri Jul 05 15:38:40 2013 +0000 +++ b/utility.cpp Fri Jul 05 16:55:04 2013 +0000 @@ -50,8 +50,8 @@ char sTemp[40]; unsigned char changed; unsigned short i,j,k; - signed short packV; - signed short packA; + signed short packV_x2; + signed short packA_x2; signed long imWs_x4; unsigned short ts; @@ -289,19 +289,19 @@ } } }else if((mType==1)&&(canRXmsg.id==0x1db)){ //Battery Volts and Amps - packV=((canRXmsg.data[2]<<2)|(canRXmsg.data[3]>>6)); // 1 LSB = 0.5V - packA=((canRXmsg.data[0]<<3)|(canRXmsg.data[1]>>5)); // 1 LSB = 0.5A - if(packA>0x03ff){ - packA|=0xf800;//extend sign; + packV_x2=((canRXmsg.data[2]<<2)|(canRXmsg.data[3]>>6)); // 1 LSB = 0.5V + packA_x2=((canRXmsg.data[0]<<3)|(canRXmsg.data[1]>>5)); // 1 LSB = 0.5A + if(packA_x2>0x03ff){ + packA_x2|=0xf800;//extend sign; } - packA -= 1; //Slight correction to value required (unique to my Leaf?) - imWs_x4 = packV; // Volts*milliSeconds*2 - imWs_x4 *= -packA; // milliWattseconds*4 + packA_x2 -= 1; //Slight correction to value required (unique to my Leaf?) + imWs_x4 = packV_x2; // Volts*milliSeconds*2 + imWs_x4 *= -packA_x2; // milliWattseconds*4 mWs_x4 += imWs_x4; // total mWs_x4 - unloadedVavg += packV-Resr*packA; - Rlms += (packV-Resr*packA-unloadedV)*(packV-Resr*packA-unloadedV); - redRlms += (packV-(Resr-0.001)*packA-unloadedV)*(packV-(Resr-0.001)*packA-unloadedV); - incRlms += (packV-(Resr+0.001)*packA-unloadedV)*(packV-(Resr+0.001)*packA-unloadedV); + unloadedVavg_x2 += packV_x2-Resr*packA_x2; + Rlms += (packV_x2-Resr*packA_x2-unloadedV_x2)*(packV_x2-Resr*packA_x2-unloadedV_x2); + redRlms += (packV_x2-(Resr-0.001)*packA_x2-unloadedV_x2)*(packV_x2-(Resr-0.001)*packA_x2-unloadedV_x2); + incRlms += (packV_x2-(Resr+0.001)*packA_x2-unloadedV_x2)*(packV_x2-(Resr+0.001)*packA_x2-unloadedV_x2); numWsamples++; }else if((mType==1)&&(canRXmsg.id==0x1da)){ //Motor Speed imotorRPM=((canRXmsg.data[4]<<8)|(canRXmsg.data[5])); @@ -596,8 +596,8 @@ struct tm t; // pointer to a static tm structure short unsigned max, min, jv, i, bd; unsigned avg; - unsigned short gids, SOC, packV; - signed short packA; + unsigned short gids, SOC, packV_x2; + signed short packA_x2; time_t seconds ; CANMessage msg; @@ -610,9 +610,9 @@ msg = lastMsg[indexLastMsg[0x55b]]; //Get SOC SOC = (msg.data[0]<<2)+(msg.data[1]>>6); msg = lastMsg[indexLastMsg[0x1db]]; //Get pack volts - packV = (msg.data[2]<<2)+(msg.data[3]>>6); - packA = (msg.data[0]<<3)+(msg.data[1]>>5); - if (packA & 0x400) packA |= 0xf800; + packV_x2 = (msg.data[2]<<2)+(msg.data[3]>>6); + packA_x2 = (msg.data[0]<<3)+(msg.data[1]>>5); + if (packA_x2 & 0x400) packA_x2 |= 0xf800; max=0; min=9999; @@ -637,7 +637,7 @@ f_lseek(&bfile,0xffffffff); // go to end of file to append strftime(sTemp, 40, "%a %m/%d/%Y %X", &t); f_printf(&bfile,"%s,",sTemp); - sprintf(sTemp,"%d,%5.1f%%,%5.1f,%5.1f,%d,%d,%d,%d,%d",gids,(float)SOC/10,(float)packV/2,(float)packA/2,max,min,avg,max-min,jv); + sprintf(sTemp,"%d,%5.1f%%,%5.1f,%5.1f,%d,%d,%d,%d,%d",gids,(float)SOC/10,(float)packV_x2/2,(float)packA_x2/2,max,min,avg,max-min,jv); f_printf(&bfile,"%s,",sTemp); f_printf(&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]); f_printf(&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]); @@ -657,8 +657,8 @@ struct tm t; // pointer to a static tm structure short unsigned max, min, jv, i, bd; unsigned avg; - unsigned short gids, SOC, packV; - signed short packA; + unsigned short gids, SOC, packV_x2; + signed short packA_x2; time_t seconds ; CANMessage msg; @@ -671,9 +671,9 @@ msg = lastMsg[indexLastMsg[0x55b]]; //Get SOC SOC = (msg.data[0]<<2)+(msg.data[1]>>6); msg = lastMsg[indexLastMsg[0x1db]]; //Get pack volts - packV = (msg.data[2]<<2)+(msg.data[3]>>6); - packA = (msg.data[0]<<3)+(msg.data[1]>>5); - if (packA & 0x400) packA |= 0xf800; + packV_x2 = (msg.data[2]<<2)+(msg.data[3]>>6); + packA_x2 = (msg.data[0]<<3)+(msg.data[1]>>5); + if (packA_x2 & 0x400) packA_x2 |= 0xf800; max=0; min=9999; @@ -698,7 +698,7 @@ f_lseek(&bfile,0xffffffff); // go to end of file to append strftime(sTemp, 40, "%a %m/%d/%Y %X", &t); f_printf(&bfile,"%s,",sTemp); - sprintf(sTemp,"%d,%5.1f%%,%5.1f%%, %4.2f, %5.1f,%4.1f,%d,%d,%d,%d,%d",gids,(float)SOC/10, (float)SOH_x100/100,(float)Ah_x10000/10000,(float)packV/2,(float)packA/2,max,min,avg,max-min,jv); + sprintf(sTemp,"%d,%5.1f%%,%5.1f%%, %4.2f, %5.1f,%4.1f,%d,%d,%d,%d,%d",gids,(float)SOC/10, (float)SOH_x100/100,(float)Ah_x10000/10000,(float)packV_x2/2,(float)packA_x2/2,max,min,avg,max-min,jv); f_printf(&bfile,"%s,",sTemp); f_printf(&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]); f_printf(&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]);