![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Has base BMU code but sends dummy temperature and voltage readings to test CAN
Dependencies: CUER_CAN DS1820 LTC2943 LTC6804 mbed
Fork of BMS_BMUCore_Max by
Diff: main.cpp
- Revision:
- 12:fa9b1a459e47
- Parent:
- 11:cf2db05cfa56
- Child:
- 13:7b42af989cd1
--- a/main.cpp Wed Jun 21 00:15:57 2017 +0000 +++ b/main.cpp Fri Jun 23 17:41:17 2017 +0000 @@ -22,7 +22,7 @@ uint16_t read_EEPROM_startup(BMU_data &measurements); uint32_t check_measurements(BMU_data &measurements); void take_measurements(BMU_data &measurements); -void test_read_voltage_CAN(); +bool test_read_voltage_CAN(uint16_t readings[], int can_ids[]); void test_CAN_send(); void test_CAN_read(); @@ -42,12 +42,24 @@ BMU_data measurements; uint16_t current_EEPROM_address; uint32_t status; + uint16_t volt_readings[36]; + int can_ids[9]; - /*while(true) + + while(true) { - //wait(0.05); - test_read_voltage_CAN(); - }*/ + for (int i = 0; i < 9; ++i) { + while(!test_read_voltage_CAN(&volt_readings[(i*4)], &can_ids[i])); + } + + for (int i = 0; i < 36; ++i) { + printf("Cellvoltage %d = %d, CAN ID is %d \r\n", i, volt_readings[i], can_ids[i/4]); + volt_readings[i] = -1; + can_ids[i/4] = 0; + } + printf("\r\n"); + + } init(); @@ -202,11 +214,13 @@ { float min_temperature; float max_temperature; - + DigitalOut isotherm_12V_pin(ISOTHERM_12V_PIN); + isotherm_12V_pin = 1; probe[0]->convert_temperature(DS1820::all_devices); + isotherm_12V_pin = 0; min_temperature = probe[0]->temperature('C'); max_temperature = min_temperature; // Initially set the max and min temperature equal - for (int i=1; i<devices_found; i++) { + for (int i=0; i<devices_found; i++) { measurements.temperature_measurements[i].ID = i; measurements.temperature_measurements[i].measurement = probe[i] ->temperature('C'); @@ -216,6 +230,8 @@ } else if (measurements.temperature_measurements[i].measurement < min_temperature) { min_temperature = measurements.temperature_measurements[i].measurement; } + + printf("Device %d temperature is %3.3f degrees Celcius.\r\n",i+1 ,probe[i]->temperature('C')); } measurements.max_cell_temp.temperature = max_temperature; measurements.min_cell_temp.temperature = min_temperature; @@ -275,10 +291,9 @@ LTC2943_initialise(); //Initialises the fixed parameters of the LTC2943 } -void test_read_voltage_CAN() +bool test_read_voltage_CAN(uint16_t readings[], int can_ids[]) { CANMessage msg; - uint16_t readings[4]; int can_id; int offset; int first_index; @@ -290,18 +305,17 @@ { readings[i] = (msg.data[2 * i]) + (msg.data[2*i+1] << 8); //Since data is 8 8bit ints not 4 16 bit ones } - can_id = msg.id; - printf("CAN ID: %d \r\n", can_id); + can_id = msg.id; + can_ids[0] = msg.id; + offset = can_id - 1536; //1536 = 0x600 first_index = (offset - 1)/4; //offset of 2,3,4 is CMU 1; 6,7,8, is CMU 2; etc. second_index = ((offset - 1) % 4) - 1; //Makes it so 0,1,2 represent each voltage set //SID: subtracted 1 to make it work - for(int i = 0; i < 4; i++) - { - printf("Cell_Voltage[%d][%d] = %d \r\n", first_index, second_index *4 + i, readings[i]); - } + + return true; } else - printf("Reading Failed \r\n"); + return false; } void test_CAN_send()