فهرست منبع

Fix: Alle ADCs auf 12 Bit gesetzt.

Heinrich Blatt 5 ماه پیش
والد
کامیت
aed791d468
3فایلهای تغییر یافته به همراه10 افزوده شده و 18 حذف شده
  1. 1 1
      src/battery_data/battery.c
  2. 8 16
      src/peripherals/adc/adc.c
  3. 1 1
      src/peripherals/adc/adc_hal.c

+ 1 - 1
src/battery_data/battery.c

@@ -112,7 +112,7 @@ static void batteryslots_read_state(uint8_t slot) {
             // the voltage reading is invalid -> ignore this cycle.
             return;
         }
-        battery_slots[slot].measurement.current = bare_voltage*10/1000; // current comes in microvolts
+        battery_slots[slot].measurement.current = bare_voltage*10/1000; // current comes on a 0.1 ohms shunt
 #ifdef DEBUG_CTRL
         printf("Slot %d voltage: %d mV and %d mA (dac shunt)\n", slot, battery_slots[slot].measurement.voltage, battery_slots[slot].measurement.current);
 #endif

+ 8 - 16
src/peripherals/adc/adc.c

@@ -21,19 +21,15 @@ uint16_t read_adc_channel(uint8_t slot, uint8_t channel) {
         case ADC_STATE_CONFIGURE:
             adc_params.channel = channel;
             adc_params.continuous = ADC_MEASUREMENT_IS_CONTINUOUS;
-            if (channel == 0 || channel == 3) {
-                // voltage measurement
-                // -> we can measure directly
-                adc_params.gain = 1;
-                adc_params.resolution = 12;
-                adc_params.factor = 1;
+            
+            adc_params.gain = 1;
+            adc_params.resolution = 12;
+            if (channel == 1 || channel == 2) {
+                adc_params.factor = 1000;
             } else {
-                // current measurement
-                // -> maximum gain, max resolution
-                //adc_params.gain = 8;
-                //adc_params.resolution = 16;
-                adc_params.factor = 1000; // get microvolts
+                adc_params.factor = 1;
             }
+
             //printf("Config: Memory address of batteries: %p\n", &batteries[0]);
             if (!adc_hal.configure(slot, &adc_params)) {
                 return 0xffff;
@@ -44,11 +40,7 @@ uint16_t read_adc_channel(uint8_t slot, uint8_t channel) {
             } else {
                 // in continuous mode we can directly read
                 adc_state = ADC_STATE_READ;
-                if (adc_params.resolution == 16) {
-                    delay_cycles(ADC_CONTINUOUS_DELAY_CYCLES_SHUNT);
-                } else {
-                    delay_cycles(ADC_CONTINUOUS_DELAY_CYCLES_VOLTAGES);
-                }
+                delay_cycles(ADC_CONTINUOUS_DELAY_CYCLES_VOLTAGES);
             }
             break;
 

+ 1 - 1
src/peripherals/adc/adc_hal.c

@@ -219,7 +219,7 @@ static int16_t read_adc_raw_data(uint8_t slot_id, ADC_Params *params) {
             //printf("Error: Unknown ADC Resolution!\n");
             break;
     }
-    return raw_adc * params->factor * 2048 / (max_adc_val/2) / params->gain;
+    return raw_adc * params->factor * 2048 / (max_adc_val/2) / params->gain;;
 }
 
 ADC_Interface adc_hal= {