#include "src/battery.h" #include "src/interfaces/i2c_controller_interface.h" #include "ti/driverlib/dl_i2c.h" #include "ti/driverlib/m0p/dl_core.h" #include "ti_msp_dl_config.h" #include "src/peripherals/adc/adc.h" #include #include #include "src/peripherals/adc/adc_interface.h" static ADC_Params adc_params; static ADC_MeasurementState adc_state = ADC_STATE_CONFIGURE; void updateADCReading_multichannel(uint8_t slot, uint8_t channel) { while (adc_state != ADC_STATE_DONE) { switch (adc_state) { case ADC_STATE_CONFIGURE: adc_params.channel = channel; //printf("Channel: %d\n", adc_params.channel); adc_params.resolution = 12; adc_params.continuous = 0; adc_params.gain = 1; adc_hal.configure(slot, adc_params); //ADC_SetConfigurationBytes(adc_params); adc_state = ADC_STATE_WAIT; break; case ADC_STATE_WAIT: //if (ADC_CheckReadyBit(slot, adc_params)) { if(adc_hal.is_ready(slot, adc_params)){ adc_state = ADC_STATE_READ; } break; case ADC_STATE_READ: if (channel == 0) { int16_t raw_adc_voltage = adc_hal.read_raw(slot, adc_params); batteries[slot].voltage = adc_hal.convert_voltage(raw_adc_voltage, adc_params); printf("[ADC] Battery voltage for slot %d is %u mV.\n", slot, batteries[slot].voltage); adc_state = ADC_STATE_DONE; } else if (channel == 1) { int16_t raw_adc_current = adc_hal.read_raw(slot, adc_params); batteries[slot].current = adc_hal.convert_current(raw_adc_current, adc_params); printf("[ADC] Battery current for slot %d is %u mA.\n", slot, batteries[slot].current); adc_state = ADC_STATE_DONE; } break; default: channel = 0; adc_state = ADC_STATE_CONFIGURE; break; } } adc_state = ADC_STATE_CONFIGURE; }