Attempts to merge SPI_TFT2 & SPI_TFT_ILI9341
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 mbed
Fork of CANary by
Revision 124:0d622967b764, committed 2013-07-20
- Comitter:
- TickTock
- Date:
- Sat Jul 20 03:37:28 2013 +0000
- Branch:
- Metric
- Parent:
- 123:a8c0042df617
- Child:
- 125:f58b7ab2abee
- Commit message:
- Added tire pressure from canbus
Changed in this revision
--- a/common.h Fri Jul 19 12:48:10 2013 +0000 +++ b/common.h Sat Jul 20 03:37:28 2013 +0000 @@ -26,14 +26,13 @@ #define canTimeout 5 #define userTimeout 15 -#define DataBaseG1 0x00 // 6 frames - SOH, SOC, Ah -#define DataBaseG2 0x06 // 29 frames - Cell Pair data -#define DataBaseG3 0x23 // 5 frames -#define DataBaseG4 0x28 // 3 frames - Temperature data -#define DataBaseG5 0x2B // 11 frames -#define DataBaseG6 0x36 // 4 frames -#define DataBaseG7 0x3A // 2 frames - Tire pressure -#define DataBaseG8 0x3C -#define DataBufMax 0x1A4 // 7 x 3C bytes +#define BatDataBaseG1 0x00 // 6 frames - SOH, SOC, Ah +#define BatDataBaseG2 0x06 // 29 frames - Cell Pair data +#define BatDataBaseG3 0x23 // 5 frames +#define BatDataBaseG4 0x28 // 3 frames - Temperature data +#define BatDataBaseG5 0x2B // 11 frames +#define BatDataBaseG6 0x36 // 4 frames +#define BatDataBaseG7 0x3A +#define BatDataBufMax 0x196 // 7 x 3A bytes #define VP230Sleep 1 // Set to 0 if using VP231 (sleep disables RX) \ No newline at end of file
--- a/displayModes.cpp Fri Jul 19 12:48:10 2013 +0000 +++ b/displayModes.cpp Sat Jul 20 03:37:28 2013 +0000 @@ -5,8 +5,8 @@ char sTemp2[16]; void mainDisplay (bool force, bool showButtons){ - unsigned short gids, SOC_x10, packV_x2; - static unsigned short lgids=0, lSOC=0, lSOH=0, lpackV_x2=0, maxPS=0; + unsigned short gids, SOC_x10, packV_x2, tireP; + static unsigned short lgids=0, lSOC=0, lSOH=0, lpackV_x2=0, ltireP=0, maxPS=0; static float lmaxTemp=0; static float lkW=0, laccV=0, lmpkWh=0; static unsigned long lAh=0; @@ -18,7 +18,8 @@ SOC_x10 = (msg.data[0]<<2)+(msg.data[1]>>6); msg = lastMsg[indexLastMsg[0x1db]]; //Get pack volts packV_x2 = (msg.data[2]<<2)+(msg.data[3]>>6); - + msg = lastMsg[indexLastMsg[0x385]]; //Get tire pressure + tireP = msg.data[2]+msg.data[3]+msg.data[4]+msg.data[5]; tt.background(Navy); tt.foreground(Yellow); @@ -37,30 +38,51 @@ printf("%4.1f kWh \n",(float)(gids-5)*0.075); tt.set_font((unsigned char*) SCProSB31x55); tt.foreground(Green); - tt.locate(60,106); + tt.locate(60,96); printf("%4.1f %s \n",convertDistance(mpkWh[dtePeriod]*((float)(gids-5)*.075)),distanceUnit()); //LM - add metric conversion lgids=gids; lmpkWh=mpkWh[dtePeriod]; tt.foreground(Yellow); tt.set_font((unsigned char*) Arial28x28); } + if(force||tireP!=ltireP){ + tt.foreground(LightGrey); + if(msg.data[6]&0x80){ + tt.locate(40,150); + printf("%3.1f\n",(float)msg.data[2]/4); + } + if(msg.data[6]&0x40){ + tt.locate(114,150); + printf("%3.1f\n",(float)msg.data[3]/4); + } + if(msg.data[6]&0x20){ + tt.locate(40,178); + printf("%3.1f\n",(float)msg.data[4]/4); + } + if(msg.data[6]&0x10){ + tt.locate(114,178); + printf("%3.1f\n",(float)msg.data[5]/4); + } + tt.foreground(Yellow); + ltireP=tireP; + } if(force||SOC_x10!=lSOC){ tt.locate(200,10); printf("%4.1f%s\n",(float)SOC_x10/10,"% "); lSOC=SOC_x10; } if(force||packV_x2!=lpackV_x2){ - tt.locate(200,200); + tt.locate(200,206); printf("%4.1fV \n",(float)packV_x2/2); lpackV_x2=packV_x2; } if(force||maxTemp!=lmaxTemp){ - tt.locate(200,170); + tt.locate(200,176); printf("%4.1f%s\n",convertTemperature(maxTemp),temperatureUnit()); lmaxTemp=maxTemp; } if(force||accV!=laccV){ - tt.locate(20,200); + tt.locate(20,206); printf("%3.1fV \n",accV); laccV=accV; } @@ -87,7 +109,7 @@ lAh=Ah_x10000; } if(force||SOH_x100!=lSOH){ - tt.locate(200,70); + tt.locate(206,70); printf("%4.1f%s\n",(float)SOH_x100/100,"% "); lSOH=SOH_x100; } @@ -234,7 +256,7 @@ void healthDisplay (bool force, bool showButtons){ unsigned short gids, SOC_x10; static unsigned short lgids=0, lSOC=0, lSOH=0; - static float lTire=0, lresr=0, lunlV=0; + static float lmaxTemp=0, lresr=0, lunlV=0; static unsigned long lAh=0; CANMessage msg; @@ -287,22 +309,21 @@ printf(" %4.2f Ah cap \n",(float)Ah_x10000/10000); lAh=Ah_x10000; } + if(force||maxTemp!=lmaxTemp){ + tt.locate(10,130); + printf(" %4.1f %s (max) \n",convertTemperature(maxTemp),temperatureUnit()); + lmaxTemp=maxTemp; + } if(force||unloadedV_x2!=lunlV){ - tt.locate(10,130); + tt.locate(10,160); printf(" %4.1f V \n",unloadedV_x2/2); lunlV=unloadedV_x2; } if(force||Resr!=lresr){ - tt.locate(10,160); + tt.locate(10,190); printf(" %3.0f mOhms \n",Resr*1000); lresr=Resr; } - if(force||(queryData[DataBaseG7*7+8]!=lTire)){ - tt.locate(10,190); - printf("%3.1f %3.1f %3.1f %3.1f\n",(float)queryData[DataBaseG7*7+5]/4,(float)queryData[DataBaseG7*7+6]/4,(float)queryData[DataBaseG7*7+7]/4,(float)queryData[DataBaseG7*7+8]/4); - lTire=queryData[DataBaseG7*7+8]; - } - } void braking (bool force, bool showButtons, bool prdata=false){ @@ -461,7 +482,7 @@ min=9999; avg=0; for(i=0; i<96; i++){ - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; avg+=bd; if(bd>max) max=bd; if(bd<min) min=bd; @@ -482,8 +503,8 @@ case 1: tt.locate(0,6); printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %2.0f%s %2.0f%s %2.0f%s %2.0f%s\n\n", - max,min,avg,jv, convertTemperature(queryData[DataBaseG4*7+5]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+8]),sTemperatureUnit, - convertTemperature(queryData[DataBaseG4*7+11]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+14]),sTemperatureUnit); + max,min,avg,jv, convertTemperature(battData[BatDataBaseG4*7+5]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+8]),sTemperatureUnit, + convertTemperature(battData[BatDataBaseG4*7+11]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+14]),sTemperatureUnit); tt.rect(8+0*41,16,40+0*41,28,Green); tt.rect(8+1*41,16,40+1*41,28,Yellow); //tt.rect(8+2*41,16,40+2*41,28,White); @@ -494,12 +515,12 @@ for(i=(step-2)*4; i<(step-1)*4; i++){ printf("%02d-%02d : %04d %04d %04d %04d %04d %04d\n", i*6+1,i*6+6, - (queryData[DataBaseG2*7+i*12+3]<<8)+queryData[DataBaseG2*7+i*12+4],(queryData[DataBaseG2*7+i*12+5]<<8)+queryData[DataBaseG2*7+i*12+6], - (queryData[DataBaseG2*7+i*12+7]<<8)+queryData[DataBaseG2*7+i*12+8],(queryData[DataBaseG2*7+i*12+9]<<8)+queryData[DataBaseG2*7+i*12+10], - (queryData[DataBaseG2*7+i*12+11]<<8)+queryData[DataBaseG2*7+i*12+12],(queryData[DataBaseG2*7+i*12+13]<<8)+queryData[DataBaseG2*7+i*12+14]); + (battData[BatDataBaseG2*7+i*12+3]<<8)+battData[BatDataBaseG2*7+i*12+4],(battData[BatDataBaseG2*7+i*12+5]<<8)+battData[BatDataBaseG2*7+i*12+6], + (battData[BatDataBaseG2*7+i*12+7]<<8)+battData[BatDataBaseG2*7+i*12+8],(battData[BatDataBaseG2*7+i*12+9]<<8)+battData[BatDataBaseG2*7+i*12+10], + (battData[BatDataBaseG2*7+i*12+11]<<8)+battData[BatDataBaseG2*7+i*12+12],(battData[BatDataBaseG2*7+i*12+13]<<8)+battData[BatDataBaseG2*7+i*12+14]); } for(i=(step-2)*24; i<(step-1)*24; i++){ - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; if(bd>0){ if(bd==max) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Green); //if(bd==avg) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,White); @@ -584,7 +605,7 @@ // calc each cell-pair voltage, find max and min for(i=0; i<96; i++){ - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; nBar[i] = bd; // init to bar height avg+=bd; if(bd>max) max=bd; @@ -638,14 +659,14 @@ } // values, for now - // DataBaseG4 * 7 = 280 + // BatDataBaseG4 * 7 = 280 tt.locate( 0, yWinMax+40 ); char* sTemperatureUnit = temperatureUnit(); printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %2.0f%s %2.0f%s %2.0f%s %2.0f%s\n\n", - max,min,avg,jv, convertTemperature(queryData[DataBaseG4*7+5]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+8]),sTemperatureUnit, - convertTemperature(queryData[DataBaseG4*7+11]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+14]),sTemperatureUnit); + max,min,avg,jv, convertTemperature(battData[BatDataBaseG4*7+5]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+8]),sTemperatureUnit, + convertTemperature(battData[BatDataBaseG4*7+11]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+14]),sTemperatureUnit); //printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n", - // max,min,avg,jv, queryData[DataBaseG4*7+5],queryData[DataBaseG4*7+8], queryData[DataBaseG4*7+11],queryData[DataBaseG4*7+14]); + // max,min,avg,jv, battData[BatDataBaseG4*7+5],battData[BatDataBaseG4*7+8], battData[BatDataBaseG4*7+11],battData[BatDataBaseG4*7+14]); // label the X axis (approximate) tt.locate( 2, yWinMax+5); printf("%04d", min ); @@ -711,7 +732,7 @@ min=9999; avg=0; for(i=0; i<96; i++){ - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; avg+=bd; if(bd>max) max=bd; if(bd<min) min=bd; @@ -749,7 +770,7 @@ // do the bin counting for(int i=0; i<96; i++){ - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4] - min ; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4] - min ; if( bd > iBinValMax ) bd = iBinValMax ; nBin[bd] ++ ; } @@ -768,14 +789,14 @@ } // the values, for now - // DataBaseG4 * 7 = 280 + // BatDataBaseG4 * 7 = 280 tt.locate( 0, yWinMax+40 ); char* sTemperatureUnit = temperatureUnit(); printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %2.0f%s %2.0f%s %2.0f%s %2.0f%s\n\n", - max,min,avg,jv, convertTemperature(queryData[DataBaseG4*7+5]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+8]),sTemperatureUnit, - convertTemperature(queryData[DataBaseG4*7+11]),sTemperatureUnit,convertTemperature(queryData[DataBaseG4*7+14]),sTemperatureUnit); + max,min,avg,jv, convertTemperature(battData[BatDataBaseG4*7+5]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+8]),sTemperatureUnit, + convertTemperature(battData[BatDataBaseG4*7+11]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+14]),sTemperatureUnit); //printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n", - // max,min,avg,jv, queryData[DataBaseG2*7+DataBaseG4*7+5],queryData[DataBaseG2*7+DataBaseG4*7+8], queryData[DataBaseG2*7+DataBaseG4*7+11],queryData[DataBaseG2*7+DataBaseG4*7+14]); + // max,min,avg,jv, battData[BatDataBaseG2*7+BatDataBaseG4*7+5],battData[BatDataBaseG2*7+BatDataBaseG4*7+8], battData[BatDataBaseG2*7+BatDataBaseG4*7+11],battData[BatDataBaseG2*7+BatDataBaseG4*7+14]); //--------------- // show the bars
--- a/displayModes.h Fri Jul 19 12:48:10 2013 +0000 +++ b/displayModes.h Sat Jul 20 03:37:28 2013 +0000 @@ -16,7 +16,8 @@ extern unsigned char displayLoc; extern char indexLastMsg[0x800]; -extern unsigned char queryData[DataBufMax]; // BatDataBufMax +//extern unsigned char battData[256]; // +extern unsigned char battData[BatDataBufMax]; // BatDataBufMax extern bool showCP; extern bool logEn;
--- a/main.cpp Fri Jul 19 12:48:10 2013 +0000 +++ b/main.cpp Sat Jul 20 03:37:28 2013 +0000 @@ -10,7 +10,6 @@ // * Change semilog efficiency graph to linear with 10 minute values // * Add additional 79b bank readouts // * Add ability to transfer settings config file to/from USB -// * Is CAN/EV designator reversed in canlog? #include "mbed.h" #include "CAN.h" @@ -22,7 +21,7 @@ #include "displayModes.h" #include "TOUCH_TFTx2.h" -char revStr[7] = "123"; // gg - revision string, max 6 characters +char revStr[7] = "124"; // gg - revision string, max 6 characters FATFS USBdrive; LocalFileSystem local("local"); @@ -69,7 +68,7 @@ char indexLastMsg[0x800]={0}; // index table for last message CANMessage lastMsg[100]; // table to store last message of eachtype -unsigned char queryData[DataBufMax]={0}; // 7 * 0x3D = DataBufMax +unsigned char battData[BatDataBufMax]={0}; // 7 * 0x3D = BatDataBufMax unsigned char msgChanged[100]; // inidcates which bytes changed char c; @@ -140,14 +139,13 @@ bool metric = false; bool shunt[96]={0}; bool charging=false; -bool reqRest=false; + int main() { //can1SleepMode.mode(OpenDrain); //can2SleepMode.mode(OpenDrain); char sTemp[40]; unsigned long secs; unsigned char i,j,display=0,lwt=0; - char reqData[8] = {0x30, 0x00, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff}; point lastTouch; float average; tt.set_orientation(1); @@ -333,8 +331,7 @@ logTS(); // Date-Time at wakeup } if (repeatPoll) { // re-enable autopolling if enabled - //autoPoll.attach(&autoPollISR,pollInt); - autoPoll.attach(&autoPollISR,10); + autoPoll.attach(&autoPollISR,pollInt); } } // if idle @@ -421,13 +418,13 @@ dMode[whichTouched] = brakeScreen ; // GoTo Brake Screen } else if (dMode[whichTouched]==cpScreen) { reqMsgCnt=0; - msgReq.attach(&sendReq,0.035); + msgReq.attach(&sendReq,0.015); } else if (dMode[whichTouched]==cpHistScreen) { // gg - hist reqMsgCnt=0; - msgReq.attach(&sendReq,0.035); + msgReq.attach(&sendReq,0.015); } else if (dMode[whichTouched]==cpBarScreen) { // gg - cpbars reqMsgCnt=0; - msgReq.attach(&sendReq,0.035); + msgReq.attach(&sendReq,0.015); } else if (dMode[whichTouched]==configScreen) { mbed_reset(); } else if (dMode[whichTouched]==playbackScreen) { // pause/unpause @@ -671,15 +668,6 @@ } } - if (reqRest){ - reqRest=false; - if (reqMsgCnt<DataBaseG7){ - can1.write(CANMessage(0x79b, reqData, 8)); - }else{ - can1.write(CANMessage(0x745, reqData, 8)); - } - } - if(tick){ // Executes once a second tick=false; headlights = (lastMsg[indexLastMsg[0x358]].data[1]&0x80)?true:false; // headlight/turn signal indicator @@ -717,7 +705,7 @@ if (repeatPoll&&(wait5secs==0)) { // Poll on startup if autopoll enabled logOnce=true; reqMsgCnt=0; - msgReq.attach(&sendReq,0.035); + msgReq.attach(&sendReq,0.015); } }
--- a/utility.cpp Fri Jul 19 12:48:10 2013 +0000 +++ b/utility.cpp Sat Jul 20 03:37:28 2013 +0000 @@ -205,54 +205,46 @@ //------------------- //Miscellaneous on-recieve operations below - if((mType==2)&&((canRXmsg.id==0x7bb)||(canRXmsg.id==0x765))){ // is 7bb data? Need to store all responses - if(canRXmsg.data[0]==0x10){ + if((mType==1)&&(canRXmsg.id==0x7bb)){ // is battery data? Need to store all responses + if(canRXmsg.data[0]<0x20){ if(canRXmsg.data[3]==1){//Group 1 data - bdi=DataBaseG1; // index offset for Group 1 data + bdi=BatDataBaseG1; // index offset for Group 1 data if(debugMode){ printMsg(" Getting Group 1 data\n"); } }else if(canRXmsg.data[3]==2){//Group 2 = cellpair data - bdi=DataBaseG2; // index offset for CP data + bdi=BatDataBaseG2; // index offset for CP data if(debugMode){ printMsg(" Getting cell pair data\n"); } }else if(canRXmsg.data[3]==3){//Group 3 data - bdi=DataBaseG3; // index offset for Group 3 data + bdi=BatDataBaseG3; // index offset for Group 3 data if(debugMode){ printMsg(" Getting Group 3 data\n"); } }else if(canRXmsg.data[3]==4){//Group 4 = temperature data - bdi=DataBaseG4; // index offset for Temperature data + bdi=BatDataBaseG4; // index offset for Temperature data if(debugMode){ printMsg(" Getting temperature data\n"); } }else if(canRXmsg.data[3]==5){//Group 5 data - bdi=DataBaseG5; // index offset for Group 5 data + bdi=BatDataBaseG5; // index offset for Group 5 data if(debugMode){ printMsg(" Getting Group 5 data\n"); } }else if(canRXmsg.data[3]==6){//Group 6 data = shunt data - bdi=DataBaseG6; // index offset for Group 6 data + bdi=BatDataBaseG6; // index offset for Group 6 data if(debugMode){ printMsg(" Getting Group 6 data\n"); } - }else if(canRXmsg.data[3]==0x10){//Group 7 data = tire pressure data - bdi=DataBaseG7; // index offset for Group 6 data - if(debugMode){ - printMsg(" Getting Group 7 data\n"); - } - }else bdi=0xff; // ignore other messages (for now) lasti=0; - // Request rest of data - reqRest=true; } if(bdi<0xff){ @@ -265,27 +257,27 @@ //------- //------- i*=7; - if(i+6 < DataBufMax) { - queryData[i+0]=canRXmsg.data[1]; - queryData[i+1]=canRXmsg.data[2]; - queryData[i+2]=canRXmsg.data[3]; - queryData[i+3]=canRXmsg.data[4]; - queryData[i+4]=canRXmsg.data[5]; - queryData[i+5]=canRXmsg.data[6]; - queryData[i+6]=canRXmsg.data[7]; + if(i+6 < BatDataBufMax) { + battData[i+0]=canRXmsg.data[1]; + battData[i+1]=canRXmsg.data[2]; + battData[i+2]=canRXmsg.data[3]; + battData[i+3]=canRXmsg.data[4]; + battData[i+4]=canRXmsg.data[5]; + battData[i+5]=canRXmsg.data[6]; + battData[i+6]=canRXmsg.data[7]; } - if(i==(DataBaseG6+1)*7){ // All data loaded + if(i==(BatDataBaseG6+3)*7){ // All data loaded logCP=yesBattLog; // Only log if logging enabled showCP=true; // Always show // Find hottest temperature by finding smallest ADC value // 2013 models only have three sensors - k=queryData[(DataBaseG4*7)+3]*0x100+queryData[(DataBaseG4*7)+4]; - j=queryData[(DataBaseG4*7)+6]*0x100+queryData[(DataBaseG4*7)+7]; + k=battData[(BatDataBaseG4*7)+3]*0x100+battData[(BatDataBaseG4*7)+4]; + j=battData[(BatDataBaseG4*7)+6]*0x100+battData[(BatDataBaseG4*7)+7]; if(j<k)k=j; - j=queryData[(DataBaseG4*7)+9]*0x100+queryData[(DataBaseG4*7)+10]; + j=battData[(BatDataBaseG4*7)+9]*0x100+battData[(BatDataBaseG4*7)+10]; if(j<k)k=j; - j=queryData[(DataBaseG4*7)+12]*0x100+queryData[(DataBaseG4*7)+13]; + j=battData[(BatDataBaseG4*7)+12]*0x100+battData[(BatDataBaseG4*7)+13]; if(j<k)k=j; //interpolate from lookup table unsigned short temp_adc[8] = {1000,589,487,401,365,340,309,000}; @@ -298,16 +290,16 @@ maxTemp+=temp_C[ii]; // Get state of health - SOH_x100=queryData[(DataBaseG1*7)+29]*0x100+queryData[(DataBaseG1*7)+30]; - Ah_x10000=queryData[(DataBaseG1*7)+36]*0x10000+queryData[(DataBaseG1*7)+37]*0x100+queryData[(DataBaseG1*7)+38]; - SOC_x10000=queryData[(DataBaseG1*7)+32]*0x10000+queryData[(DataBaseG1*7)+33]*0x100+queryData[(DataBaseG1*7)+34]; + 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]; // Save shunt data for(j=0; j<24; j++){ - shunt[j*4+0]=queryData[DataBaseG6*7+j+3]&0x08; - shunt[j*4+1]=queryData[DataBaseG6*7+j+3]&0x04; - shunt[j*4+2]=queryData[DataBaseG6*7+j+3]&0x02; - shunt[j*4+3]=queryData[DataBaseG6*7+j+3]&0x01; + shunt[j*4+0]=battData[BatDataBaseG6*7+j+3]&0x08; + shunt[j*4+1]=battData[BatDataBaseG6*7+j+3]&0x04; + shunt[j*4+2]=battData[BatDataBaseG6*7+j+3]&0x02; + shunt[j*4+3]=battData[BatDataBaseG6*7+j+3]&0x01; } } } @@ -400,57 +392,49 @@ static char data[8] = {0x02, 0x21, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff}; if(reqMsgCnt<99){ switch (reqMsgCnt){ - case DataBaseG1: // group 1 has 6 frames + 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; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG2: // group 2 has 29 frames + case BatDataBaseG2: // group 1 has 6 frames data[0]=0x02; //change to request group 2 (cp data) data[1]=0x21; data[2]=0x02; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG3: // group 3 has 5 frames + case BatDataBaseG3: // group 2 has 29 frames data[0]=0x02; //change to request group 3 data[1]=0x21; data[2]=0x03; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG4: // group 4 has 3 frames + case BatDataBaseG4: // group 3 has 5 frames data[0]=0x02; //change to request group 4 (temperature) data[1]=0x21; data[2]=0x04; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG5: // group 5 has 11 frames + case BatDataBaseG5: // group 4 has 3 frames data[0]=0x02; //change to request group 5 data[1]=0x21; data[2]=0x05; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG6: // group 6 has 4 frames - data[0]=0x02; //change to request group 6 + case BatDataBaseG6: // group 4 has 3 frames + data[0]=0x02; //change to request group 5 data[1]=0x21; data[2]=0x06; - can1.write(CANMessage(0x79b, data, 8)); break; - case DataBaseG7: // group 7 has 2 frames - data[0]=0x02; //change to request group 7 - data[1]=0x21; - data[2]=0x10; - can1.write(CANMessage(0x745, data, 8)); - break; - case DataBaseG8: + case BatDataBaseG7: // group 5 has 11 frames reqMsgCnt = 99; can1SleepMode = VP230Sleep; // disable TX can1.monitor(true); // set to snoop mode msgReq.detach(); // stop ticker - default: // wait 30ms + default: + data[0]=0x30; //change to request next line message + data[1]=0x01; + data[2]=0x00; } + can1.write(CANMessage(0x79b, data, 8)); reqMsgCnt++; } } @@ -460,7 +444,7 @@ //sprintf(sTemp,"Requesting cp data\n"); // just for debug //printMsg(sTemp); // just for debug reqMsgCnt = 0; //reset message counter - msgReq.attach(&sendReq,0.035); + msgReq.attach(&sendReq,0.015); } void playbackISR() { //Used for autoplayback @@ -677,7 +661,7 @@ min=9999; avg=0; for(i=0; i<96; i++) { - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; avg+=bd; if(bd>max) max=bd; if(bd<min) min=bd; @@ -698,10 +682,10 @@ 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_x2/2,(float)packA_x2/2,max,min,avg,max-min,jv); f_printf(&bfile,"%s,",sTemp); - f_printf(&bfile,"%d,%d,%d,%d,",(queryData[(DataBaseG4*7)+ 3]<<8)+queryData[(DataBaseG4*7)+ 4],queryData[(DataBaseG4*7)+ 5],(queryData[(DataBaseG4*7)+ 6]<<8)+queryData[(DataBaseG4*7)+ 7],queryData[(DataBaseG4*7)+ 8]); - f_printf(&bfile,"%d,%d,%d,%d", (queryData[(DataBaseG4*7)+ 9]<<8)+queryData[(DataBaseG4*7)+10],queryData[(DataBaseG4*7)+11],(queryData[(DataBaseG4*7)+12]<<8)+queryData[(DataBaseG4*7)+13],queryData[(DataBaseG4*7)+14]); + 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]); for(i=0; i<96; i++) { - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; f_printf(&bfile,",%d",bd); } f_printf(&bfile,"\r\n"); @@ -738,7 +722,7 @@ min=9999; avg=0; for(i=0; i<96; i++) { - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; avg+=bd; if(bd>max) max=bd; if(bd<min) min=bd; @@ -759,16 +743,15 @@ f_printf(&bfile,"%s,",sTemp); sprintf(sTemp,"%3.1f,%d,%5.1f%%,%5.1f%%, %4.2f, %5.1f,%4.1f,%d,%d,%d,%d,%d",accV,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,",(queryData[(DataBaseG4*7)+ 3]<<8)+queryData[(DataBaseG4*7)+ 4],queryData[(DataBaseG4*7)+ 5],(queryData[(DataBaseG4*7)+ 6]<<8)+queryData[(DataBaseG4*7)+ 7],queryData[(DataBaseG4*7)+ 8]); - f_printf(&bfile,"%d,%d,%d,%d", (queryData[(DataBaseG4*7)+ 9]<<8)+queryData[(DataBaseG4*7)+10],queryData[(DataBaseG4*7)+11],(queryData[(DataBaseG4*7)+12]<<8)+queryData[(DataBaseG4*7)+13],queryData[(DataBaseG4*7)+14]); + 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]); for(i=0; i<96; i++) { - bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4]; + bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4]; f_printf(&bfile,",%d",bd); } // temporariliy dump everything - /*for(i=0; i<DataBufMax; i++) { - sprintf(sTemp,",%02x",queryData[i]); - f_printf(&bfile,"%s",sTemp); + /*for(i=0; i<BatDataBufMax; i++) { + f_printf(&bfile,",%02x",battData[i]); }*/ f_printf(&bfile,"\r\n");
--- a/utility.h Fri Jul 19 12:48:10 2013 +0000 +++ b/utility.h Sat Jul 20 03:37:28 2013 +0000 @@ -27,7 +27,7 @@ extern char indexLastMsg[0x800]; extern unsigned char dMode[2]; extern unsigned char msgChanged[100]; -extern unsigned char queryData[DataBufMax]; // BatDataBufMax +extern unsigned char battData[BatDataBufMax]; // BatDataBufMax extern CANMessage lastMsg[100]; extern CAN can1,can2; extern unsigned int fwCount; @@ -66,7 +66,6 @@ extern bool debugMode; extern bool shunt[96]; extern float accV; -extern bool reqRest; extern "C" { void mbed_reset();