Restart measurement if cycle fails

This commit is contained in:
2024-12-29 17:40:55 +01:00
parent 489e33ceb6
commit 8d9accf4ae

View File

@@ -49,7 +49,7 @@ int main(void) {
usart2->println("I2C1 intialized successful");
}
// init NAU7802
{
std::vector<uint8_t> data = {0x01};
// reset NAU7802
checkHalStatus(i2c1->write(0x2A, 0x00, data));
@@ -83,7 +83,6 @@ int main(void) {
data[0] = 0x30;
checkHalStatus(i2c1->write(0x2A, 0x15, data));
HAL_Delay(100);
}
uint32_t measurement = 0;
auto val = i2c1->read(0x2A, 0x12);
@@ -96,6 +95,18 @@ int main(void) {
measurement |= val.second;
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;
val = i2c1->read(0x2A, 0x12);
measurement |= (val.second << 16);
@@ -107,8 +118,7 @@ int main(void) {
measurement |= val.second;
usart2->println("Measurement " + std::to_string(measurement) + " counts");
HAL_Delay(1000);
HAL_Delay(100);
}
}