Dragica Stoiljkovic / Mbed 2 deprecated BMS_LV_TEMP_VOLT_BALANCE

Dependencies:   mbed

Revision:
2:03a6da61d834
Parent:
1:d0662d4ffb8c
Child:
3:4dc457ed63d5
--- a/main.cpp	Sun Dec 20 18:07:17 2020 +0000
+++ b/main.cpp	Wed Dec 23 21:41:03 2020 +0000
@@ -8,47 +8,67 @@
 
 // - - - UART CONFIGURATION - - -
 
-Serial bms(PA_0, PA_1, BAUDRATE);//PA_9, PA_10,250000); //UART ka BMS Slaveu
+Serial bms(PA_0, PA_1, 250000); //UART ka BMS Slaveu
 Serial pc1(USBTX, USBRX, 9600);//PC_10, PC_11,9600); //UART ka PCu Serijskom monitoru
 
+CAN can1(PB_8, PB_9, 500000);
+CANMessage message1;
+        
+
 BYTE recBuff[1024];
-int recLen=0;
-int expected=0;
+volatile int recLen=0;
+volatile int expected=0;
 volatile bool full = false;
-int rdLen=0;
+volatile int rdLen=0;
 int counter = 0;
 
 uint8_t pFrame1[(MAXBYTES+6)*TOTALBOARDS];
 
 void callback() {
     // Note: you need to actually read from the serial to clear the RX interrupt
-    pc1.printf("* * *    Uspesan PRIJEM!     * * *\n");
-    while(bms.readable()){
+    //pc1.printf("* * *    Uspesan PRIJEM!     * * *\n");
+    
+        //pc1.printf("rec = %d", c);
         recBuff[recLen++] = bms.getc();
-        if(expected==0) expected = recBuff[0]+6; //prvi bajt je (broj data - 1), +1 device id, +2 reg address, +2 CRC
+        if(expected==0) expected = recBuff[0]+7; //prvi bajt je (broj data - 1), +1 device id, +2 reg address, +2 CRC
+        //pc1.printf("Prva rec = %d", recBuff[0]); 
         if(expected == recLen){
+            //pc1.printf("\n\n- - - USAO U EXPECTED - - -\n"); 
             full = true;
             rdLen = expected;
             expected = 0;
             recLen = 0;
         }
-    }
+        
+    
+    //full = true;
+    //recLen = 0;
+    //rdLen = 17; //samo test - nebitno koji broj
 }
 
 void waitFrame(){
     while(!full);
+    //wait(2);
     full=false;
+    pc1.printf("\n%d\n", rdLen);
     for(int i = 0;i<rdLen;i++){
         pc1.printf("%X ",recBuff[i]);
     }
     
     pc1.printf("\n\n- - - VOLTAGE - - -\n"); 
+    message1.id = 0x71;
+    int j = 0;
     for(int i = 4; i < recBuff[0] + 4; i += 2){
         int voltage = recBuff[i+1];   //LSB
         voltage |= (recBuff[i]) << 8; //MSB
-        double vol = ((double)voltage)/65536.0 * 5.0;
-        pc1.printf("CELL[%d] = %6.f V\n", i/2-1, vol);
+        double vol = voltage*0.0001907349;
+        //double vol = ((double)voltage)/65536.0 * 5.0;
+        pc1.printf("CELL[%d] = %6.2f V\n", i/2-1, vol);
+        
+        message1.data[j++] = recBuff[i];
+        
     }
+    can1.write(message1);
       
     pc1.printf("\n");
 }
@@ -61,24 +81,59 @@
     pc1.printf("\n");
 }
 
+
 int main(){
     bms.attach(&callback);
     Wake79606();
+    //DigitalOut(PA_0, 0);
+    //DigitalOut(PA_1, 0);
+    //wait(1);
+    //DigitalOut(PA_0, 1);
+    //DigitalOut(PA_1, 1);
+    //bms(PA_0, PA_1, 250000);
+    bms.baud(10);
+    bms.send_break();
+    bms.baud(250000);
+    //wait_ms(500);
+    //bms.clear_break();
+    
+    wait(2); //marta rekla da mozda treba da se doda wait
     AutoAddress();
+    
+    
+    //WriteReg(0, COMM_CTRL, 0x343C, 2, FRMWRT_ALL_NR); //mask GPIO faults
+    
+    wait(2);
     init();
+    /*WriteReg(0, COMM_TO, 0x00, 1, FRMWRT_ALL_NR); //disable COMM timeout because printf takes a long time between reads
+    WriteReg(0, SYSFLT1_FLT_RST, 0xFFFFFF, 3, FRMWRT_ALL_NR);   //reset system faults
+    WriteReg(0, SYSFLT1_FLT_MSK, 0xFFFFFF, 3, FRMWRT_ALL_NR);   //mask system faults (so we can test boards and not worry about triggering these faults accidentally)
+
+    //SET UP MAIN ADC
+    WriteReg(0, CELL_ADC_CTRL, 0x3F, 1, FRMWRT_ALL_NR);     //enable conversions for all cells
+    WriteReg(0, CELL_ADC_CONF2, 0x08, 1, FRMWRT_ALL_NR);    //set continuous ADC conversions, and set minimum conversion interval
+    WriteReg(0, CONTROL2, 0x01, 1, FRMWRT_ALL_NR);          //CELL_ADC_GO = 1
+    wait_ms(5);*/
     
     while (1) {
         pc1.printf("Main Code \n");
                 
         pc1.printf("Board 0 \n");
         
+        
+        
+        
         wait(2);
-        ReadReg(0, VCELL1H, pFrame1, 0x0C, 0, FRMWRT_SGL_R); //12 bajtova jer cita od adrese VCELL1H po dva bajta za svaki kanal (ima 6 kanala)
+        while(bms.readable()) bms.getc();
+        int rdLen = ReadReg(0, VCELL1H , pFrame1, 6 , 0, FRMWRT_ALL_R); //12 bajtova jer cita od adrese VCELL1H po dva bajta za svaki kanal (ima 6 kanala)
+        
         waitFrame();
         
+        
+        
         //slanje zahteva za GRESKAMA
-        /*ReadReg(0, 0x52, &wTemp, 2, 0); // 0ms timeout
-        waitFrameResponse();*/
+        //ReadReg(0, 0x52, &wTemp, 2, 0); // 0ms timeout
+        //waitFrameResponse();
         
 
     }