adc.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "src/battery_data/battery.h"
  2. #include "src/peripherals/adc/adc.h"
  3. #include <stdint.h>
  4. #include <stdio.h>
  5. #include "src/peripherals/adc/adc_interface.h"
  6. #include "src/interfaces/i2c_controller_interface.h"
  7. //static ADC_Params adc_params;
  8. static ADC_MeasurementState adc_state = ADC_STATE_CONFIGURE;
  9. void updateADCReading_multichannel(uint8_t slot, uint8_t channel) {
  10. //printf("Slot: %d, Channel: %d\n", slot, channel);
  11. ADC_Params adc_params= {0};
  12. while (adc_state != ADC_STATE_DONE) {
  13. switch (adc_state) {
  14. case ADC_STATE_CONFIGURE:
  15. adc_params.channel = channel;
  16. adc_params.resolution = 12;
  17. //adc_params.continuous = 1;
  18. adc_params.gain = 1;
  19. //printf("Config: Memory address of batteries: %p\n", &batteries[0]);
  20. adc_hal.configure(slot, &adc_params);
  21. //adc_state = ADC_STATE_WAIT;
  22. adc_state = ADC_STATE_READ;
  23. break;
  24. case ADC_STATE_WAIT:
  25. if(adc_hal.is_ready(slot, &adc_params)){
  26. adc_state = ADC_STATE_READ;
  27. }
  28. break;
  29. case ADC_STATE_READ:
  30. if (channel == 0) {
  31. int16_t raw_adc_voltage = adc_hal.read_raw(slot, &adc_params);
  32. batteries[slot].voltage =
  33. adc_hal.convert_voltage(raw_adc_voltage, &adc_params);
  34. adc_state = ADC_STATE_DONE;
  35. printf("[ADC] Battery Voltage in slot %d is %d mV.\n", slot, batteries[slot].voltage);
  36. //printf("voltage: Memory address of batteries: %p\n", &batteries[0].voltage);
  37. } else if (channel == 1) {
  38. int16_t raw_adc_current = adc_hal.read_raw(slot, &adc_params);
  39. batteries[slot].current =
  40. adc_hal.convert_current(raw_adc_current, &adc_params);
  41. adc_state = ADC_STATE_DONE;
  42. printf("[ADC] Battery Current in slot %d is %d mA.\n", slot, batteries[slot].current);
  43. //printf("current: Memory address of batteries: %p\n", &batteries[0]);
  44. } else if (channel == 2) {
  45. int16_t raw_adc_voltage = adc_hal.read_raw(slot, &adc_params);
  46. batteries[slot].voltage =
  47. adc_hal.convert_voltage(raw_adc_voltage, &adc_params);
  48. adc_state = ADC_STATE_DONE;
  49. printf("[ADC] Ch3 Voltage in slot %d is %d mV.\n", slot, batteries[slot].voltage);
  50. //printf("voltage: Memory address of batteries: %p\n", &batteries[0].voltage);
  51. }
  52. break;
  53. default:
  54. channel = 0;
  55. adc_state = ADC_STATE_CONFIGURE;
  56. break;
  57. }
  58. }
  59. adc_state = ADC_STATE_CONFIGURE;
  60. }