diff --git a/esphome/components/bl0910/bl0910.cpp b/esphome/components/bl0910/bl0910.cpp index 407ae9177b..790be39717 100644 --- a/esphome/components/bl0910/bl0910.cpp +++ b/esphome/components/bl0910/bl0910.cpp @@ -1,5 +1,7 @@ #include "bl0910.h" #include "esphome/core/log.h" +#include "esphome/core/helpers.h" +#include "constant.h" #include namespace esphome { @@ -7,295 +9,7 @@ namespace bl0910 { static const char *const TAG = "bl0910"; -// Credit to JustNoot for the following constants -// https://github.com/JustNoot/10CH-Energy-Meter/blob/main/bl0910_esp32_test.ino - -// https://www.compel.ru/item-pdf/5ba3245acc89f7213ea0cc7e9a0b8c0e/pn/cn-bell~bl0910.pdf -static const uint8_t BL0910_READ_COMMAND = 0x82; -static const uint8_t BL0910_WRITE_COMMAND = 0x81; - -// current and voltage waveform data, 24bit signed number, default: 0x000000 -static const uint8_t BL0910_REG_WAVE_1 = 0x01; -static const uint8_t BL0910_REG_WAVE_2 = 0x02; -static const uint8_t BL0910_REG_WAVE_3 = 0x03; -static const uint8_t BL0910_REG_WAVE_4 = 0x04; -static const uint8_t BL0910_REG_WAVE_5 = 0x05; -static const uint8_t BL0910_REG_WAVE_6 = 0x06; -static const uint8_t BL0910_REG_WAVE_7 = 0x07; -static const uint8_t BL0910_REG_WAVE_8 = 0x08; -static const uint8_t BL0910_REG_WAVE_9 = 0x09; -static const uint8_t BL0910_REG_WAVE_10 = 0x0A; -static const uint8_t BL0910_REG_WAVE_11 = 0x0B; - -// effective value calculation register, 24 bit unsigned number, default: 0x000000 -static const uint8_t BL0910_REG_RMS_1 = 0x0C; -static const uint8_t BL0910_REG_RMS_2 = 0x0D; -static const uint8_t BL0910_REG_RMS_3 = 0x0E; -static const uint8_t BL0910_REG_RMS_4 = 0x0F; -static const uint8_t BL0910_REG_RMS_5 = 0x10; -static const uint8_t BL0910_REG_RMS_6 = 0x11; -static const uint8_t BL0910_REG_RMS_7 = 0x12; -static const uint8_t BL0910_REG_RMS_8 = 0x13; -static const uint8_t BL0910_REG_RMS_9 = 0x14; -static const uint8_t BL0910_REG_RMS_10 = 0x15; -static const uint8_t BL0910_REG_RMS_11 = 0x16; -static const uint8_t BL0910_REG_RMS[] = {BL0910_REG_RMS_1, BL0910_REG_RMS_2, BL0910_REG_RMS_3, BL0910_REG_RMS_4, - BL0910_REG_RMS_5, BL0910_REG_RMS_6, BL0910_REG_RMS_7, BL0910_REG_RMS_8, - BL0910_REG_RMS_9, BL0910_REG_RMS_10, BL0910_REG_RMS_11}; - -// fast effective value register, 24 bit unsigned number, default: 0x000000 -static const uint8_t BL0910_REG_FAST_RMS_1 = 0x17; -static const uint8_t BL0910_REG_FAST_RMS_2 = 0x18; -static const uint8_t BL0910_REG_FAST_RMS_3 = 0x19; -static const uint8_t BL0910_REG_FAST_RMS_4 = 0x1A; -static const uint8_t BL0910_REG_FAST_RMS_5 = 0x1B; -static const uint8_t BL0910_REG_FAST_RMS_6 = 0x1C; -static const uint8_t BL0910_REG_FAST_RMS_7 = 0x1D; -static const uint8_t BL0910_REG_FAST_RMS_8 = 0x1E; -static const uint8_t BL0910_REG_FAST_RMS_9 = 0x1F; -static const uint8_t BL0910_REG_FAST_RMS_10 = 0x20; -static const uint8_t BL0910_REG_FAST_RMS_11 = 0x21; - -// active power, 24 bit signed number, default 0x000000 -static const uint8_t BL0910_REG_WATT_1 = 0x22; -static const uint8_t BL0910_REG_WATT_2 = 0x23; -static const uint8_t BL0910_REG_WATT_3 = 0x24; -static const uint8_t BL0910_REG_WATT_4 = 0x25; -static const uint8_t BL0910_REG_WATT_5 = 0x26; -static const uint8_t BL0910_REG_WATT_6 = 0x27; -static const uint8_t BL0910_REG_WATT_7 = 0x28; -static const uint8_t BL0910_REG_WATT_8 = 0x29; -static const uint8_t BL0910_REG_WATT_9 = 0x2A; -static const uint8_t BL0910_REG_WATT_10 = 0x2B; -static const uint8_t BL0910_REG_WATT[] = {BL0910_REG_WATT_1, BL0910_REG_WATT_2, BL0910_REG_WATT_3, BL0910_REG_WATT_4, - BL0910_REG_WATT_5, BL0910_REG_WATT_6, BL0910_REG_WATT_7, BL0910_REG_WATT_8, - BL0910_REG_WATT_9, BL0910_REG_WATT_10}; -static const uint8_t BL0910_REG_WATT_TOTAL = 0x2C; - -static const uint8_t BL0910_REG_FVAR = 0x2D; -static const uint8_t BL0910_REG_VA = 0x2E; - -// active energy pulse count register, 24 bit unsigned number, default: 0x000000 -static const uint8_t BL0910_REG_CF_CNT_1 = 0x2F; -static const uint8_t BL0910_REG_CF_CNT_2 = 0x30; -static const uint8_t BL0910_REG_CF_CNT_3 = 0x31; -static const uint8_t BL0910_REG_CF_CNT_4 = 0x32; -static const uint8_t BL0910_REG_CF_CNT_5 = 0x33; -static const uint8_t BL0910_REG_CF_CNT_6 = 0x34; -static const uint8_t BL0910_REG_CF_CNT_7 = 0x35; -static const uint8_t BL0910_REG_CF_CNT_8 = 0x36; -static const uint8_t BL0910_REG_CF_CNT_9 = 0x37; -static const uint8_t BL0910_REG_CF_CNT_10 = 0x38; -static const uint8_t BL0910_REG_CF_CNT[] = { - BL0910_REG_CF_CNT_1, BL0910_REG_CF_CNT_2, BL0910_REG_CF_CNT_3, BL0910_REG_CF_CNT_4, BL0910_REG_CF_CNT_5, - BL0910_REG_CF_CNT_6, BL0910_REG_CF_CNT_7, BL0910_REG_CF_CNT_8, BL0910_REG_CF_CNT_9, BL0910_REG_CF_CNT_10}; -static const uint8_t BL0910_REG_CF_CNT_TOTAL = 0x39; -static const uint8_t BL0910_REG_CFQ_CNT_TOTAL = 0x3A; -static const uint8_t BL0910_REG_CFS_CNT_TOTAL = 0x3B; - -// phase angle measurement register, 16 bit unsigned number, default: 0x0000 -static const uint8_t BL0910_REG_ANGLE_1 = 0x3C; -static const uint8_t BL0910_REG_ANGLE_2 = 0x3D; -static const uint8_t BL0910_REG_ANGLE_3 = 0x3E; -static const uint8_t BL0910_REG_ANGLE_4 = 0x3F; -static const uint8_t BL0910_REG_ANGLE_5 = 0x40; -static const uint8_t BL0910_REG_ANGLE_6 = 0x41; -static const uint8_t BL0910_REG_ANGLE_7 = 0x42; -static const uint8_t BL0910_REG_ANGLE_8 = 0x43; -static const uint8_t BL0910_REG_ANGLE_9 = 0x44; -static const uint8_t BL0910_REG_ANGLE_10 = 0x45; -static const uint8_t BL0910_REG_ANGLE[] = { - BL0910_REG_ANGLE_1, BL0910_REG_ANGLE_2, BL0910_REG_ANGLE_3, BL0910_REG_ANGLE_4, BL0910_REG_ANGLE_5, - BL0910_REG_ANGLE_6, BL0910_REG_ANGLE_7, BL0910_REG_ANGLE_8, BL0910_REG_ANGLE_9, BL0910_REG_ANGLE_10}; - -static const uint8_t BL0910_REG_FAST_RMS_H_1 = 0x46; -static const uint8_t BL0910_REG_FAST_RMS_H_2 = 0x47; -static const uint8_t BL0910_REG_FAST_RMS_H_3 = 0x48; -static const uint8_t BL0910_REG_FAST_RMS_H_4 = 0x49; -static const uint8_t BL0910_REG_FAST_RMS_H_5 = 0x57; -static const uint8_t BL0910_REG_FAST_RMS_H_6 = 0x58; -static const uint8_t BL0910_REG_FAST_RMS_H_7 = 0x59; -static const uint8_t BL0910_REG_FAST_RMS_H_8 = 0x5A; -static const uint8_t BL0910_REG_FAST_RMS_H_9 = 0x5B; -static const uint8_t BL0910_REG_FAST_RMS_H_10 = 0x5C; - -static const uint8_t BL0910_REG_PF = 0x4A; - -static const uint8_t BL0910_REG_LINE_WATTHR = 0x4B; -static const uint8_t BL0910_REG_LINE_VARH = 0x4C; -static const uint8_t BL0910_REG_SIGN = 0x4D; -static const uint8_t BL0910_REG_PERIOD = 0x4E; - -static const uint8_t BL0910_REG_STATUS1 = 0x54; -static const uint8_t BL0910_REG_STATUS3 = 0x56; - -// temperature measurement register, 24 bit unsigned numver, default: 0x000000 -static const uint8_t BL0910_REG_TPS1 = 0x5E; // internal temperature, (TPS1-64)*12.5/59-40 ˚C -static const uint8_t BL0910_REG_TPS2 = 0x5F; // VT pin ADC value - -// PGA gain adjustment register, 24 bit (4 bits per channel), default: 0x000000 -// 4 PGA settings: 0000 = 1; 0001 = 2; 0010 = 8; 0011 = 16 -// [3:0] voltage channel, current channel 6 -// [7:4] current channel 1, current channel 7 -// [11:8] current channel 2, current channel 8 -// [15:12] current channel 3, current channel 9 -// [19:16] current channel 4, current channel 10 -// [23:20] current channel 5 -static const uint8_t BL0910_REG_GAIN1 = 0x60; -static const uint8_t BL0910_REG_GAIN2 = 0x61; - -// channel phase compensation register, 16 bit (8 bit per channel), default: 0x0000 -static const uint8_t BL0910_REG_PHASE_1_2 = 0x64; -static const uint8_t BL0910_REG_PHASE_3_4 = 0x65; -static const uint8_t BL0910_REG_PHASE_5_6 = 0x66; -static const uint8_t BL0910_REG_PHASE_7_8 = 0x67; -static const uint8_t BL0910_REG_PHASE_9_10 = 0x68; -static const uint8_t BL0910_REG_PHASE_11 = 0x69; // 8 bit, default: 0x00 - -// phase compensation register, 5 bit number, default: 0000H -static const uint8_t BL0910_REG_VAR_PHCAL_I = 0x6A; -static const uint8_t BL0910_REG_VAR_PHCAL_V = 0x6B; - -static const uint8_t BL0910_REG_RMS_GAIN_1 = 0x6C; -static const uint8_t BL0910_REG_RMS_GAIN_2 = 0x6D; -static const uint8_t BL0910_REG_RMS_GAIN_3 = 0x6E; -static const uint8_t BL0910_REG_RMS_GAIN_4 = 0x6F; -static const uint8_t BL0910_REG_RMS_GAIN_5 = 0x70; -static const uint8_t BL0910_REG_RMS_GAIN_6 = 0x71; -static const uint8_t BL0910_REG_RMS_GAIN_7 = 0x72; -static const uint8_t BL0910_REG_RMS_GAIN_8 = 0x73; -static const uint8_t BL0910_REG_RMS_GAIN_9 = 0x74; -static const uint8_t BL0910_REG_RMS_GAIN_10 = 0x75; -static const uint8_t BL0910_REG_RMS_GAIN_11 = 0x76; - -static const uint8_t BL0910_REG_RMS_OFFSET_1 = 0x77; -static const uint8_t BL0910_REG_RMS_OFFSET_2 = 0x78; -static const uint8_t BL0910_REG_RMS_OFFSET_3 = 0x79; -static const uint8_t BL0910_REG_RMS_OFFSET_4 = 0x7A; -static const uint8_t BL0910_REG_RMS_OFFSET_5 = 0x7B; -static const uint8_t BL0910_REG_RMS_OFFSET_6 = 0x7C; -static const uint8_t BL0910_REG_RMS_OFFSET_7 = 0x7D; -static const uint8_t BL0910_REG_RMS_OFFSET_8 = 0x7E; -static const uint8_t BL0910_REG_RMS_OFFSET_9 = 0x7F; -static const uint8_t BL0910_REG_RMS_OFFSET_10 = 0x80; -static const uint8_t BL0910_REG_RMS_OFFSET_11 = 0x81; - -// active power small signal compensation register, 12 bit two's complement (register is 24 bit), default: 0x000 -static const uint8_t BL0910_REG_WA_LOW_OFFSET_1_2 = 0x82; -static const uint8_t BL0910_REG_WA_LOW_OFFSET_3_4 = 0x83; -static const uint8_t BL0910_REG_WA_LOW_OFFSET_5_6 = 0x84; -static const uint8_t BL0910_REG_WA_LOW_OFFSET_7_8 = 0x85; -static const uint8_t BL0910_REG_WA_LOW_OFFSET_9_10 = 0x86; - -static const uint8_t BL0910_REG_FVAR_LOW_OFFSET = 0x87; - -// [11:0] active power anti-creep threshold register, 12 bit unsigned number, default: 0x04C -// [23:12] reactive power anti-creep threshold register, 12 bit unsigned number, default: 0x04C -// 24 bit unsigned number, default: 0x04C04C -static const uint8_t BL0910_REG_VAR_CREEP_WA_CREEP = 0x88; - -// total power anti-creep threshold register, 12 bit unsigned number, default: 0x000 -static const uint8_t BL0910_REG_WA_CREEP2 = 0x89; - -// effective value anti-creep threshold register, 12 bit unsigned number, default: 0x200 -static const uint8_t BL0910_REG_RMS_CREEP = 0x8A; - -static const uint8_t BL0910_REG_FAST_RMS_CTRL = 0x8B; - -// peak threshold register, 24 bit number, deafult: 0xFFFFFF -// [11:0] voltage peak threshold, default: 0xFFF -// [23:12] current peak threshold, default: 0xFFF -static const uint8_t BL0910_REG_I_PKLVL_V_PKLVL = 0x8C; - -static const uint8_t BL0910_REG_SAGCYC_ZXTOUT = 0x8E; -static const uint8_t BL0910_REG_SAGLVL_LINECYC = 0x8F; - -static const uint8_t BL0910_REG_FLAG_CTRL = 0x90; -static const uint8_t BL0910_REG_FLAG_CTRL1 = 0x91; -static const uint8_t BL0910_REG_FLAG_CTRL2 = 0x92; - -// ADC shutdown register, 11 bit number, default: 0x000 -static const uint8_t BL0910_REG_ADC_PD = 0x93; - -// temperature control register, 16 bit number, default: 0x07FF -static const uint8_t BL0910_REG_TPS_CTRL = 0x94; - -// external temperature coefficient register, 16 bit number, default: 0x0000 -static const uint8_t BL0910_REG_TPS2_A_B = 0x95; - -static const uint8_t BL0910_REG_MODE1 = 0x96; -static const uint8_t BL0910_REG_MODE2 = 0x97; -static const uint8_t BL0910_REG_MODE = 0x98; - -static const uint8_t BL0910_REG_MASK1 = 0x9A; - -static const uint8_t BL0910_REG_RST_ENG = 0x9D; - -static const uint8_t BL0910_REG_USR_WRPROT = 0x9E; - -static const uint8_t BL0910_REG_SOFT_RESET = 0x9F; - -// channel gain calibration register, 16 bit two's complement, default: 0x0000 -static const uint8_t BL0910_REG_CHANNEL_GAIN_1 = 0xA0; -static const uint8_t BL0910_REG_CHANNEL_GAIN_2 = 0xA1; -static const uint8_t BL0910_REG_CHANNEL_GAIN_3 = 0xA2; -static const uint8_t BL0910_REG_CHANNEL_GAIN_4 = 0xA3; -static const uint8_t BL0910_REG_CHANNEL_GAIN_5 = 0xA4; -static const uint8_t BL0910_REG_CHANNEL_GAIN_6 = 0xA5; -static const uint8_t BL0910_REG_CHANNEL_GAIN_7 = 0xA6; -static const uint8_t BL0910_REG_CHANNEL_GAIN_8 = 0xA7; -static const uint8_t BL0910_REG_CHANNEL_GAIN_9 = 0xA8; -static const uint8_t BL0910_REG_CHANNEL_GAIN_10 = 0xA9; -static const uint8_t BL0910_REG_CHANNEL_GAIN_11 = 0xAA; - -// channel offset calibration register, 16 bit two's complement, default: 0x0000 -static const uint8_t BL0910_REG_CHANNEL_OFFSET_1 = 0xAB; -static const uint8_t BL0910_REG_CHANNEL_OFFSET_2 = 0xAC; -static const uint8_t BL0910_REG_CHANNEL_OFFSET_3 = 0xAD; -static const uint8_t BL0910_REG_CHANNEL_OFFSET_4 = 0xAE; -static const uint8_t BL0910_REG_CHANNEL_OFFSET_5 = 0xAF; -static const uint8_t BL0910_REG_CHANNEL_OFFSET_6 = 0xB0; -static const uint8_t BL0910_REG_CHANNEL_OFFSET_7 = 0xB1; -static const uint8_t BL0910_REG_CHANNEL_OFFSET_8 = 0xB2; -static const uint8_t BL0910_REG_CHANNEL_OFFSET_9 = 0xB3; -static const uint8_t BL0910_REG_CHANNEL_OFFSET_10 = 0xB4; -static const uint8_t BL0910_REG_CHANNEL_OFFSET_11 = 0xB5; - -// active power gain correction register, 16bit signed number, default: 0x0000 -static const uint8_t BL0910_REG_WATT_GAIN_1 = 0xB6; -static const uint8_t BL0910_REG_WATT_GAIN_2 = 0xB7; -static const uint8_t BL0910_REG_WATT_GAIN_3 = 0xB8; -static const uint8_t BL0910_REG_WATT_GAIN_4 = 0xB9; -static const uint8_t BL0910_REG_WATT_GAIN_5 = 0xBA; -static const uint8_t BL0910_REG_WATT_GAIN_6 = 0xBB; -static const uint8_t BL0910_REG_WATT_GAIN_7 = 0xBC; -static const uint8_t BL0910_REG_WATT_GAIN_8 = 0xBD; -static const uint8_t BL0910_REG_WATT_GAIN_9 = 0xBE; -static const uint8_t BL0910_REG_WATT_GAIN_10 = 0xBF; - -// active power offset correction register, 16bit signed number, default: 0x0000 -static const uint8_t BL0910_REG_WATT_OFFSET_1 = 0xC0; -static const uint8_t BL0910_REG_WATT_OFFSET_2 = 0xC1; -static const uint8_t BL0910_REG_WATT_OFFSET_3 = 0xC2; -static const uint8_t BL0910_REG_WATT_OFFSET_4 = 0xC3; -static const uint8_t BL0910_REG_WATT_OFFSET_5 = 0xC4; -static const uint8_t BL0910_REG_WATT_OFFSET_6 = 0xC5; -static const uint8_t BL0910_REG_WATT_OFFSET_7 = 0xC6; -static const uint8_t BL0910_REG_WATT_OFFSET_8 = 0xC7; -static const uint8_t BL0910_REG_WATT_OFFSET_9 = 0xC8; -static const uint8_t BL0910_REG_WATT_OFFSET_10 = 0xC9; - -static const uint8_t BL0910_REG_VAR_GAIN = 0xCA; -static const uint8_t BL0910_REG_VAR_OFFSET = 0xCB; - -static const uint8_t BL0910_REG_VA_GAIN = 0xCC; -static const uint8_t BL0910_REG_VA_OFFSET = 0xCD; - -static const uint8_t BL0910_REG_CFDIV = 0xCE; - -static const uint8_t BL0910_REG_OTP_CHECKSUM1 = 0xD0; - -int8_t BL0910::checksum_calc(uint8_t *data) { +static uint8_t checksum_calc(uint8_t *data) { uint8_t checksum = 0; for (int i = 0; i < 5; i++) { checksum += data[i]; diff --git a/esphome/components/bl0910/bl0910.h b/esphome/components/bl0910/bl0910.h index 44490dea26..638fd8d440 100644 --- a/esphome/components/bl0910/bl0910.h +++ b/esphome/components/bl0910/bl0910.h @@ -16,27 +16,27 @@ class BL0910 : public PollingComponent, public spi::SPIDevice { public: - void set_voltage_sensor(sensor::Sensor *voltage_sensor_, int index, float voltage_reference_) { - voltage_sensor[index - 1] = voltage_sensor_; - voltage_reference[index - 1] = voltage_reference_; + void set_voltage_sensor(sensor::Sensor *voltage_sensor, int index, float voltage_reference) { + this->voltage_sensor[index - 1] = voltage_sensor; + this->voltage_reference[index - 1] = voltage_reference; } - void set_current_sensor(sensor::Sensor *current_sensor_, int index, float current_reference_) { - current_sensor[index - 1] = current_sensor_; - current_reference[index - 1] = current_reference_; + void set_current_sensor(sensor::Sensor *current_sensor, int index, float current_reference) { + this->current_sensor[index - 1] = current_sensor; + this->current_reference[index - 1] = current_reference; } - void set_power_sensor(sensor::Sensor *power_sensor_, int index, float power_reference_) { - power_sensor[index - 1] = power_sensor_; - power_reference[index - 1] = power_reference_; + void set_power_sensor(sensor::Sensor *power_sensor, int index, float power_reference) { + this->power_sensor[index - 1] = power_sensor; + this->power_reference[index - 1] = power_reference; } - void set_energy_sensor(sensor::Sensor *energy_sensor_, int index, float energy_reference_) { - energy_sensor[index - 1] = energy_sensor_; - energy_reference[index - 1] = energy_reference_; + void set_energy_sensor(sensor::Sensor *energy_sensor, int index, float energy_reference) { + this->energy_sensor[index - 1] = energy_sensor; + this->energy_reference[index - 1] = energy_reference; } - void set_power_factor_sensor(sensor::Sensor *power_factor_sensor_, int index) { - power_factor_sensor[index - 1] = power_factor_sensor_; + void set_power_factor_sensor(sensor::Sensor *power_factor_sensor, int index) { + this->power_factor_sensor[index - 1] = power_factor_sensor; } - void set_frequency_sensor(sensor::Sensor *frequency_sensor_) { frequency_sensor = frequency_sensor_; } - void set_temperature_sensor(sensor::Sensor *temperature_sensor_) { temperature_sensor = temperature_sensor_; } + void set_frequency_sensor(sensor::Sensor *frequency_sensor) { this->frequency_sensor = frequency_sensor; } + void set_temperature_sensor(sensor::Sensor *temperature_sensor) { this->temperature_sensor = temperature_sensor; } void loop() override; @@ -60,8 +60,7 @@ class BL0910 : public PollingComponent, float power_reference[NUM_CHANNELS] = {}; float energy_reference[NUM_CHANNELS] = {}; - private: - int8_t checksum_calc(uint8_t *data); + protected: void write_register(uint8_t addr, uint32_t data) { return this->write_register(addr, (data >> 16) & 0xFF, (data >> 8) & 0xFF, data & 0xFF); } diff --git a/esphome/components/bl0910/constant.h b/esphome/components/bl0910/constant.h new file mode 100644 index 0000000000..aba482f6e2 --- /dev/null +++ b/esphome/components/bl0910/constant.h @@ -0,0 +1,287 @@ +// Credit to JustNoot for the following constants +// https://github.com/JustNoot/10CH-Energy-Meter/blob/main/bl0910_esp32_test.ino + +// https://www.compel.ru/item-pdf/5ba3245acc89f7213ea0cc7e9a0b8c0e/pn/cn-bell~bl0910.pdf +static const uint8_t BL0910_READ_COMMAND = 0x82; +static const uint8_t BL0910_WRITE_COMMAND = 0x81; + +// current and voltage waveform data, 24bit signed number, default: 0x000000 +static const uint8_t BL0910_REG_WAVE_1 = 0x01; +static const uint8_t BL0910_REG_WAVE_2 = 0x02; +static const uint8_t BL0910_REG_WAVE_3 = 0x03; +static const uint8_t BL0910_REG_WAVE_4 = 0x04; +static const uint8_t BL0910_REG_WAVE_5 = 0x05; +static const uint8_t BL0910_REG_WAVE_6 = 0x06; +static const uint8_t BL0910_REG_WAVE_7 = 0x07; +static const uint8_t BL0910_REG_WAVE_8 = 0x08; +static const uint8_t BL0910_REG_WAVE_9 = 0x09; +static const uint8_t BL0910_REG_WAVE_10 = 0x0A; +static const uint8_t BL0910_REG_WAVE_11 = 0x0B; + +// effective value calculation register, 24 bit unsigned number, default: 0x000000 +static const uint8_t BL0910_REG_RMS_1 = 0x0C; +static const uint8_t BL0910_REG_RMS_2 = 0x0D; +static const uint8_t BL0910_REG_RMS_3 = 0x0E; +static const uint8_t BL0910_REG_RMS_4 = 0x0F; +static const uint8_t BL0910_REG_RMS_5 = 0x10; +static const uint8_t BL0910_REG_RMS_6 = 0x11; +static const uint8_t BL0910_REG_RMS_7 = 0x12; +static const uint8_t BL0910_REG_RMS_8 = 0x13; +static const uint8_t BL0910_REG_RMS_9 = 0x14; +static const uint8_t BL0910_REG_RMS_10 = 0x15; +static const uint8_t BL0910_REG_RMS_11 = 0x16; +static const uint8_t BL0910_REG_RMS[] = {BL0910_REG_RMS_1, BL0910_REG_RMS_2, BL0910_REG_RMS_3, BL0910_REG_RMS_4, + BL0910_REG_RMS_5, BL0910_REG_RMS_6, BL0910_REG_RMS_7, BL0910_REG_RMS_8, + BL0910_REG_RMS_9, BL0910_REG_RMS_10, BL0910_REG_RMS_11}; + +// fast effective value register, 24 bit unsigned number, default: 0x000000 +static const uint8_t BL0910_REG_FAST_RMS_1 = 0x17; +static const uint8_t BL0910_REG_FAST_RMS_2 = 0x18; +static const uint8_t BL0910_REG_FAST_RMS_3 = 0x19; +static const uint8_t BL0910_REG_FAST_RMS_4 = 0x1A; +static const uint8_t BL0910_REG_FAST_RMS_5 = 0x1B; +static const uint8_t BL0910_REG_FAST_RMS_6 = 0x1C; +static const uint8_t BL0910_REG_FAST_RMS_7 = 0x1D; +static const uint8_t BL0910_REG_FAST_RMS_8 = 0x1E; +static const uint8_t BL0910_REG_FAST_RMS_9 = 0x1F; +static const uint8_t BL0910_REG_FAST_RMS_10 = 0x20; +static const uint8_t BL0910_REG_FAST_RMS_11 = 0x21; + +// active power, 24 bit signed number, default 0x000000 +static const uint8_t BL0910_REG_WATT_1 = 0x22; +static const uint8_t BL0910_REG_WATT_2 = 0x23; +static const uint8_t BL0910_REG_WATT_3 = 0x24; +static const uint8_t BL0910_REG_WATT_4 = 0x25; +static const uint8_t BL0910_REG_WATT_5 = 0x26; +static const uint8_t BL0910_REG_WATT_6 = 0x27; +static const uint8_t BL0910_REG_WATT_7 = 0x28; +static const uint8_t BL0910_REG_WATT_8 = 0x29; +static const uint8_t BL0910_REG_WATT_9 = 0x2A; +static const uint8_t BL0910_REG_WATT_10 = 0x2B; +static const uint8_t BL0910_REG_WATT[] = {BL0910_REG_WATT_1, BL0910_REG_WATT_2, BL0910_REG_WATT_3, BL0910_REG_WATT_4, + BL0910_REG_WATT_5, BL0910_REG_WATT_6, BL0910_REG_WATT_7, BL0910_REG_WATT_8, + BL0910_REG_WATT_9, BL0910_REG_WATT_10}; +static const uint8_t BL0910_REG_WATT_TOTAL = 0x2C; + +static const uint8_t BL0910_REG_FVAR = 0x2D; +static const uint8_t BL0910_REG_VA = 0x2E; + +// active energy pulse count register, 24 bit unsigned number, default: 0x000000 +static const uint8_t BL0910_REG_CF_CNT_1 = 0x2F; +static const uint8_t BL0910_REG_CF_CNT_2 = 0x30; +static const uint8_t BL0910_REG_CF_CNT_3 = 0x31; +static const uint8_t BL0910_REG_CF_CNT_4 = 0x32; +static const uint8_t BL0910_REG_CF_CNT_5 = 0x33; +static const uint8_t BL0910_REG_CF_CNT_6 = 0x34; +static const uint8_t BL0910_REG_CF_CNT_7 = 0x35; +static const uint8_t BL0910_REG_CF_CNT_8 = 0x36; +static const uint8_t BL0910_REG_CF_CNT_9 = 0x37; +static const uint8_t BL0910_REG_CF_CNT_10 = 0x38; +static const uint8_t BL0910_REG_CF_CNT[] = { + BL0910_REG_CF_CNT_1, BL0910_REG_CF_CNT_2, BL0910_REG_CF_CNT_3, BL0910_REG_CF_CNT_4, BL0910_REG_CF_CNT_5, + BL0910_REG_CF_CNT_6, BL0910_REG_CF_CNT_7, BL0910_REG_CF_CNT_8, BL0910_REG_CF_CNT_9, BL0910_REG_CF_CNT_10}; +static const uint8_t BL0910_REG_CF_CNT_TOTAL = 0x39; +static const uint8_t BL0910_REG_CFQ_CNT_TOTAL = 0x3A; +static const uint8_t BL0910_REG_CFS_CNT_TOTAL = 0x3B; + +// phase angle measurement register, 16 bit unsigned number, default: 0x0000 +static const uint8_t BL0910_REG_ANGLE_1 = 0x3C; +static const uint8_t BL0910_REG_ANGLE_2 = 0x3D; +static const uint8_t BL0910_REG_ANGLE_3 = 0x3E; +static const uint8_t BL0910_REG_ANGLE_4 = 0x3F; +static const uint8_t BL0910_REG_ANGLE_5 = 0x40; +static const uint8_t BL0910_REG_ANGLE_6 = 0x41; +static const uint8_t BL0910_REG_ANGLE_7 = 0x42; +static const uint8_t BL0910_REG_ANGLE_8 = 0x43; +static const uint8_t BL0910_REG_ANGLE_9 = 0x44; +static const uint8_t BL0910_REG_ANGLE_10 = 0x45; +static const uint8_t BL0910_REG_ANGLE[] = { + BL0910_REG_ANGLE_1, BL0910_REG_ANGLE_2, BL0910_REG_ANGLE_3, BL0910_REG_ANGLE_4, BL0910_REG_ANGLE_5, + BL0910_REG_ANGLE_6, BL0910_REG_ANGLE_7, BL0910_REG_ANGLE_8, BL0910_REG_ANGLE_9, BL0910_REG_ANGLE_10}; + +static const uint8_t BL0910_REG_FAST_RMS_H_1 = 0x46; +static const uint8_t BL0910_REG_FAST_RMS_H_2 = 0x47; +static const uint8_t BL0910_REG_FAST_RMS_H_3 = 0x48; +static const uint8_t BL0910_REG_FAST_RMS_H_4 = 0x49; +static const uint8_t BL0910_REG_FAST_RMS_H_5 = 0x57; +static const uint8_t BL0910_REG_FAST_RMS_H_6 = 0x58; +static const uint8_t BL0910_REG_FAST_RMS_H_7 = 0x59; +static const uint8_t BL0910_REG_FAST_RMS_H_8 = 0x5A; +static const uint8_t BL0910_REG_FAST_RMS_H_9 = 0x5B; +static const uint8_t BL0910_REG_FAST_RMS_H_10 = 0x5C; + +static const uint8_t BL0910_REG_PF = 0x4A; + +static const uint8_t BL0910_REG_LINE_WATTHR = 0x4B; +static const uint8_t BL0910_REG_LINE_VARH = 0x4C; +static const uint8_t BL0910_REG_SIGN = 0x4D; +static const uint8_t BL0910_REG_PERIOD = 0x4E; + +static const uint8_t BL0910_REG_STATUS1 = 0x54; +static const uint8_t BL0910_REG_STATUS3 = 0x56; + +// temperature measurement register, 24 bit unsigned numver, default: 0x000000 +static const uint8_t BL0910_REG_TPS1 = 0x5E; // internal temperature, (TPS1-64)*12.5/59-40 ˚C +static const uint8_t BL0910_REG_TPS2 = 0x5F; // VT pin ADC value + +// PGA gain adjustment register, 24 bit (4 bits per channel), default: 0x000000 +// 4 PGA settings: 0000 = 1; 0001 = 2; 0010 = 8; 0011 = 16 +// [3:0] voltage channel, current channel 6 +// [7:4] current channel 1, current channel 7 +// [11:8] current channel 2, current channel 8 +// [15:12] current channel 3, current channel 9 +// [19:16] current channel 4, current channel 10 +// [23:20] current channel 5 +static const uint8_t BL0910_REG_GAIN1 = 0x60; +static const uint8_t BL0910_REG_GAIN2 = 0x61; + +// channel phase compensation register, 16 bit (8 bit per channel), default: 0x0000 +static const uint8_t BL0910_REG_PHASE_1_2 = 0x64; +static const uint8_t BL0910_REG_PHASE_3_4 = 0x65; +static const uint8_t BL0910_REG_PHASE_5_6 = 0x66; +static const uint8_t BL0910_REG_PHASE_7_8 = 0x67; +static const uint8_t BL0910_REG_PHASE_9_10 = 0x68; +static const uint8_t BL0910_REG_PHASE_11 = 0x69; // 8 bit, default: 0x00 + +// phase compensation register, 5 bit number, default: 0000H +static const uint8_t BL0910_REG_VAR_PHCAL_I = 0x6A; +static const uint8_t BL0910_REG_VAR_PHCAL_V = 0x6B; + +static const uint8_t BL0910_REG_RMS_GAIN_1 = 0x6C; +static const uint8_t BL0910_REG_RMS_GAIN_2 = 0x6D; +static const uint8_t BL0910_REG_RMS_GAIN_3 = 0x6E; +static const uint8_t BL0910_REG_RMS_GAIN_4 = 0x6F; +static const uint8_t BL0910_REG_RMS_GAIN_5 = 0x70; +static const uint8_t BL0910_REG_RMS_GAIN_6 = 0x71; +static const uint8_t BL0910_REG_RMS_GAIN_7 = 0x72; +static const uint8_t BL0910_REG_RMS_GAIN_8 = 0x73; +static const uint8_t BL0910_REG_RMS_GAIN_9 = 0x74; +static const uint8_t BL0910_REG_RMS_GAIN_10 = 0x75; +static const uint8_t BL0910_REG_RMS_GAIN_11 = 0x76; + +static const uint8_t BL0910_REG_RMS_OFFSET_1 = 0x77; +static const uint8_t BL0910_REG_RMS_OFFSET_2 = 0x78; +static const uint8_t BL0910_REG_RMS_OFFSET_3 = 0x79; +static const uint8_t BL0910_REG_RMS_OFFSET_4 = 0x7A; +static const uint8_t BL0910_REG_RMS_OFFSET_5 = 0x7B; +static const uint8_t BL0910_REG_RMS_OFFSET_6 = 0x7C; +static const uint8_t BL0910_REG_RMS_OFFSET_7 = 0x7D; +static const uint8_t BL0910_REG_RMS_OFFSET_8 = 0x7E; +static const uint8_t BL0910_REG_RMS_OFFSET_9 = 0x7F; +static const uint8_t BL0910_REG_RMS_OFFSET_10 = 0x80; +static const uint8_t BL0910_REG_RMS_OFFSET_11 = 0x81; + +// active power small signal compensation register, 12 bit two's complement (register is 24 bit), default: 0x000 +static const uint8_t BL0910_REG_WA_LOW_OFFSET_1_2 = 0x82; +static const uint8_t BL0910_REG_WA_LOW_OFFSET_3_4 = 0x83; +static const uint8_t BL0910_REG_WA_LOW_OFFSET_5_6 = 0x84; +static const uint8_t BL0910_REG_WA_LOW_OFFSET_7_8 = 0x85; +static const uint8_t BL0910_REG_WA_LOW_OFFSET_9_10 = 0x86; + +static const uint8_t BL0910_REG_FVAR_LOW_OFFSET = 0x87; + +// [11:0] active power anti-creep threshold register, 12 bit unsigned number, default: 0x04C +// [23:12] reactive power anti-creep threshold register, 12 bit unsigned number, default: 0x04C +// 24 bit unsigned number, default: 0x04C04C +static const uint8_t BL0910_REG_VAR_CREEP_WA_CREEP = 0x88; + +// total power anti-creep threshold register, 12 bit unsigned number, default: 0x000 +static const uint8_t BL0910_REG_WA_CREEP2 = 0x89; + +// effective value anti-creep threshold register, 12 bit unsigned number, default: 0x200 +static const uint8_t BL0910_REG_RMS_CREEP = 0x8A; + +static const uint8_t BL0910_REG_FAST_RMS_CTRL = 0x8B; + +// peak threshold register, 24 bit number, deafult: 0xFFFFFF +// [11:0] voltage peak threshold, default: 0xFFF +// [23:12] current peak threshold, default: 0xFFF +static const uint8_t BL0910_REG_I_PKLVL_V_PKLVL = 0x8C; + +static const uint8_t BL0910_REG_SAGCYC_ZXTOUT = 0x8E; +static const uint8_t BL0910_REG_SAGLVL_LINECYC = 0x8F; + +static const uint8_t BL0910_REG_FLAG_CTRL = 0x90; +static const uint8_t BL0910_REG_FLAG_CTRL1 = 0x91; +static const uint8_t BL0910_REG_FLAG_CTRL2 = 0x92; + +// ADC shutdown register, 11 bit number, default: 0x000 +static const uint8_t BL0910_REG_ADC_PD = 0x93; + +// temperature control register, 16 bit number, default: 0x07FF +static const uint8_t BL0910_REG_TPS_CTRL = 0x94; + +// external temperature coefficient register, 16 bit number, default: 0x0000 +static const uint8_t BL0910_REG_TPS2_A_B = 0x95; + +static const uint8_t BL0910_REG_MODE1 = 0x96; +static const uint8_t BL0910_REG_MODE2 = 0x97; +static const uint8_t BL0910_REG_MODE = 0x98; + +static const uint8_t BL0910_REG_MASK1 = 0x9A; + +static const uint8_t BL0910_REG_RST_ENG = 0x9D; + +static const uint8_t BL0910_REG_USR_WRPROT = 0x9E; + +static const uint8_t BL0910_REG_SOFT_RESET = 0x9F; + +// channel gain calibration register, 16 bit two's complement, default: 0x0000 +static const uint8_t BL0910_REG_CHANNEL_GAIN_1 = 0xA0; +static const uint8_t BL0910_REG_CHANNEL_GAIN_2 = 0xA1; +static const uint8_t BL0910_REG_CHANNEL_GAIN_3 = 0xA2; +static const uint8_t BL0910_REG_CHANNEL_GAIN_4 = 0xA3; +static const uint8_t BL0910_REG_CHANNEL_GAIN_5 = 0xA4; +static const uint8_t BL0910_REG_CHANNEL_GAIN_6 = 0xA5; +static const uint8_t BL0910_REG_CHANNEL_GAIN_7 = 0xA6; +static const uint8_t BL0910_REG_CHANNEL_GAIN_8 = 0xA7; +static const uint8_t BL0910_REG_CHANNEL_GAIN_9 = 0xA8; +static const uint8_t BL0910_REG_CHANNEL_GAIN_10 = 0xA9; +static const uint8_t BL0910_REG_CHANNEL_GAIN_11 = 0xAA; + +// channel offset calibration register, 16 bit two's complement, default: 0x0000 +static const uint8_t BL0910_REG_CHANNEL_OFFSET_1 = 0xAB; +static const uint8_t BL0910_REG_CHANNEL_OFFSET_2 = 0xAC; +static const uint8_t BL0910_REG_CHANNEL_OFFSET_3 = 0xAD; +static const uint8_t BL0910_REG_CHANNEL_OFFSET_4 = 0xAE; +static const uint8_t BL0910_REG_CHANNEL_OFFSET_5 = 0xAF; +static const uint8_t BL0910_REG_CHANNEL_OFFSET_6 = 0xB0; +static const uint8_t BL0910_REG_CHANNEL_OFFSET_7 = 0xB1; +static const uint8_t BL0910_REG_CHANNEL_OFFSET_8 = 0xB2; +static const uint8_t BL0910_REG_CHANNEL_OFFSET_9 = 0xB3; +static const uint8_t BL0910_REG_CHANNEL_OFFSET_10 = 0xB4; +static const uint8_t BL0910_REG_CHANNEL_OFFSET_11 = 0xB5; + +// active power gain correction register, 16bit signed number, default: 0x0000 +static const uint8_t BL0910_REG_WATT_GAIN_1 = 0xB6; +static const uint8_t BL0910_REG_WATT_GAIN_2 = 0xB7; +static const uint8_t BL0910_REG_WATT_GAIN_3 = 0xB8; +static const uint8_t BL0910_REG_WATT_GAIN_4 = 0xB9; +static const uint8_t BL0910_REG_WATT_GAIN_5 = 0xBA; +static const uint8_t BL0910_REG_WATT_GAIN_6 = 0xBB; +static const uint8_t BL0910_REG_WATT_GAIN_7 = 0xBC; +static const uint8_t BL0910_REG_WATT_GAIN_8 = 0xBD; +static const uint8_t BL0910_REG_WATT_GAIN_9 = 0xBE; +static const uint8_t BL0910_REG_WATT_GAIN_10 = 0xBF; + +// active power offset correction register, 16bit signed number, default: 0x0000 +static const uint8_t BL0910_REG_WATT_OFFSET_1 = 0xC0; +static const uint8_t BL0910_REG_WATT_OFFSET_2 = 0xC1; +static const uint8_t BL0910_REG_WATT_OFFSET_3 = 0xC2; +static const uint8_t BL0910_REG_WATT_OFFSET_4 = 0xC3; +static const uint8_t BL0910_REG_WATT_OFFSET_5 = 0xC4; +static const uint8_t BL0910_REG_WATT_OFFSET_6 = 0xC5; +static const uint8_t BL0910_REG_WATT_OFFSET_7 = 0xC6; +static const uint8_t BL0910_REG_WATT_OFFSET_8 = 0xC7; +static const uint8_t BL0910_REG_WATT_OFFSET_9 = 0xC8; +static const uint8_t BL0910_REG_WATT_OFFSET_10 = 0xC9; + +static const uint8_t BL0910_REG_VAR_GAIN = 0xCA; +static const uint8_t BL0910_REG_VAR_OFFSET = 0xCB; + +static const uint8_t BL0910_REG_VA_GAIN = 0xCC; +static const uint8_t BL0910_REG_VA_OFFSET = 0xCD; + +static const uint8_t BL0910_REG_CFDIV = 0xCE; + +static const uint8_t BL0910_REG_OTP_CHECKSUM1 = 0xD0;