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,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);
} }
} }