Restart measurement if cycle fails
This commit is contained in:
@@ -49,41 +49,40 @@ int main(void) {
|
||||
usart2->println("I2C1 intialized successful");
|
||||
}
|
||||
// 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
|
||||
data[0] = 0x02;
|
||||
i2c1->write(0x2A, 0x00, data);
|
||||
HAL_Delay(100);
|
||||
usart2->println("PUP digi");
|
||||
std::vector<uint8_t> data = {0x01};
|
||||
// reset NAU7802
|
||||
checkHalStatus(i2c1->write(0x2A, 0x00, data));
|
||||
usart2->println("Reset nau");
|
||||
HAL_Delay(100);
|
||||
|
||||
// power up analog logic
|
||||
data[0] = 0x06;
|
||||
i2c1->write(0x2A, 0x00, data);
|
||||
HAL_Delay(100);
|
||||
// power up digital logic
|
||||
data[0] = 0x02;
|
||||
i2c1->write(0x2A, 0x00, data);
|
||||
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
|
||||
data[0] = 0x86;
|
||||
checkHalStatus(i2c1->write(0x2A, 0x00, data));
|
||||
HAL_Delay(100);
|
||||
usart2->println("PUP analog");
|
||||
|
||||
// print status back to usart
|
||||
auto ret = i2c1->read(0x2A, 0x00);
|
||||
checkHalStatus(ret.first);
|
||||
usart2->println("NAU7802 reports state " + std::to_string(ret.second) + " at 0x00");
|
||||
// use internal LDO as reference
|
||||
data[0] = 0x86;
|
||||
checkHalStatus(i2c1->write(0x2A, 0x00, data));
|
||||
HAL_Delay(100);
|
||||
|
||||
// REG_CHPS CLK_CHP off
|
||||
data[0] = 0x30;
|
||||
checkHalStatus(i2c1->write(0x2A, 0x15, data));
|
||||
HAL_Delay(100);
|
||||
}
|
||||
// print status back to usart
|
||||
auto ret = i2c1->read(0x2A, 0x00);
|
||||
checkHalStatus(ret.first);
|
||||
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;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user