7static const char *
const TAG =
"nau7802";
11static const uint8_t READ_BIT = 0x01;
13static const uint8_t PU_CTRL_REG = 0x00;
14static const uint8_t PU_CTRL_REGISTER_RESET = 0x01;
15static const uint8_t PU_CTRL_POWERUP_DIGITAL = 0x02;
16static const uint8_t PU_CTRL_POWERUP_ANALOG = 0x04;
17static const uint8_t PU_CTRL_POWERUP_READY = 0x08;
18static const uint8_t PU_CTRL_CYCLE_START = 0x10;
19static const uint8_t PU_CTRL_CYCLE_READY = 0x20;
20static const uint8_t PU_CTRL_AVDD_EXTERNAL = 0x80;
22static const uint8_t CTRL1_REG = 0x01;
23static const uint8_t CTRL1_LDO_SHIFT = 3;
24static const uint8_t CTRL1_LDO_MASK = (0x7 << CTRL1_LDO_SHIFT);
25static const uint8_t CTRL1_GAIN_MASK = 0x7;
27static const uint8_t CTRL2_REG = 0x02;
28static const uint8_t CTRL2_CRS_SHIFT = 4;
29static const uint8_t CTRL2_CRS_MASK = (0x7 << CTRL2_CRS_SHIFT);
30static const uint8_t CTRL2_CALS = 0x04;
31static const uint8_t CTRL2_CAL_ERR = 0x08;
32static const uint8_t CTRL2_GAIN_CALIBRATION = 0x03;
33static const uint8_t CTRL2_CONFIG_MASK = 0xF0;
35static const uint8_t OCAL1_B2_REG = 0x03;
36static const uint8_t GCAL1_B3_REG = 0x06;
37static const uint8_t GCAL1_FRACTIONAL = 23;
40static const uint8_t ADCO_B2_REG = 0x12;
42static const uint8_t ADC_REG = 0x15;
43static const uint8_t ADC_CHPS_DISABLE = 0x30;
45static const uint8_t PGA_REG = 0x1B;
46static const uint8_t PGA_LDOMODE_ESR = 0x40;
48static const uint8_t POWER_REG = 0x1C;
49static const uint8_t POWER_PGA_CAP_EN = 0x80;
51static const uint8_t DEVICE_REV = 0x1F;
58 ESP_LOGE(TAG,
"Failed I2C read during setup()");
62 ESP_LOGI(TAG,
"Setting up NAU7802 Rev %d", rev);
65 pu_ctrl |= PU_CTRL_REGISTER_RESET;
67 pu_ctrl &= ~PU_CTRL_REGISTER_RESET;
70 pu_ctrl |= PU_CTRL_POWERUP_DIGITAL;
73 if (!(pu_ctrl.
get() & PU_CTRL_POWERUP_READY)) {
74 ESP_LOGE(TAG,
"Failed to reset sensor during setup()");
84 pu_ctrl |= PU_CTRL_POWERUP_ANALOG;
92 pu_ctrl |= PU_CTRL_CYCLE_START;
95 ctrl1 &= ~CTRL1_GAIN_MASK;
100 pu_ctrl |= PU_CTRL_AVDD_EXTERNAL;
101 ctrl1 &= ~CTRL1_LDO_MASK;
102 ctrl1 |= this->
ldo_ << CTRL1_LDO_SHIFT;
106 ctrl2 &= ~CTRL2_CRS_MASK;
107 ctrl2 |= this->
sps_ << CTRL2_CRS_SHIFT;
111 adc_reg |= ADC_CHPS_DISABLE;
115 pga_reg &= ~PGA_LDOMODE_ESR;
119 pwr_reg |= POWER_PGA_CAP_EN;
123 LOG_SENSOR(
"",
"NAU7802",
this);
124 LOG_I2C_DEVICE(
this);
127 ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL_FOR, this->
get_name().c_str());
132 " Offset Calibration: %" PRId32
"\n"
133 " Gain Calibration: %f",
136 std::string voltage =
"unknown";
137 switch (this->
ldo_) {
163 voltage =
"External";
166 ESP_LOGCONFIG(TAG,
" LDO Voltage: %s", voltage.c_str());
168 switch (this->
gain_) {
194 ESP_LOGCONFIG(TAG,
" Gain: %dx",
gain);
196 switch (this->
sps_) {
213 ESP_LOGCONFIG(TAG,
" Samples Per Second: %d", sps);
214 LOG_UPDATE_INTERVAL(
this);
219 for (
size_t i = 0; i <
size; i++) {
220 data[i] = 0xFF & (value >> (
size - 1 - i) * 8);
229 for (
size_t i = 0; i <
size; i++) {
230 result |= data[i] << (
size - 1 - i) * 8;
233 if (result & 0x800000 &&
size == 3) {
234 result |= 0xFF000000;
242 ESP_LOGW(TAG,
"Calibration already in progress");
250 ctrl2 &= CTRL2_CONFIG_MASK;
258 switch (this->state_) {
275 if (ctrl2.
get() & CTRL2_CAL_ERR) {
278 ESP_LOGE(TAG,
"Failed to calibrate sensor");
290 ESP_LOGI(TAG,
"New Offset: %" PRId32, ocal);
292 float gcal_f = ((float) gcal / (float) (1 << GCAL1_FRACTIONAL));
293 ESP_LOGI(TAG,
"New Gain: %f", gcal_f);
299 ESP_LOGW(TAG,
"No measurements ready!");
307 int32_t result = this->
read_value_(ADCO_B2_REG, 3);
309 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.