Fixed wrong shunt voltage reading
Some checks failed
Test compiling project / test (push) Failing after 2m24s
Some checks failed
Test compiling project / test (push) Failing after 2m24s
This commit is contained in:
@@ -23,7 +23,7 @@ uint16_t get_word(uint8_t address, uint8_t reg) {
|
||||
return (data[1] << 8) | data[0];
|
||||
}
|
||||
|
||||
String INA233::print_device_number() {
|
||||
String INA233::get_device_model() {
|
||||
char data[7]; // Array size includes space for the null terminator
|
||||
|
||||
// Request data from the PMBus device
|
||||
@@ -57,6 +57,13 @@ void sendWord(uint8_t deviceAddress, uint8_t registerAddress, uint16_t value) {
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
void sendByte(uint8_t deviceAddress, uint8_t registerAddress, uint8_t value) {
|
||||
Wire.beginTransmission(deviceAddress);
|
||||
Wire.write(registerAddress); // Send the register address
|
||||
Wire.write((uint8_t)value); // Send the low byte first
|
||||
Wire.endTransmission();
|
||||
}
|
||||
|
||||
INA233::INA233(const uint8_t address, TwoWire *wire)
|
||||
{
|
||||
_address = address;
|
||||
@@ -109,8 +116,18 @@ float INA233::getBusVoltage() {
|
||||
}
|
||||
|
||||
float INA233::getShuntVoltage() {
|
||||
uint16_t rawVoltage = get_word(INA233::_address, REGISTER_READ_VSHUNT);
|
||||
float voltage = rawVoltage * pow(10,-4);
|
||||
int16_t rawVoltage = get_word(INA233::_address, REGISTER_READ_VSHUNT); // Read raw voltage (16-bit register)
|
||||
|
||||
// Convert from two's complement to an integer value
|
||||
// If the MSB (most significant bit) is set, the number is negative
|
||||
if (rawVoltage & 0x8000) { // Check if MSB (bit 15) is set
|
||||
rawVoltage = rawVoltage - 0x10000; // Convert two's complement negative number
|
||||
}
|
||||
|
||||
// Convert value according to the datasheet
|
||||
// LSB: 2.5 μV per bit -> Multiply by 2.5e-6 to convert to volts
|
||||
float voltage = rawVoltage * 2.5e-6;
|
||||
|
||||
return voltage;
|
||||
}
|
||||
|
||||
@@ -174,4 +191,8 @@ void INA233::setShuntVoltageConversionTime(ConversionTime conversion_time) {
|
||||
|
||||
uint16_t INA233::getConfigRegister() {
|
||||
return get_word(INA233::_address, REGISTER_CONFIGURATION);
|
||||
}
|
||||
|
||||
void INA233::reset() {
|
||||
sendByte(INA233::_address, 0x12, 0x00);
|
||||
}
|
||||
@@ -7,6 +7,7 @@
|
||||
#define REGISTER_READ_VIN 0x88
|
||||
#define REGISTER_READ_VSHUNT 0xD1
|
||||
#define REGISTER_CONFIGURATION 0xD0
|
||||
#define REGISTER_READ_IIN 0x89
|
||||
|
||||
enum AveragingMode {
|
||||
averages_1 = B000,
|
||||
@@ -32,7 +33,7 @@ enum ConversionTime {
|
||||
|
||||
class INA233{
|
||||
public:
|
||||
String print_device_number();
|
||||
String get_device_model();
|
||||
INA233(uint8_t addr, TwoWire* wire = &Wire);
|
||||
bool begin(const uint8_t sda, const uint8_t scl);
|
||||
|
||||
@@ -46,6 +47,8 @@ class INA233{
|
||||
|
||||
uint16_t getConfigRegister();
|
||||
|
||||
void reset();
|
||||
|
||||
bool isConnected(void);
|
||||
|
||||
private:
|
||||
|
||||
@@ -25,7 +25,7 @@ lib_deps =
|
||||
https://github.com/tobimai/elog.git#fix-syslog
|
||||
board_build.partitions = default.csv
|
||||
upload_protocol = espota
|
||||
upload_port = 192.168.5.205
|
||||
upload_port = 10.1.10.8
|
||||
build_flags = -Wall -Wextra -DLOGGING_SPIFFS_DISABLE -DLOGGING_SD_DISABLE
|
||||
|
||||
[env:ESP32_INA226]
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#define water_level_min_key "water_level_min"
|
||||
#define water_level_max_key "water_level_max"
|
||||
#define water_volume_key "water_volume"
|
||||
#define current_software_version Version{1, 0, 1}
|
||||
#define current_software_version Version{1, 0, 0}
|
||||
#define REQUIRED_SPIFFS_VERSION Version{8, 0, 0}
|
||||
|
||||
#define RESISTOR_VALUE 4
|
||||
@@ -33,6 +33,7 @@ void init_sensor(){
|
||||
ina_sensor.setShuntVoltageConversionTime(7);
|
||||
ina_sensor.setAverage(4);
|
||||
#else
|
||||
ina_sensor.reset();
|
||||
ina_sensor.setShuntVoltageConversionTime(conversion_time_8244uS);
|
||||
ina_sensor.setBusVoltageConversionTime(conversion_time_8244uS);
|
||||
ina_sensor.setAveragingMode(averages_128);
|
||||
@@ -44,7 +45,7 @@ void read_sensor_task(void* parameter)
|
||||
while (true) {
|
||||
// Get Values from sensor
|
||||
|
||||
String chip_id = ina_sensor.print_device_number();
|
||||
String chip_id = ina_sensor.get_device_model();
|
||||
LOG(DEBUG, "Chip Model: %s", chip_id.c_str());
|
||||
|
||||
float bus_voltage = ina_sensor.getBusVoltage();
|
||||
|
||||
Reference in New Issue
Block a user