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.
main.cpp@5:38b2b8790b40, 2021-04-11 (annotated)
- Committer:
- dragica
- Date:
- Sun Apr 11 09:08:16 2021 +0000
- Revision:
- 5:38b2b8790b40
- Parent:
- 4:28919318b141
SW napisan za testiranje nedelja 11 april 2021.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
minamax | 1:d0662d4ffb8c | 1 | #include "mbed.h" |
minamax | 1:d0662d4ffb8c | 2 | #include "bq79606.h" |
dragica | 5:38b2b8790b40 | 3 | #include "math.h" |
dragica | 5:38b2b8790b40 | 4 | #include "handlers.h" |
dragica | 5:38b2b8790b40 | 5 | #include "ntc.h" |
minamax | 1:d0662d4ffb8c | 6 | // - - - PIN CONFIGURATION - - - |
minamax | 1:d0662d4ffb8c | 7 | |
minamax | 1:d0662d4ffb8c | 8 | DigitalIn bmsFault(PB_4); |
minamax | 1:d0662d4ffb8c | 9 | DigitalOut bmsWakeUp(PB_5); |
minamax | 1:d0662d4ffb8c | 10 | |
minamax | 1:d0662d4ffb8c | 11 | // - - - UART CONFIGURATION - - - |
minamax | 1:d0662d4ffb8c | 12 | |
minamax | 2:03a6da61d834 | 13 | Serial bms(PA_0, PA_1, 250000); //UART ka BMS Slaveu |
dragica | 5:38b2b8790b40 | 14 | Serial pc1(USBTX, USBRX, 9600);//PC_10, PC_11,9600); //UART ka PCu Serijskom monitoru |
minamax | 1:d0662d4ffb8c | 15 | |
dragica | 5:38b2b8790b40 | 16 | //- - - CAN CONFIGURATION - - - |
minamax | 2:03a6da61d834 | 17 | CAN can1(PB_8, PB_9, 500000); |
dragica | 5:38b2b8790b40 | 18 | CANMessage message1; |
minamax | 2:03a6da61d834 | 19 | |
minamax | 1:d0662d4ffb8c | 20 | BYTE recBuff[1024]; |
minamax | 2:03a6da61d834 | 21 | volatile int recLen=0; |
minamax | 2:03a6da61d834 | 22 | volatile int expected=0; |
minamax | 1:d0662d4ffb8c | 23 | volatile bool full = false; |
minamax | 2:03a6da61d834 | 24 | volatile int rdLen=0; |
minamax | 1:d0662d4ffb8c | 25 | int counter = 0; |
dragica | 5:38b2b8790b40 | 26 | volatile int devStat = 0; |
dragica | 5:38b2b8790b40 | 27 | volatile int cbRun = 1; |
dragica | 5:38b2b8790b40 | 28 | volatile int cbDone = 0; |
dragica | 5:38b2b8790b40 | 29 | |
dragica | 5:38b2b8790b40 | 30 | volatile int faultSUM = 0; |
dragica | 5:38b2b8790b40 | 31 | volatile int DEVStat = 0; |
dragica | 5:38b2b8790b40 | 32 | |
dragica | 5:38b2b8790b40 | 33 | volatile double extern Vin; |
dragica | 5:38b2b8790b40 | 34 | volatile double extern Rref; |
minamax | 1:d0662d4ffb8c | 35 | |
minamax | 1:d0662d4ffb8c | 36 | uint8_t pFrame1[(MAXBYTES+6)*TOTALBOARDS]; |
minamax | 1:d0662d4ffb8c | 37 | |
minamax | 1:d0662d4ffb8c | 38 | void callback() { |
minamax | 1:d0662d4ffb8c | 39 | // Note: you need to actually read from the serial to clear the RX interrupt |
minamax | 1:d0662d4ffb8c | 40 | recBuff[recLen++] = bms.getc(); |
minamax | 2:03a6da61d834 | 41 | if(expected==0) expected = recBuff[0]+7; //prvi bajt je (broj data - 1), +1 device id, +2 reg address, +2 CRC |
minamax | 1:d0662d4ffb8c | 42 | if(expected == recLen){ |
minamax | 1:d0662d4ffb8c | 43 | rdLen = expected; |
minamax | 1:d0662d4ffb8c | 44 | expected = 0; |
minamax | 1:d0662d4ffb8c | 45 | recLen = 0; |
dragica | 5:38b2b8790b40 | 46 | full = true; |
minamax | 1:d0662d4ffb8c | 47 | } |
minamax | 1:d0662d4ffb8c | 48 | } |
minamax | 1:d0662d4ffb8c | 49 | |
dragica | 5:38b2b8790b40 | 50 | int waitRegRead() |
dragica | 5:38b2b8790b40 | 51 | { |
minamax | 1:d0662d4ffb8c | 52 | while(!full); |
dragica | 5:38b2b8790b40 | 53 | wait_us(500); |
minamax | 1:d0662d4ffb8c | 54 | full=false; |
dragica | 5:38b2b8790b40 | 55 | return recBuff[4]; |
dragica | 5:38b2b8790b40 | 56 | } |
dragica | 5:38b2b8790b40 | 57 | |
dragica | 5:38b2b8790b40 | 58 | |
dragica | 5:38b2b8790b40 | 59 | |
dragica | 5:38b2b8790b40 | 60 | |
dragica | 5:38b2b8790b40 | 61 | void waitFrame(){ |
dragica | 5:38b2b8790b40 | 62 | while(!full); |
dragica | 5:38b2b8790b40 | 63 | wait_us(500); |
dragica | 5:38b2b8790b40 | 64 | full=false; |
minamax | 1:d0662d4ffb8c | 65 | |
minamax | 1:d0662d4ffb8c | 66 | pc1.printf("\n\n- - - VOLTAGE - - -\n"); |
dragica | 5:38b2b8790b40 | 67 | message1.id = voltID; |
minamax | 2:03a6da61d834 | 68 | int j = 0; |
minamax | 1:d0662d4ffb8c | 69 | for(int i = 4; i < recBuff[0] + 4; i += 2){ |
minamax | 1:d0662d4ffb8c | 70 | int voltage = recBuff[i+1]; //LSB |
minamax | 1:d0662d4ffb8c | 71 | voltage |= (recBuff[i]) << 8; //MSB |
minamax | 2:03a6da61d834 | 72 | double vol = voltage*0.0001907349; |
minamax | 2:03a6da61d834 | 73 | pc1.printf("CELL[%d] = %6.2f V\n", i/2-1, vol); |
dragica | 5:38b2b8790b40 | 74 | //sendCAN(voltID, vol); |
minamax | 2:03a6da61d834 | 75 | message1.data[j++] = recBuff[i]; |
minamax | 2:03a6da61d834 | 76 | |
minamax | 1:d0662d4ffb8c | 77 | } |
minamax | 2:03a6da61d834 | 78 | can1.write(message1); |
minamax | 1:d0662d4ffb8c | 79 | |
minamax | 1:d0662d4ffb8c | 80 | pc1.printf("\n"); |
minamax | 1:d0662d4ffb8c | 81 | } |
minamax | 3:4dc457ed63d5 | 82 | |
minamax | 3:4dc457ed63d5 | 83 | |
dragica | 5:38b2b8790b40 | 84 | void waitFrameTemp(){ |
minamax | 3:4dc457ed63d5 | 85 | while(!full); |
minamax | 3:4dc457ed63d5 | 86 | full=false; |
dragica | 4:28919318b141 | 87 | pc1.printf("****** TEMPERATURA *****"); |
minamax | 3:4dc457ed63d5 | 88 | pc1.printf("\n%d\n", rdLen); |
minamax | 3:4dc457ed63d5 | 89 | for(int i = 0;i<rdLen;i++){ |
minamax | 3:4dc457ed63d5 | 90 | pc1.printf("%X ",recBuff[i]); |
minamax | 3:4dc457ed63d5 | 91 | } |
dragica | 5:38b2b8790b40 | 92 | int voltage = recBuff[5]; //LSB |
dragica | 5:38b2b8790b40 | 93 | voltage |= (recBuff[4]) << 8; //MSB |
dragica | 5:38b2b8790b40 | 94 | double Vout = voltage*0.0001907349; |
dragica | 5:38b2b8790b40 | 95 | int temp = naponskiRazdelnik(Vout); |
dragica | 5:38b2b8790b40 | 96 | sendCANbyte(tempID, temp); |
dragica | 5:38b2b8790b40 | 97 | } |
dragica | 5:38b2b8790b40 | 98 | |
dragica | 5:38b2b8790b40 | 99 | void StartBalancingAndWaitToFinish() |
dragica | 5:38b2b8790b40 | 100 | { |
dragica | 5:38b2b8790b40 | 101 | cbRun = 1; |
dragica | 5:38b2b8790b40 | 102 | cbDone = 0; |
dragica | 5:38b2b8790b40 | 103 | WriteReg(0, CB_CONFIG, 0xFA, 1, FRMWRT_ALL_NR); // Odds then Evens, continue regardless of fault condition, 30sec, seconds |
dragica | 5:38b2b8790b40 | 104 | |
dragica | 5:38b2b8790b40 | 105 | WriteReg(0, CB_DONE_THRESHOLD, 0x5F, 1, FRMWRT_ALL_NR); // Thresh hold set to value 3.6V, CBDONE comparators enabled |
dragica | 5:38b2b8790b40 | 106 | //Enabling the CBDONE voltage threshold overrides the OVUV function and pauses it. |
dragica | 5:38b2b8790b40 | 107 | |
dragica | 5:38b2b8790b40 | 108 | WriteReg(0, CB_CELL1_CTRL, 0xBC, 1, FRMWRT_ALL_NR);//cell 1- 1 minute balance timer |
dragica | 5:38b2b8790b40 | 109 | WriteReg(0, CB_CELL2_CTRL, 0xBC, 1, FRMWRT_ALL_NR);//cell 2- 1 minute balance timer |
dragica | 5:38b2b8790b40 | 110 | WriteReg(0, CB_CELL3_CTRL, 0xBC, 1, FRMWRT_ALL_NR);//cell 3- 1 minute balance timer |
dragica | 5:38b2b8790b40 | 111 | |
dragica | 5:38b2b8790b40 | 112 | WriteReg(0, CONTROL2, 0x30, 1, FRMWRT_ALL_NR);//BAL_GO set to 1, and TSREF enabled |
dragica | 5:38b2b8790b40 | 113 | wait_us(100); |
dragica | 5:38b2b8790b40 | 114 | pc1.printf("Setupovano balansiranje\n"); |
dragica | 5:38b2b8790b40 | 115 | while (cbRun) |
dragica | 5:38b2b8790b40 | 116 | { |
dragica | 5:38b2b8790b40 | 117 | ReadReg(0, DEV_STAT, pFrame1, 1 , 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 118 | wait(1); |
dragica | 5:38b2b8790b40 | 119 | devStat = recBuff[4]; |
dragica | 5:38b2b8790b40 | 120 | cbRun = (devStat & 0x10) >> 4; |
dragica | 5:38b2b8790b40 | 121 | wait_us(500); |
dragica | 5:38b2b8790b40 | 122 | if (!cbRun) |
dragica | 5:38b2b8790b40 | 123 | { |
dragica | 5:38b2b8790b40 | 124 | pc1.printf("DEV STAT = %d\n", devStat); |
dragica | 5:38b2b8790b40 | 125 | pc1.printf("CBRUN = %d\n", cbRun); |
dragica | 5:38b2b8790b40 | 126 | //wait(10); |
dragica | 5:38b2b8790b40 | 127 | } |
dragica | 5:38b2b8790b40 | 128 | } |
dragica | 5:38b2b8790b40 | 129 | |
dragica | 5:38b2b8790b40 | 130 | while(!cbDone) |
dragica | 5:38b2b8790b40 | 131 | { |
dragica | 5:38b2b8790b40 | 132 | ReadReg(0, DEV_STAT, pFrame1, 1 , 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 133 | wait(1); |
dragica | 5:38b2b8790b40 | 134 | devStat = recBuff[4]; |
dragica | 5:38b2b8790b40 | 135 | cbDone = (devStat & 0x40) >> 6; |
dragica | 5:38b2b8790b40 | 136 | wait_us(500); |
dragica | 5:38b2b8790b40 | 137 | if (cbDone) |
dragica | 5:38b2b8790b40 | 138 | { |
dragica | 5:38b2b8790b40 | 139 | pc1.printf("DEV STAT = %d\n", devStat); |
dragica | 5:38b2b8790b40 | 140 | pc1.printf("CBDONE = %d\n", cbDone); |
dragica | 5:38b2b8790b40 | 141 | //wait(10); |
dragica | 5:38b2b8790b40 | 142 | } |
dragica | 5:38b2b8790b40 | 143 | } |
dragica | 5:38b2b8790b40 | 144 | // Cleanup |
dragica | 5:38b2b8790b40 | 145 | WriteReg(0, CONTROL2, 0x00, 1, FRMWRT_ALL_NR);//Reset |
dragica | 5:38b2b8790b40 | 146 | WriteReg(0, CB_DONE_THRESHOLD, 0x20, 1, FRMWRT_ALL_NR); |
minamax | 3:4dc457ed63d5 | 147 | } |
dragica | 5:38b2b8790b40 | 148 | |
dragica | 5:38b2b8790b40 | 149 | void cellBalanceEnable() |
dragica | 5:38b2b8790b40 | 150 | { |
dragica | 5:38b2b8790b40 | 151 | cbRun = 1; |
dragica | 5:38b2b8790b40 | 152 | cbDone = 0; |
dragica | 5:38b2b8790b40 | 153 | WriteReg(0, CB_CONFIG, 0xFA, 1, FRMWRT_ALL_NR); // Odds then Evens, continue regardless of fault condition, 30sec, seconds |
dragica | 5:38b2b8790b40 | 154 | |
dragica | 5:38b2b8790b40 | 155 | WriteReg(0, CB_DONE_THRESHOLD, 0x5F, 1, FRMWRT_ALL_NR); // Thresh hold set to value 3.6V, CBDONE comparators enabled |
dragica | 5:38b2b8790b40 | 156 | //Enabling the CBDONE voltage threshold overrides the OVUV function and pauses it. |
dragica | 5:38b2b8790b40 | 157 | |
dragica | 5:38b2b8790b40 | 158 | WriteReg(0, CB_CELL1_CTRL, 0xBC, 1, FRMWRT_ALL_NR);//cell 1- 1 minute balance timer |
dragica | 5:38b2b8790b40 | 159 | WriteReg(0, CB_CELL2_CTRL, 0xBC, 1, FRMWRT_ALL_NR);//cell 2- 1 minute balance timer |
dragica | 5:38b2b8790b40 | 160 | WriteReg(0, CB_CELL3_CTRL, 0xBC, 1, FRMWRT_ALL_NR);//cell 3- 1 minute balance timer |
dragica | 5:38b2b8790b40 | 161 | |
dragica | 5:38b2b8790b40 | 162 | WriteReg(0, CONTROL2, 0x30, 1, FRMWRT_ALL_NR);//BAL_GO set to 1, and TSREF enabled |
dragica | 5:38b2b8790b40 | 163 | wait_us(100); |
dragica | 5:38b2b8790b40 | 164 | pc1.printf("Setupovano balansiranje\n"); |
dragica | 5:38b2b8790b40 | 165 | } |
dragica | 5:38b2b8790b40 | 166 | |
dragica | 5:38b2b8790b40 | 167 | void waitBalancingToFinish() |
dragica | 5:38b2b8790b40 | 168 | { |
dragica | 5:38b2b8790b40 | 169 | while (cbRun) |
dragica | 5:38b2b8790b40 | 170 | { |
dragica | 5:38b2b8790b40 | 171 | ReadReg(0, DEV_STAT, pFrame1, 1 , 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 172 | wait(1); |
dragica | 5:38b2b8790b40 | 173 | devStat = recBuff[4]; |
dragica | 5:38b2b8790b40 | 174 | cbRun = (devStat & 0x10) >> 4; |
dragica | 5:38b2b8790b40 | 175 | wait_us(500); |
dragica | 5:38b2b8790b40 | 176 | if (!cbRun) |
dragica | 5:38b2b8790b40 | 177 | { |
dragica | 5:38b2b8790b40 | 178 | pc1.printf("DEV STAT = %d\n", devStat); |
dragica | 5:38b2b8790b40 | 179 | pc1.printf("CBRUN = %d\n", cbRun); |
dragica | 5:38b2b8790b40 | 180 | } |
minamax | 1:d0662d4ffb8c | 181 | } |
dragica | 5:38b2b8790b40 | 182 | |
dragica | 5:38b2b8790b40 | 183 | while(!cbDone) |
dragica | 5:38b2b8790b40 | 184 | { |
dragica | 5:38b2b8790b40 | 185 | ReadReg(0, DEV_STAT, pFrame1, 1 , 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 186 | wait(1); |
dragica | 5:38b2b8790b40 | 187 | devStat = recBuff[4]; |
dragica | 5:38b2b8790b40 | 188 | cbDone = (devStat & 0x40) >> 6; |
dragica | 5:38b2b8790b40 | 189 | wait_us(500); |
dragica | 5:38b2b8790b40 | 190 | if (cbDone) |
dragica | 5:38b2b8790b40 | 191 | { |
dragica | 5:38b2b8790b40 | 192 | pc1.printf("DEV STAT = %d\n", devStat); |
dragica | 5:38b2b8790b40 | 193 | pc1.printf("CBDONE = %d\n", cbDone); |
dragica | 5:38b2b8790b40 | 194 | //wait(10); |
dragica | 5:38b2b8790b40 | 195 | } |
dragica | 5:38b2b8790b40 | 196 | } |
dragica | 5:38b2b8790b40 | 197 | } |
dragica | 5:38b2b8790b40 | 198 | |
dragica | 5:38b2b8790b40 | 199 | void cellBalanceDisable() |
dragica | 5:38b2b8790b40 | 200 | { |
dragica | 5:38b2b8790b40 | 201 | WriteReg(0, CONTROL2, 0x00, 1, FRMWRT_ALL_NR);//Reset |
dragica | 5:38b2b8790b40 | 202 | WriteReg(0, CB_DONE_THRESHOLD, 0x20, 1, FRMWRT_ALL_NR); |
dragica | 5:38b2b8790b40 | 203 | } |
dragica | 5:38b2b8790b40 | 204 | |
dragica | 5:38b2b8790b40 | 205 | void isCellBalancingDone() |
dragica | 5:38b2b8790b40 | 206 | { |
dragica | 5:38b2b8790b40 | 207 | ReadReg(0, DEV_STAT, pFrame1, 1 , 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 208 | wait(1); |
dragica | 5:38b2b8790b40 | 209 | devStat = recBuff[4]; |
dragica | 5:38b2b8790b40 | 210 | cbDone = (devStat & 0x40) >> 6; |
dragica | 5:38b2b8790b40 | 211 | cbRun = (devStat & 0x10) >> 4; |
dragica | 5:38b2b8790b40 | 212 | wait_us(500); |
dragica | 5:38b2b8790b40 | 213 | pc1.printf("cbDone= %d cbRun= %d\n", cbDone, cbRun); |
dragica | 5:38b2b8790b40 | 214 | wait(104); |
dragica | 5:38b2b8790b40 | 215 | ReadReg(0, DEV_STAT, pFrame1, 1 , 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 216 | wait(1); |
dragica | 5:38b2b8790b40 | 217 | devStat = recBuff[4]; |
dragica | 5:38b2b8790b40 | 218 | cbDone = (devStat & 0x40) >> 6; |
dragica | 5:38b2b8790b40 | 219 | cbRun = (devStat & 0x10) >> 4; |
minamax | 1:d0662d4ffb8c | 220 | } |
minamax | 1:d0662d4ffb8c | 221 | |
dragica | 5:38b2b8790b40 | 222 | void faultRead() |
dragica | 5:38b2b8790b40 | 223 | { |
dragica | 5:38b2b8790b40 | 224 | pc1.printf("\n FAULT REGISTER STATUS START \n"); |
dragica | 5:38b2b8790b40 | 225 | |
dragica | 5:38b2b8790b40 | 226 | ReadReg(0, GPIO_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 227 | gpioFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 228 | GPIOHandler(); |
dragica | 5:38b2b8790b40 | 229 | |
dragica | 5:38b2b8790b40 | 230 | ReadReg(0, UV_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 231 | uvFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 232 | UVHandler(); |
dragica | 5:38b2b8790b40 | 233 | |
dragica | 5:38b2b8790b40 | 234 | ReadReg(0, OV_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 235 | ovFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 236 | OVHandler(); |
dragica | 5:38b2b8790b40 | 237 | |
dragica | 5:38b2b8790b40 | 238 | ReadReg(0, UT_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 239 | utFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 240 | UTHandler(); |
dragica | 5:38b2b8790b40 | 241 | |
dragica | 5:38b2b8790b40 | 242 | ReadReg(0, OT_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 243 | otFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 244 | OTHandler(); |
dragica | 5:38b2b8790b40 | 245 | |
dragica | 5:38b2b8790b40 | 246 | ReadReg(0, TONE_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 247 | toneFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 248 | ToneHandler(); |
dragica | 5:38b2b8790b40 | 249 | |
dragica | 5:38b2b8790b40 | 250 | ReadReg(0, COMM_UART_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 251 | uartFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 252 | UARTHandler(); |
dragica | 5:38b2b8790b40 | 253 | |
dragica | 5:38b2b8790b40 | 254 | ReadReg(0, COMM_UART_RC_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 255 | uartRCFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 256 | UARTRCHandler(); |
dragica | 5:38b2b8790b40 | 257 | |
dragica | 5:38b2b8790b40 | 258 | ReadReg(0, COMM_UART_RR_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 259 | uartRRFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 260 | UARTRRHandler(); |
dragica | 5:38b2b8790b40 | 261 | |
dragica | 5:38b2b8790b40 | 262 | ReadReg(0, COMM_UART_TR_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 263 | uartTRFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 264 | UARTTRHandler(); |
dragica | 5:38b2b8790b40 | 265 | |
dragica | 5:38b2b8790b40 | 266 | ReadReg(0, COMM_COMH_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 267 | COMHFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 268 | COMHHandler(); |
dragica | 5:38b2b8790b40 | 269 | |
dragica | 5:38b2b8790b40 | 270 | ReadReg(0, COMM_COMH_RC_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 271 | COMHRCFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 272 | COMHRCHandler(); |
dragica | 5:38b2b8790b40 | 273 | |
dragica | 5:38b2b8790b40 | 274 | ReadReg(0, COMM_COMH_RR_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 275 | COMHRRFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 276 | COMHRRHandler(); |
dragica | 5:38b2b8790b40 | 277 | |
dragica | 5:38b2b8790b40 | 278 | ReadReg(0, COMM_COMH_TR_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 279 | COMHTRFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 280 | COMHTRHandler(); |
dragica | 5:38b2b8790b40 | 281 | |
dragica | 5:38b2b8790b40 | 282 | ReadReg(0, COMM_COML_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 283 | COMLFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 284 | COMLHandler(); |
dragica | 5:38b2b8790b40 | 285 | |
dragica | 5:38b2b8790b40 | 286 | ReadReg(0, COMM_COML_RC_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 287 | COMLRCFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 288 | COMLRCHandler(); |
dragica | 5:38b2b8790b40 | 289 | |
dragica | 5:38b2b8790b40 | 290 | ReadReg(0, COMM_COML_RR_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 291 | COMLRRFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 292 | COMLRRHandler(); |
dragica | 5:38b2b8790b40 | 293 | |
dragica | 5:38b2b8790b40 | 294 | ReadReg(0, COMM_COML_TR_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 295 | COMLTRFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 296 | COMLHandler(); |
dragica | 5:38b2b8790b40 | 297 | |
dragica | 5:38b2b8790b40 | 298 | ReadReg(0, OTP_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 299 | otpFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 300 | OTPHandler(); |
dragica | 5:38b2b8790b40 | 301 | |
dragica | 5:38b2b8790b40 | 302 | ReadReg(0, RAIL_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 303 | railFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 304 | RAILHandler(); |
dragica | 5:38b2b8790b40 | 305 | |
dragica | 5:38b2b8790b40 | 306 | ReadReg(0, OVUV_BIST_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 307 | ovuvBistFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 308 | OVUVBISTHandler(); |
dragica | 5:38b2b8790b40 | 309 | |
dragica | 5:38b2b8790b40 | 310 | ReadReg(0, OTUT_BIST_FAULT, pFrame1, 1, 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 311 | otutBistFault = waitRegRead(); |
dragica | 5:38b2b8790b40 | 312 | OTUTBISTHandler(); |
dragica | 5:38b2b8790b40 | 313 | |
dragica | 5:38b2b8790b40 | 314 | pc1.printf("FAULT REGISTER STATUS END \n\n"); |
dragica | 5:38b2b8790b40 | 315 | } |
dragica | 5:38b2b8790b40 | 316 | |
dragica | 5:38b2b8790b40 | 317 | void checkDeviceStatus() |
dragica | 5:38b2b8790b40 | 318 | { |
dragica | 5:38b2b8790b40 | 319 | pc1.printf("\n DEVICE STATUS START \n"); |
dragica | 5:38b2b8790b40 | 320 | |
dragica | 5:38b2b8790b40 | 321 | ReadReg(0, FAULT_SUM, pFrame1, 1, 0, FRMWRT_SGL_R); |
dragica | 5:38b2b8790b40 | 322 | faultSUM = waitRegRead(); |
dragica | 5:38b2b8790b40 | 323 | pc1.printf("Fault sum = %X\n", faultSUM); |
dragica | 5:38b2b8790b40 | 324 | |
dragica | 5:38b2b8790b40 | 325 | if(faultSUM != 0) |
dragica | 5:38b2b8790b40 | 326 | { |
dragica | 5:38b2b8790b40 | 327 | faultRead(); |
dragica | 5:38b2b8790b40 | 328 | } |
dragica | 5:38b2b8790b40 | 329 | |
dragica | 5:38b2b8790b40 | 330 | ReadReg(0, DEV_STAT, pFrame1, 1, 0, FRMWRT_SGL_R); |
dragica | 5:38b2b8790b40 | 331 | DEVStat = waitRegRead(); |
dragica | 5:38b2b8790b40 | 332 | pc1.printf("DEV STAT = %X\n", DEVStat); |
dragica | 5:38b2b8790b40 | 333 | |
dragica | 5:38b2b8790b40 | 334 | pc1.printf("DEVICE STATUS END\n"); |
dragica | 5:38b2b8790b40 | 335 | } |
dragica | 5:38b2b8790b40 | 336 | |
dragica | 5:38b2b8790b40 | 337 | void requestTemperature() |
dragica | 5:38b2b8790b40 | 338 | { |
dragica | 5:38b2b8790b40 | 339 | WriteReg(0, CONTROL2, 0x02, 1, FRMWRT_ALL_NR); |
dragica | 5:38b2b8790b40 | 340 | ReadReg(0, AUX_GPIO1H, pFrame1, 2 , 0, FRMWRT_ALL_R); |
dragica | 5:38b2b8790b40 | 341 | |
dragica | 5:38b2b8790b40 | 342 | waitFrameTemp(); |
dragica | 5:38b2b8790b40 | 343 | wait(1); |
dragica | 5:38b2b8790b40 | 344 | } |
dragica | 5:38b2b8790b40 | 345 | |
dragica | 5:38b2b8790b40 | 346 | void requestVoltage() |
dragica | 5:38b2b8790b40 | 347 | { |
dragica | 5:38b2b8790b40 | 348 | ReadReg(0, VCELL1H , pFrame1, 6 , 0, FRMWRT_ALL_R); //6 bajtova jer cita od adrese VCELL1H po dva bajta za svaki kanal (ima 3 kanala) |
dragica | 5:38b2b8790b40 | 349 | waitFrame(); |
dragica | 5:38b2b8790b40 | 350 | } |
minamax | 2:03a6da61d834 | 351 | |
minamax | 1:d0662d4ffb8c | 352 | int main(){ |
minamax | 1:d0662d4ffb8c | 353 | bms.attach(&callback); |
minamax | 1:d0662d4ffb8c | 354 | Wake79606(); |
dragica | 5:38b2b8790b40 | 355 | |
minamax | 2:03a6da61d834 | 356 | bms.baud(10); |
minamax | 2:03a6da61d834 | 357 | bms.send_break(); |
minamax | 2:03a6da61d834 | 358 | bms.baud(250000); |
minamax | 2:03a6da61d834 | 359 | |
dragica | 5:38b2b8790b40 | 360 | //wait(2); //marta rekla da mozda treba da se doda wait |
minamax | 1:d0662d4ffb8c | 361 | AutoAddress(); |
minamax | 2:03a6da61d834 | 362 | |
minamax | 2:03a6da61d834 | 363 | |
minamax | 2:03a6da61d834 | 364 | //WriteReg(0, COMM_CTRL, 0x343C, 2, FRMWRT_ALL_NR); //mask GPIO faults |
minamax | 2:03a6da61d834 | 365 | |
minamax | 2:03a6da61d834 | 366 | wait(2); |
minamax | 1:d0662d4ffb8c | 367 | init(); |
dragica | 5:38b2b8790b40 | 368 | arrayInit(); |
minamax | 2:03a6da61d834 | 369 | /*WriteReg(0, COMM_TO, 0x00, 1, FRMWRT_ALL_NR); //disable COMM timeout because printf takes a long time between reads |
minamax | 2:03a6da61d834 | 370 | WriteReg(0, SYSFLT1_FLT_RST, 0xFFFFFF, 3, FRMWRT_ALL_NR); //reset system faults |
minamax | 2:03a6da61d834 | 371 | 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) |
minamax | 2:03a6da61d834 | 372 | |
minamax | 2:03a6da61d834 | 373 | //SET UP MAIN ADC |
minamax | 2:03a6da61d834 | 374 | WriteReg(0, CELL_ADC_CTRL, 0x3F, 1, FRMWRT_ALL_NR); //enable conversions for all cells |
minamax | 2:03a6da61d834 | 375 | WriteReg(0, CELL_ADC_CONF2, 0x08, 1, FRMWRT_ALL_NR); //set continuous ADC conversions, and set minimum conversion interval |
dragica | 5:38b2b8790b40 | 376 | WriteReg(0, CONTROL2, 0x01, 1, FRMWRT_ALL_NR); //CELL_ADC_GO = 1*/ |
minamax | 1:d0662d4ffb8c | 377 | |
minamax | 1:d0662d4ffb8c | 378 | while (1) { |
minamax | 2:03a6da61d834 | 379 | |
dragica | 5:38b2b8790b40 | 380 | requestVoltage(); |
dragica | 5:38b2b8790b40 | 381 | requestTemperature(); |
dragica | 5:38b2b8790b40 | 382 | /*cellBalanceEnable(); |
dragica | 5:38b2b8790b40 | 383 | waitBalancingToFinish(); |
dragica | 5:38b2b8790b40 | 384 | cellBalanceDisable(); |
dragica | 5:38b2b8790b40 | 385 | isCellBalancingDone();*/ |
minamax | 1:d0662d4ffb8c | 386 | |
dragica | 5:38b2b8790b40 | 387 | checkDeviceStatus(); |
minamax | 1:d0662d4ffb8c | 388 | |
minamax | 1:d0662d4ffb8c | 389 | } |
minamax | 1:d0662d4ffb8c | 390 | |
minamax | 1:d0662d4ffb8c | 391 | |
minamax | 1:d0662d4ffb8c | 392 | |
minamax | 1:d0662d4ffb8c | 393 | } |