main/task_ina219.c

changeset 13
c3b29a1dcf1e
parent 6
bad3414f7bc4
child 14
2a9f67ecbc72
equal deleted inserted replaced
12:bb72d448e282 13:c3b29a1dcf1e
52 ina219_state->Battery.fake = (ina219_b_dev.i2c_dev.addr == 0) ? true:false; 52 ina219_state->Battery.fake = (ina219_b_dev.i2c_dev.addr == 0) ? true:false;
53 ina219_state->Battery.address = ina219_b_dev.i2c_dev.addr; 53 ina219_state->Battery.address = ina219_b_dev.i2c_dev.addr;
54 ina219_state->Battery.error = INA219_ERR_NONE; 54 ina219_state->Battery.error = INA219_ERR_NONE;
55 if (ina219_b_dev.i2c_dev.addr) { 55 if (ina219_b_dev.i2c_dev.addr) {
56 ESP_LOGI(TAG, "Configuring INA219 Battery"); 56 ESP_LOGI(TAG, "Configuring INA219 Battery");
57 ESP_ERROR_CHECK(ina219_configure(&ina219_b_dev, INA219_BUS_RANGE_16V, INA219_GAIN_0_125, 57 ESP_ERROR_CHECK(ina219_configure(&ina219_b_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125,
58 INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS)); 58 INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS));
59 ESP_LOGI(TAG, "Calibrating INA219 Battery"); 59 ESP_LOGI(TAG, "Calibrating INA219 Battery");
60 ESP_ERROR_CHECK(ina219_calibrate(&ina219_b_dev, (float)I_MAX_CURRENT, (float)I_SHUNT_RESISTOR_MILLI_OHM / 1000.0f)); 60 ESP_ERROR_CHECK(ina219_calibrate(&ina219_b_dev, (float)I_MAX_CURRENT, (float)I_SHUNT_RESISTOR_MILLI_OHM / 1000.0f));
61 } 61 }
62 62
64 ina219_state->Solar.fake = (ina219_s_dev.i2c_dev.addr == 0) ? true:false; 64 ina219_state->Solar.fake = (ina219_s_dev.i2c_dev.addr == 0) ? true:false;
65 ina219_state->Solar.address = ina219_s_dev.i2c_dev.addr; 65 ina219_state->Solar.address = ina219_s_dev.i2c_dev.addr;
66 ina219_state->Solar.error = INA219_ERR_NONE; 66 ina219_state->Solar.error = INA219_ERR_NONE;
67 if (ina219_s_dev.i2c_dev.addr) { 67 if (ina219_s_dev.i2c_dev.addr) {
68 ESP_LOGI(TAG, "Configuring INA219 Solar"); 68 ESP_LOGI(TAG, "Configuring INA219 Solar");
69 ESP_ERROR_CHECK(ina219_configure(&ina219_s_dev, INA219_BUS_RANGE_16V, INA219_GAIN_0_125, 69 ESP_ERROR_CHECK(ina219_configure(&ina219_s_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125,
70 INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS)); 70 INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS));
71 ESP_LOGI(TAG, "Calibrating INA219 Solar"); 71 ESP_LOGI(TAG, "Calibrating INA219 Solar");
72 ESP_ERROR_CHECK(ina219_calibrate(&ina219_s_dev, (float)I_MAX_CURRENT, (float)I_SHUNT_RESISTOR_MILLI_OHM / 1000.0f)); 72 ESP_ERROR_CHECK(ina219_calibrate(&ina219_s_dev, (float)I_MAX_CURRENT, (float)I_SHUNT_RESISTOR_MILLI_OHM / 1000.0f));
73 } 73 }
74 74
94 * the solar chip as if it is charging. 94 * the solar chip as if it is charging.
95 * 3. Only solar sensor. Use scenario 4, but show measured values. 95 * 3. Only solar sensor. Use scenario 4, but show measured values.
96 * 4. Fake everything. 96 * 4. Fake everything.
97 */ 97 */
98 if (! ina219_state->Battery.fake) { 98 if (! ina219_state->Battery.fake) {
99 /*
100 * Note, on Arduino power down and resume works, but not on esp-idf.
101 * This could save only 0.5 mA per device.
102 */
103 // ESP_ERROR_CHECK(ina219_configure(&ina219_b_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125,
104 // INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS));
99 ESP_ERROR_CHECK(ina219_get_bus_voltage(&ina219_b_dev, &bus_voltage)); 105 ESP_ERROR_CHECK(ina219_get_bus_voltage(&ina219_b_dev, &bus_voltage));
100 ESP_ERROR_CHECK(ina219_get_shunt_voltage(&ina219_b_dev, &shunt_voltage)); 106 ESP_ERROR_CHECK(ina219_get_shunt_voltage(&ina219_b_dev, &shunt_voltage));
101 ESP_ERROR_CHECK(ina219_get_current(&ina219_b_dev, &current)); 107 ESP_ERROR_CHECK(ina219_get_current(&ina219_b_dev, &current));
102 ESP_ERROR_CHECK(ina219_get_power(&ina219_b_dev, &power)); 108 ESP_ERROR_CHECK(ina219_get_power(&ina219_b_dev, &power));
109 // ESP_ERROR_CHECK(ina219_configure(&ina219_b_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125,
110 // INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_POWER_DOWN));
103 ESP_LOGI(TAG, "Battery VBUS: %.04f V, VSHUNT: %.04f mV, IBUS: %.04f mA, PBUS: %.04f mW", 111 ESP_LOGI(TAG, "Battery VBUS: %.04f V, VSHUNT: %.04f mV, IBUS: %.04f mA, PBUS: %.04f mW",
104 bus_voltage, shunt_voltage * 1000, current * 1000, power * 1000); 112 bus_voltage, shunt_voltage * 1000, current * 1000, power * 1000);
105 } 113 }
106 if (xSemaphoreTake(xSemaphoreINA219, 25) == pdTRUE) { 114 if (xSemaphoreTake(xSemaphoreINA219, 25) == pdTRUE) {
107 if (ina219_state->Battery.fake) { 115 if (ina219_state->Battery.fake) {
121 ina219_state->Battery.valid = true; 129 ina219_state->Battery.valid = true;
122 xSemaphoreGive(xSemaphoreINA219); 130 xSemaphoreGive(xSemaphoreINA219);
123 } 131 }
124 132
125 if (! ina219_state->Solar.fake) { 133 if (! ina219_state->Solar.fake) {
134 // ESP_ERROR_CHECK(ina219_configure(&ina219_s_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125,
135 // INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_CONT_SHUNT_BUS));
126 ESP_ERROR_CHECK(ina219_get_bus_voltage(&ina219_s_dev, &bus_voltage)); 136 ESP_ERROR_CHECK(ina219_get_bus_voltage(&ina219_s_dev, &bus_voltage));
127 ESP_ERROR_CHECK(ina219_get_shunt_voltage(&ina219_s_dev, &shunt_voltage)); 137 ESP_ERROR_CHECK(ina219_get_shunt_voltage(&ina219_s_dev, &shunt_voltage));
128 ESP_ERROR_CHECK(ina219_get_current(&ina219_s_dev, &current)); 138 ESP_ERROR_CHECK(ina219_get_current(&ina219_s_dev, &current));
129 ESP_ERROR_CHECK(ina219_get_power(&ina219_s_dev, &power)); 139 ESP_ERROR_CHECK(ina219_get_power(&ina219_s_dev, &power));
140 // ESP_ERROR_CHECK(ina219_configure(&ina219_s_dev, INA219_BUS_RANGE_32V, INA219_GAIN_0_125,
141 // INA219_RES_12BIT_1S, INA219_RES_12BIT_1S, INA219_MODE_POWER_DOWN));
130 ESP_LOGI(TAG, " Solar VBUS: %.04f V, VSHUNT: %.04f mV, IBUS: %.04f mA, PBUS: %.04f mW", 142 ESP_LOGI(TAG, " Solar VBUS: %.04f V, VSHUNT: %.04f mV, IBUS: %.04f mA, PBUS: %.04f mW",
131 bus_voltage, shunt_voltage * 1000, current * 1000, power * 1000); 143 bus_voltage, shunt_voltage * 1000, current * 1000, power * 1000);
132 } 144 }
133 if (xSemaphoreTake(xSemaphoreINA219, 25) == pdTRUE) { 145 if (xSemaphoreTake(xSemaphoreINA219, 25) == pdTRUE) {
134 if (! ina219_state->Solar.fake && ! ina219_state->Battery.fake) { 146 if (! ina219_state->Solar.fake && ! ina219_state->Battery.fake) {

mercurial