8static const char *
const TAG =
"nau7802";
12static const uint8_t READ_BIT = 0x01;
14static const uint8_t PU_CTRL_REG = 0x00;
15static const uint8_t PU_CTRL_REGISTER_RESET = 0x01;
16static const uint8_t PU_CTRL_POWERUP_DIGITAL = 0x02;
17static const uint8_t PU_CTRL_POWERUP_ANALOG = 0x04;
18static const uint8_t PU_CTRL_POWERUP_READY = 0x08;
19static const uint8_t PU_CTRL_CYCLE_START = 0x10;
20static const uint8_t PU_CTRL_CYCLE_READY = 0x20;
21static const uint8_t PU_CTRL_AVDD_EXTERNAL = 0x80;
23static const uint8_t CTRL1_REG = 0x01;
24static const uint8_t CTRL1_LDO_SHIFT = 3;
25static const uint8_t CTRL1_LDO_MASK = (0x7 << CTRL1_LDO_SHIFT);
26static const uint8_t CTRL1_GAIN_MASK = 0x7;
28static const uint8_t CTRL2_REG = 0x02;
29static const uint8_t CTRL2_CRS_SHIFT = 4;
30static const uint8_t CTRL2_CRS_MASK = (0x7 << CTRL2_CRS_SHIFT);
31static const uint8_t CTRL2_CALS = 0x04;
32static const uint8_t CTRL2_CAL_ERR = 0x08;
33static const uint8_t CTRL2_GAIN_CALIBRATION = 0x03;
34static const uint8_t CTRL2_CONFIG_MASK = 0xF0;
36static const uint8_t OCAL1_B2_REG = 0x03;
37static const uint8_t GCAL1_B3_REG = 0x06;
38static const uint8_t GCAL1_FRACTIONAL = 23;
41static const uint8_t ADCO_B2_REG = 0x12;
43static const uint8_t ADC_REG = 0x15;
44static const uint8_t ADC_CHPS_DISABLE = 0x30;
46static const uint8_t PGA_REG = 0x1B;
47static const uint8_t PGA_LDOMODE_ESR = 0x40;
49static const uint8_t POWER_REG = 0x1C;
50static const uint8_t POWER_PGA_CAP_EN = 0x80;
52static const uint8_t DEVICE_REV = 0x1F;
59 ESP_LOGE(TAG,
"Failed I2C read during setup()");
63 ESP_LOGI(TAG,
"Setting up NAU7802 Rev %d", rev);
66 pu_ctrl |= PU_CTRL_REGISTER_RESET;
68 pu_ctrl &= ~PU_CTRL_REGISTER_RESET;
71 pu_ctrl |= PU_CTRL_POWERUP_DIGITAL;
74 if (!(pu_ctrl.
get() & PU_CTRL_POWERUP_READY)) {
75 ESP_LOGE(TAG,
"Failed to reset sensor during setup()");
85 pu_ctrl |= PU_CTRL_POWERUP_ANALOG;
93 pu_ctrl |= PU_CTRL_CYCLE_START;
96 ctrl1 &= ~CTRL1_GAIN_MASK;
101 pu_ctrl |= PU_CTRL_AVDD_EXTERNAL;
102 ctrl1 &= ~CTRL1_LDO_MASK;
103 ctrl1 |= this->
ldo_ << CTRL1_LDO_SHIFT;
107 ctrl2 &= ~CTRL2_CRS_MASK;
108 ctrl2 |= this->
sps_ << CTRL2_CRS_SHIFT;
112 adc_reg |= ADC_CHPS_DISABLE;
116 pga_reg &= ~PGA_LDOMODE_ESR;
120 pwr_reg |= POWER_PGA_CAP_EN;
124 LOG_SENSOR(
"",
"NAU7802",
this);
125 LOG_I2C_DEVICE(
this);
128 ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL_FOR, this->
get_name().c_str());
133 " Offset Calibration: %" PRId32
"\n"
134 " Gain Calibration: %f",
137 std::string voltage =
"unknown";
138 switch (this->
ldo_) {
164 voltage =
"External";
167 ESP_LOGCONFIG(TAG,
" LDO Voltage: %s", voltage.c_str());
169 switch (this->
gain_) {
195 ESP_LOGCONFIG(TAG,
" Gain: %dx",
gain);
197 switch (this->
sps_) {
214 ESP_LOGCONFIG(TAG,
" Samples Per Second: %d", sps);
215 LOG_UPDATE_INTERVAL(
this);
220 for (
size_t i = 0; i <
size; i++) {
221 data[i] = 0xFF & (value >> (
size - 1 - i) * 8);
230 for (
size_t i = 0; i <
size; i++) {
231 result |= data[i] << (
size - 1 - i) * 8;
234 if (result & 0x800000 &&
size == 3) {
235 result |= 0xFF000000;
243 ESP_LOGW(TAG,
"Calibration already in progress");
251 ctrl2 &= CTRL2_CONFIG_MASK;
259 switch (this->state_) {
276 if (ctrl2.
get() & CTRL2_CAL_ERR) {
279 ESP_LOGE(TAG,
"Failed to calibrate sensor");
291 ESP_LOGI(TAG,
"New Offset: %" PRId32, ocal);
293 float gcal_f = ((float) gcal / (float) (1 << GCAL1_FRACTIONAL));
294 ESP_LOGI(TAG,
"New Gain: %f", gcal_f);
300 ESP_LOGW(TAG,
"No measurements ready!");
308 int32_t result = this->
read_value_(ADCO_B2_REG, 3);
310 ESP_LOGD(TAG,
"'%s': Got value %" PRId32, this->
name_.
c_str(), result);
ESPDEPRECATED("Use const char* or uint32_t overload instead. Removed in 2026.7.0", "2026.1.0") void set_timeout(const std voi set_timeout)(const char *name, uint32_t timeout, std::function< void()> &&f)
Set a timeout function with a unique name.