aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2019-11-17 18:24:38 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2019-11-17 18:24:38 +0100
commitd81645c52f11f0817281dbb8eff637cdea1bf2ea (patch)
tree219623b432474d7f9869113cf7676e0bc2a24c8e
parentb410109dea94e4a355d7ba6e9a4761c5afe93eb4 (diff)
downloadglutte-batteries-d81645c52f11f0817281dbb8eff637cdea1bf2ea.tar.gz
glutte-batteries-d81645c52f11f0817281dbb8eff637cdea1bf2ea.tar.bz2
glutte-batteries-d81645c52f11f0817281dbb8eff637cdea1bf2ea.zip
Additional changes in SPI
-rw-r--r--sw/ltc2400.cpp24
-rw-r--r--sw/ltc2400.h4
-rw-r--r--sw/main.cpp6
3 files changed, 19 insertions, 15 deletions
diff --git a/sw/ltc2400.cpp b/sw/ltc2400.cpp
index 23287bc..a221029 100644
--- a/sw/ltc2400.cpp
+++ b/sw/ltc2400.cpp
@@ -110,17 +110,21 @@ void ltc2400_init()
sei();
}
-int ltc2400_conversion_ready()
+bool ltc2400_conversion_ready()
{
+ return true;
+#warning "Clarify usage of SS"
+
cs_low();
// EOC == 0 means conversion is complete and device in sleep mode
const int eoc = (PORTB & PINB_SPI_MISO) ? 0 : 1;
+
cs_high();
return eoc;
}
-float ltc2400_get_conversion_result(bool& dmy_fault, bool& exr_fault, uint32_t& adc_value)
+float ltc2400_get_conversion_result(bool& dmy_fault, bool& exr_fault, uint32_t& raw_value)
{
cs_low();
@@ -135,17 +139,17 @@ float ltc2400_get_conversion_result(bool& dmy_fault, bool& exr_fault, uint32_t&
cs_high();
- const uint32_t result =
- ((uint32_t)data[3] << 24) |
- ((uint32_t)data[2] << 16) |
- ((uint32_t)data[1] << 8) |
- ((uint32_t)data[0]);
+ raw_value =
+ ((uint32_t)data[0] << 24) |
+ ((uint32_t)data[1] << 16) |
+ ((uint32_t)data[2] << 8) |
+ ((uint32_t)data[3]);
- dmy_fault = result & _BV(30);
- exr_fault = not (result & _BV(28));
+ dmy_fault = raw_value & (1uL << 30);
+ exr_fault = raw_value & (1uL << 28);
// Mask 4 MSB status bits, and shift out 4 sub-LSB bits
- adc_value = (result >> 4) & 0x00FFFFFF;
+ const uint32_t adc_value = (raw_value >> 4) & 0x00FFFFFF;
// Convert ADC value to voltage
return ((float)adc_value) / ((float)0x00FFFFFF) / 5.0f;
diff --git a/sw/ltc2400.h b/sw/ltc2400.h
index 720b64c..d46a24f 100644
--- a/sw/ltc2400.h
+++ b/sw/ltc2400.h
@@ -31,6 +31,6 @@
void ltc2400_init();
-int ltc2400_conversion_ready();
+bool ltc2400_conversion_ready();
-float ltc2400_get_conversion_result(bool& dmy_fault, bool& exr_fault, uint32_t& adc_value);
+float ltc2400_get_conversion_result(bool& dmy_fault, bool& exr_fault, uint32_t& raw_value);
diff --git a/sw/main.cpp b/sw/main.cpp
index 1c2e402..f929c84 100644
--- a/sw/main.cpp
+++ b/sw/main.cpp
@@ -422,15 +422,15 @@ int main()
if (exr_fault) {
flag_error(error_type_t::LTC2400_EXTENDED_RANGE_ERROR);
-
- snprintf(timestamp_buf, sizeof(timestamp_buf), "DBG,%ld" ENDL, adc_value);
- uart_puts(timestamp_buf);
}
/* Vout - 2.5V = Ishunt * Rshunt * 20 */
const double i_shunt = (adc_voltage - 2.5) / (20.0 * R_SHUNT);
capacity_accum += i_shunt * TIMER_TICK_INTERVAL;
+ snprintf(timestamp_buf, sizeof(timestamp_buf), "DBG,%ld mA" ENDL, lrint(i_shunt * 1000.0));
+ uart_puts(timestamp_buf);
+
if (capacity_accum < 0) { capacity_accum = 0; }
if (capacity_accum > MAX_CAPACITY) { capacity_accum = MAX_CAPACITY; }