Restart measurement if cycle fails
This commit is contained in:
@@ -49,41 +49,40 @@ int main(void) {
|
|||||||
usart2->println("I2C1 intialized successful");
|
usart2->println("I2C1 intialized successful");
|
||||||
}
|
}
|
||||||
// init NAU7802
|
// init NAU7802
|
||||||
{
|
|
||||||
std::vector<uint8_t> data = {0x01};
|
|
||||||
// reset NAU7802
|
|
||||||
checkHalStatus(i2c1->write(0x2A, 0x00, data));
|
|
||||||
usart2->println("Reset nau");
|
|
||||||
HAL_Delay(100);
|
|
||||||
|
|
||||||
// power up digital logic
|
std::vector<uint8_t> data = {0x01};
|
||||||
data[0] = 0x02;
|
// reset NAU7802
|
||||||
i2c1->write(0x2A, 0x00, data);
|
checkHalStatus(i2c1->write(0x2A, 0x00, data));
|
||||||
HAL_Delay(100);
|
usart2->println("Reset nau");
|
||||||
usart2->println("PUP digi");
|
HAL_Delay(100);
|
||||||
|
|
||||||
// power up analog logic
|
// power up digital logic
|
||||||
data[0] = 0x06;
|
data[0] = 0x02;
|
||||||
i2c1->write(0x2A, 0x00, data);
|
i2c1->write(0x2A, 0x00, data);
|
||||||
HAL_Delay(100);
|
HAL_Delay(100);
|
||||||
|
usart2->println("PUP digi");
|
||||||
|
|
||||||
usart2->println("PUP analog");
|
// power up analog logic
|
||||||
|
data[0] = 0x06;
|
||||||
|
i2c1->write(0x2A, 0x00, data);
|
||||||
|
HAL_Delay(100);
|
||||||
|
|
||||||
// use internal LDO as reference
|
usart2->println("PUP analog");
|
||||||
data[0] = 0x86;
|
|
||||||
checkHalStatus(i2c1->write(0x2A, 0x00, data));
|
|
||||||
HAL_Delay(100);
|
|
||||||
|
|
||||||
// print status back to usart
|
// use internal LDO as reference
|
||||||
auto ret = i2c1->read(0x2A, 0x00);
|
data[0] = 0x86;
|
||||||
checkHalStatus(ret.first);
|
checkHalStatus(i2c1->write(0x2A, 0x00, data));
|
||||||
usart2->println("NAU7802 reports state " + std::to_string(ret.second) + " at 0x00");
|
HAL_Delay(100);
|
||||||
|
|
||||||
// REG_CHPS CLK_CHP off
|
// print status back to usart
|
||||||
data[0] = 0x30;
|
auto ret = i2c1->read(0x2A, 0x00);
|
||||||
checkHalStatus(i2c1->write(0x2A, 0x15, data));
|
checkHalStatus(ret.first);
|
||||||
HAL_Delay(100);
|
usart2->println("NAU7802 reports state " + std::to_string(ret.second) + " at 0x00");
|
||||||
}
|
|
||||||
|
// REG_CHPS CLK_CHP off
|
||||||
|
data[0] = 0x30;
|
||||||
|
checkHalStatus(i2c1->write(0x2A, 0x15, data));
|
||||||
|
HAL_Delay(100);
|
||||||
|
|
||||||
uint32_t measurement = 0;
|
uint32_t measurement = 0;
|
||||||
auto val = i2c1->read(0x2A, 0x12);
|
auto val = i2c1->read(0x2A, 0x12);
|
||||||
@@ -96,6 +95,18 @@ int main(void) {
|
|||||||
measurement |= val.second;
|
measurement |= val.second;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
val = i2c1->read(0x2A, 0x00);
|
||||||
|
if ((val.second & 0x20) != 0x20) {
|
||||||
|
// Measurement cycle not ready, lets wait a bit...
|
||||||
|
usart2->print(".");
|
||||||
|
// restart measurement cycle
|
||||||
|
data[0] = (val.second | 0x10);
|
||||||
|
i2c1->write(0x2A, 0x00, data);
|
||||||
|
HAL_Delay(100);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
measurement = 0;
|
measurement = 0;
|
||||||
val = i2c1->read(0x2A, 0x12);
|
val = i2c1->read(0x2A, 0x12);
|
||||||
measurement |= (val.second << 16);
|
measurement |= (val.second << 16);
|
||||||
@@ -107,8 +118,7 @@ int main(void) {
|
|||||||
measurement |= val.second;
|
measurement |= val.second;
|
||||||
|
|
||||||
usart2->println("Measurement " + std::to_string(measurement) + " counts");
|
usart2->println("Measurement " + std::to_string(measurement) + " counts");
|
||||||
|
HAL_Delay(100);
|
||||||
HAL_Delay(1000);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user