Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SPI_TFTx2_ILI9341 TFT_fonts TOUCH_TFTx2_ILI9341 mbed
Fork of CANary_corrupt by
Revision 123:a8c0042df617, committed 2013-07-19
- Comitter:
- TickTock
- Date:
- Fri Jul 19 12:48:10 2013 +0000
- Branch:
- Metric
- Parent:
- 122:138a40892a4c
- Child:
- 124:0d622967b764
- Commit message:
- First attempt to add tire pressure
Changed in this revision
--- a/common.h Wed Jul 17 13:48:51 2013 +0000 +++ b/common.h Fri Jul 19 12:48:10 2013 +0000 @@ -26,13 +26,14 @@ #define canTimeout 5 #define userTimeout 15 -#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 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 VP230Sleep 1 // Set to 0 if using VP231 (sleep disables RX) \ No newline at end of file
--- a/displayModes.cpp Wed Jul 17 13:48:51 2013 +0000
+++ b/displayModes.cpp Fri Jul 19 12:48:10 2013 +0000
@@ -234,7 +234,7 @@
void healthDisplay (bool force, bool showButtons){
unsigned short gids, SOC_x10;
static unsigned short lgids=0, lSOC=0, lSOH=0;
- static float lmaxTemp=0, lresr=0, lunlV=0;
+ static float lTire=0, lresr=0, lunlV=0;
static unsigned long lAh=0;
CANMessage msg;
@@ -287,21 +287,22 @@
printf(" %4.2f Ah cap \n",(float)Ah_x10000/10000);
lAh=Ah_x10000;
}
- if(force||maxTemp!=lmaxTemp){
+ if(force||unloadedV_x2!=lunlV){
tt.locate(10,130);
- printf(" %4.1f %s (max) \n",convertTemperature(maxTemp),temperatureUnit());
- lmaxTemp=maxTemp;
- }
- if(force||unloadedV_x2!=lunlV){
- tt.locate(10,160);
printf(" %4.1f V \n",unloadedV_x2/2);
lunlV=unloadedV_x2;
}
if(force||Resr!=lresr){
- tt.locate(10,190);
+ tt.locate(10,160);
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){
@@ -460,7 +461,7 @@
min=9999;
avg=0;
for(i=0; i<96; i++){
- bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4];
+ bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4];
avg+=bd;
if(bd>max) max=bd;
if(bd<min) min=bd;
@@ -481,8 +482,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(battData[BatDataBaseG4*7+5]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+8]),sTemperatureUnit,
- convertTemperature(battData[BatDataBaseG4*7+11]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+14]),sTemperatureUnit);
+ 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);
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);
@@ -493,12 +494,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,
- (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]);
+ (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]);
}
for(i=(step-2)*24; i<(step-1)*24; i++){
- bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4];
+ bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*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);
@@ -583,7 +584,7 @@
// calc each cell-pair voltage, find max and min
for(i=0; i<96; i++){
- bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4];
+ bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4];
nBar[i] = bd; // init to bar height
avg+=bd;
if(bd>max) max=bd;
@@ -637,14 +638,14 @@
}
// values, for now
- // BatDataBaseG4 * 7 = 280
+ // DataBaseG4 * 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(battData[BatDataBaseG4*7+5]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+8]),sTemperatureUnit,
- convertTemperature(battData[BatDataBaseG4*7+11]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+14]),sTemperatureUnit);
+ 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);
//printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n",
- // max,min,avg,jv, battData[BatDataBaseG4*7+5],battData[BatDataBaseG4*7+8], battData[BatDataBaseG4*7+11],battData[BatDataBaseG4*7+14]);
+ // max,min,avg,jv, queryData[DataBaseG4*7+5],queryData[DataBaseG4*7+8], queryData[DataBaseG4*7+11],queryData[DataBaseG4*7+14]);
// label the X axis (approximate)
tt.locate( 2, yWinMax+5); printf("%04d", min );
@@ -710,7 +711,7 @@
min=9999;
avg=0;
for(i=0; i<96; i++){
- bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4];
+ bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4];
avg+=bd;
if(bd>max) max=bd;
if(bd<min) min=bd;
@@ -748,7 +749,7 @@
// do the bin counting
for(int i=0; i<96; i++){
- bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4] - min ;
+ bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4] - min ;
if( bd > iBinValMax ) bd = iBinValMax ;
nBin[bd] ++ ;
}
@@ -767,14 +768,14 @@
}
// the values, for now
- // BatDataBaseG4 * 7 = 280
+ // DataBaseG4 * 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(battData[BatDataBaseG4*7+5]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+8]),sTemperatureUnit,
- convertTemperature(battData[BatDataBaseG4*7+11]),sTemperatureUnit,convertTemperature(battData[BatDataBaseG4*7+14]),sTemperatureUnit);
+ 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);
//printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n",
- // 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]);
+ // 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]);
//---------------
// show the bars
--- a/displayModes.h Wed Jul 17 13:48:51 2013 +0000 +++ b/displayModes.h Fri Jul 19 12:48:10 2013 +0000 @@ -16,8 +16,7 @@ extern unsigned char displayLoc; extern char indexLastMsg[0x800]; -//extern unsigned char battData[256]; // -extern unsigned char battData[BatDataBufMax]; // BatDataBufMax +extern unsigned char queryData[DataBufMax]; // BatDataBufMax extern bool showCP; extern bool logEn;
--- a/main.cpp Wed Jul 17 13:48:51 2013 +0000
+++ b/main.cpp Fri Jul 19 12:48:10 2013 +0000
@@ -10,6 +10,7 @@
// * 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"
@@ -21,7 +22,7 @@
#include "displayModes.h"
#include "TOUCH_TFTx2.h"
-char revStr[7] = "122"; // gg - revision string, max 6 characters
+char revStr[7] = "123"; // gg - revision string, max 6 characters
FATFS USBdrive;
LocalFileSystem local("local");
@@ -68,7 +69,7 @@
char indexLastMsg[0x800]={0}; // index table for last message
CANMessage lastMsg[100]; // table to store last message of eachtype
-unsigned char battData[BatDataBufMax]={0}; // 7 * 0x3D = BatDataBufMax
+unsigned char queryData[DataBufMax]={0}; // 7 * 0x3D = DataBufMax
unsigned char msgChanged[100]; // inidcates which bytes changed
char c;
@@ -139,13 +140,14 @@
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);
@@ -331,7 +333,8 @@
logTS(); // Date-Time at wakeup
}
if (repeatPoll) { // re-enable autopolling if enabled
- autoPoll.attach(&autoPollISR,pollInt);
+ //autoPoll.attach(&autoPollISR,pollInt);
+ autoPoll.attach(&autoPollISR,10);
}
} // if idle
@@ -418,13 +421,13 @@
dMode[whichTouched] = brakeScreen ; // GoTo Brake Screen
} else if (dMode[whichTouched]==cpScreen) {
reqMsgCnt=0;
- msgReq.attach(&sendReq,0.015);
+ msgReq.attach(&sendReq,0.035);
} else if (dMode[whichTouched]==cpHistScreen) { // gg - hist
reqMsgCnt=0;
- msgReq.attach(&sendReq,0.015);
+ msgReq.attach(&sendReq,0.035);
} else if (dMode[whichTouched]==cpBarScreen) { // gg - cpbars
reqMsgCnt=0;
- msgReq.attach(&sendReq,0.015);
+ msgReq.attach(&sendReq,0.035);
} else if (dMode[whichTouched]==configScreen) {
mbed_reset();
} else if (dMode[whichTouched]==playbackScreen) { // pause/unpause
@@ -668,6 +671,15 @@
}
}
+ 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
@@ -705,7 +717,7 @@
if (repeatPoll&&(wait5secs==0)) { // Poll on startup if autopoll enabled
logOnce=true;
reqMsgCnt=0;
- msgReq.attach(&sendReq,0.015);
+ msgReq.attach(&sendReq,0.035);
}
}
--- a/utility.cpp Wed Jul 17 13:48:51 2013 +0000
+++ b/utility.cpp Fri Jul 19 12:48:10 2013 +0000
@@ -205,46 +205,54 @@
//-------------------
//Miscellaneous on-recieve operations below
- if((mType==1)&&(canRXmsg.id==0x7bb)){ // is battery data? Need to store all responses
- if(canRXmsg.data[0]<0x20){
+ if((mType==2)&&((canRXmsg.id==0x7bb)||(canRXmsg.id==0x765))){ // is 7bb data? Need to store all responses
+ if(canRXmsg.data[0]==0x10){
if(canRXmsg.data[3]==1){//Group 1 data
- bdi=BatDataBaseG1; // index offset for Group 1 data
+ bdi=DataBaseG1; // 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=BatDataBaseG2; // index offset for CP data
+ bdi=DataBaseG2; // index offset for CP data
if(debugMode){
printMsg(" Getting cell pair data\n");
}
}else if(canRXmsg.data[3]==3){//Group 3 data
- bdi=BatDataBaseG3; // index offset for Group 3 data
+ bdi=DataBaseG3; // 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=BatDataBaseG4; // index offset for Temperature data
+ bdi=DataBaseG4; // index offset for Temperature data
if(debugMode){
printMsg(" Getting temperature data\n");
}
}else if(canRXmsg.data[3]==5){//Group 5 data
- bdi=BatDataBaseG5; // index offset for Group 5 data
+ bdi=DataBaseG5; // 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=BatDataBaseG6; // index offset for Group 6 data
+ bdi=DataBaseG6; // 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){
@@ -257,27 +265,27 @@
//-------
//-------
i*=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+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==(BatDataBaseG6+3)*7){ // All data loaded
+ if(i==(DataBaseG6+1)*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=battData[(BatDataBaseG4*7)+3]*0x100+battData[(BatDataBaseG4*7)+4];
- j=battData[(BatDataBaseG4*7)+6]*0x100+battData[(BatDataBaseG4*7)+7];
+ k=queryData[(DataBaseG4*7)+3]*0x100+queryData[(DataBaseG4*7)+4];
+ j=queryData[(DataBaseG4*7)+6]*0x100+queryData[(DataBaseG4*7)+7];
if(j<k)k=j;
- j=battData[(BatDataBaseG4*7)+9]*0x100+battData[(BatDataBaseG4*7)+10];
+ j=queryData[(DataBaseG4*7)+9]*0x100+queryData[(DataBaseG4*7)+10];
if(j<k)k=j;
- j=battData[(BatDataBaseG4*7)+12]*0x100+battData[(BatDataBaseG4*7)+13];
+ j=queryData[(DataBaseG4*7)+12]*0x100+queryData[(DataBaseG4*7)+13];
if(j<k)k=j;
//interpolate from lookup table
unsigned short temp_adc[8] = {1000,589,487,401,365,340,309,000};
@@ -290,16 +298,16 @@
maxTemp+=temp_C[ii];
// Get state of health
- 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];
+ 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];
// Save shunt data
for(j=0; j<24; j++){
- 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;
+ 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;
}
}
}
@@ -392,49 +400,57 @@
static char data[8] = {0x02, 0x21, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff};
if(reqMsgCnt<99){
switch (reqMsgCnt){
- case BatDataBaseG1:
+ case DataBaseG1: // group 1 has 6 frames
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 BatDataBaseG2: // group 1 has 6 frames
+ case DataBaseG2: // group 2 has 29 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 BatDataBaseG3: // group 2 has 29 frames
+ case DataBaseG3: // group 3 has 5 frames
data[0]=0x02; //change to request group 3
data[1]=0x21;
data[2]=0x03;
+ can1.write(CANMessage(0x79b, data, 8));
break;
- case BatDataBaseG4: // group 3 has 5 frames
+ case DataBaseG4: // group 4 has 3 frames
data[0]=0x02; //change to request group 4 (temperature)
data[1]=0x21;
data[2]=0x04;
+ can1.write(CANMessage(0x79b, data, 8));
break;
- case BatDataBaseG5: // group 4 has 3 frames
+ case DataBaseG5: // group 5 has 11 frames
data[0]=0x02; //change to request group 5
data[1]=0x21;
data[2]=0x05;
+ can1.write(CANMessage(0x79b, data, 8));
break;
- case BatDataBaseG6: // group 4 has 3 frames
- data[0]=0x02; //change to request group 5
+ case DataBaseG6: // group 6 has 4 frames
+ data[0]=0x02; //change to request group 6
data[1]=0x21;
data[2]=0x06;
+ can1.write(CANMessage(0x79b, data, 8));
break;
- case BatDataBaseG7: // group 5 has 11 frames
+ 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:
reqMsgCnt = 99;
can1SleepMode = VP230Sleep; // disable TX
can1.monitor(true); // set to snoop mode
msgReq.detach(); // stop ticker
- default:
- data[0]=0x30; //change to request next line message
- data[1]=0x01;
- data[2]=0x00;
+ default: // wait 30ms
}
- can1.write(CANMessage(0x79b, data, 8));
reqMsgCnt++;
}
}
@@ -444,7 +460,7 @@
//sprintf(sTemp,"Requesting cp data\n"); // just for debug
//printMsg(sTemp); // just for debug
reqMsgCnt = 0; //reset message counter
- msgReq.attach(&sendReq,0.015);
+ msgReq.attach(&sendReq,0.035);
}
void playbackISR() { //Used for autoplayback
@@ -661,7 +677,7 @@
min=9999;
avg=0;
for(i=0; i<96; i++) {
- bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4];
+ bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4];
avg+=bd;
if(bd>max) max=bd;
if(bd<min) min=bd;
@@ -682,10 +698,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,",(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]);
+ 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]);
for(i=0; i<96; i++) {
- bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4];
+ bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4];
f_printf(&bfile,",%d",bd);
}
f_printf(&bfile,"\r\n");
@@ -722,7 +738,7 @@
min=9999;
avg=0;
for(i=0; i<96; i++) {
- bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4];
+ bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4];
avg+=bd;
if(bd>max) max=bd;
if(bd<min) min=bd;
@@ -743,16 +759,17 @@
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,",(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]);
+ 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]);
for(i=0; i<96; i++) {
- bd=(battData[BatDataBaseG2*7+i*2+3]<<8)+battData[BatDataBaseG2*7+i*2+4];
+ bd=(queryData[DataBaseG2*7+i*2+3]<<8)+queryData[DataBaseG2*7+i*2+4];
f_printf(&bfile,",%d",bd);
- }*/
+ }
// temporariliy dump everything
- for(i=0; i<BatDataBufMax; i++) {
- f_printf(&bfile,",%02x",battData[i]);
- }
+ /*for(i=0; i<DataBufMax; i++) {
+ sprintf(sTemp,",%02x",queryData[i]);
+ f_printf(&bfile,"%s",sTemp);
+ }*/
f_printf(&bfile,"\r\n");
f_close(&bfile);
--- a/utility.h Wed Jul 17 13:48:51 2013 +0000
+++ b/utility.h Fri Jul 19 12:48:10 2013 +0000
@@ -27,7 +27,7 @@
extern char indexLastMsg[0x800];
extern unsigned char dMode[2];
extern unsigned char msgChanged[100];
-extern unsigned char battData[BatDataBufMax]; // BatDataBufMax
+extern unsigned char queryData[DataBufMax]; // BatDataBufMax
extern CANMessage lastMsg[100];
extern CAN can1,can2;
extern unsigned int fwCount;
@@ -66,6 +66,7 @@
extern bool debugMode;
extern bool shunt[96];
extern float accV;
+extern bool reqRest;
extern "C" {
void mbed_reset();
