| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #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 <stdint.h>
- #include <stdio.h>
- #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;
- }
|