尊敬的 TI 社区:
我在反复读取 ADS1256中的寄存器值时遇到一些问题。 在我将寄存器设置为特定值后、当我尝试读取寄存器1000次时、大约1%的时间、我得到的值与应该的值不同。 下面是我使用的代码。
另一个问题:为什么我需要在写入和读取寄存器之间添加延迟、以及所需的持续时间是多少? 我唯一能找到的是在发送命令后读取寄存器值所需的 T6。
设备:带 Arduino 框架的 Teensey4.1
const uint8_t regVal = 0x63; // 0110 0011 - AIN6+AIN3-
const uint8_t regAdd = 0x03; // 0x03 -> data rate
// ----------write to register------------
while (digitalRead(DRDY_pin)) {}
// either check for dataready is low or add some delay.
digitalWrite(CS_pin, LOW);
SPI.beginTransaction(SPISettings(1800000, MSBFIRST, SPI_MODE1));
SPI.transfer(WREG | regAdd);
SPI.transfer(0x00);
SPI.transfer(regVal);
SPI.endTransaction();
digitalWrite(CS_pin, HIGH);
// ----------read from register------------
while (digitalRead(DRDY_pin)) {}
for (int i = 0; i < 1000; i++) {
digitalWrite(10, LOW);
SPI.beginTransaction(SPISettings(1800000, MSBFIRST, SPI_MODE1));
// delayMicroseconds(7);
SPI.transfer(RREG | regAdd);
// send 1st command byte, address of the register
SPI.transfer(0x00); // send 2nd command byte, read only one register
delayMicroseconds(7);
regValReceived = SPI.transfer(0xFF); // read data of the register
SPI.endTransaction();
digitalWrite(CS_pin, HIGH);
Serial.print("set value of register ");
Serial.print(regVal, HEX);
Serial.print(" ");
Serial.print(regValReceived, HEX);
Serial.print(" actual value of register ");
Serial.print("\n");
if (regVal != regValReceived) {
Serial.println("wrong value");
}
}
此致、
Ashesh