This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDC1000:使用 Arduino 读取和写入寄存器

Guru**** 2614265 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/673153/tdc1000-reading-to-and-writing-from-registers-with-arduino

器件型号:TDC1000
主题中讨论的其他器件:TDC7200
您好! 

我正在使用 TDC1000、TDC7200和 Arduino MKR1000创建超声波流量计。
由于这是我第一次使用 SPI、我认为我应该从读取 TDC1000上的 CONFIG_0和从中写入开始。

Arduino 仅读取零、如下图所示。

我已经尝试过 Arduino 的所有不同 SPI 模式(0-3)。

几周后、我不能弄清楚我的错误。
非常感谢您在以下代码故障排除方面提供帮助。

谢谢。



#include 

int selectTDC1000 = 5;
int selectTDC7200 = 0;

int enableTDC1000 = 7;
int enableTDC7200 = 1;

int dataReadyPin = 4;
int channelSelect = 3;

byte config1_address = 0x00;
byte config1_instruction = 0x00;
unsigned int writeRead = 0x00;int

readytoRead 寄存器(
int device、unsigned byte) 字节数据);

void setup()
{
Serial.begin(9600);
SPI.beginTransaction(SPISettings(16000000、MSBFIRST、SPI_MODE0);

pinMode (selectTDC1000、 输出);
pinMode (selectTDC7200、输出);

pinMode (enableTDC1000、输出);
PinMode (enableTDC7200、输出);

pinMode (dataReadyPin、输入);
pinMode (通道选择、 输出);

digitalWrite (selectTDC1000、HIGH);//低电平有效
digitalWrite (selectTDC7200、HIGH);//低电平有效

digitalWrite (enableTDC1000、LOW);
digitalWrite (enableTDC7200、low);

}

void loop()
{
digitalWrite (enableTDC1000、high);
delayMicroseconds (350);

//***阅读和印刷寄存器*********
whatWasRead = readRegister (1000、config1_address、1);

Serial.print ("写入前:");
Serial.println (whatWasRead、 二);
//*********

//***向寄存器写入新字节,从寄存器*****读取字节
writeRegister (1000、config1_address、0x02);

whatWasRead = readRegister (1000、config1_address、1);

serial.print ("写后:");
serial.****println (whatWasRead、bin);
serial.print ("\n");
//*********

digitalWrite (enableTDC1000、low);

}

void writeRegister (int device、byte address、byte data)
{

if (device = 1000)
{
digitalWrite (selectTDC1000、low);//low active
}
否则(device == 7200)
{
digitalWrite (selectTDC7200、low);//low active
}

地址|= 1000000;

spi.transfer (address);
spi.transfer (data);

if (device = 1000)
{
digitalWrite (selectTDC1000、HIGH);//low active
}
否则(device == 7200)
{
digitalWrite (selectTDC7200、HIGH);//low active
}

}

unsigned int readRegister (int device、byte address、int bytesToRead)
//设备:1000或7200。
* address:指定器件上的寄存器地址。
*我们正在读取的数据有多少个字节?
*/
{

字节 inByte = 0; //从 SPI
unsigned int 结果中传入的字节= 0;//返回
Serial.print ("我们从以下地址读取的地址:");
Serial.print (地址、二进制);
Serial.print ("\n");

if (device = 1000)
{
digitalWrite (selectTDC1000、low);//low active
}
否则(device == 7200)
{
digitalWrite (selectTDC7200、low);//low active
}

字节 readFromThisRegister =地址;//读取位位于地址(MSBF)之前、因此0b000000 = 0b0000000

SPI.transfer (readFromThisRegister);
结果= SPI.transfer (0x00);

bytesToRead -;

while (bytesToRead > 0)
{

结果=结果<< 8;
InByte = SPI.transfer (0x00);
结果=结果| inByte;
字节 ToRead -;

}

if (device == 1000)
{
digitalWrite (selectTDC1000、HIGH);//low active
}
否则(device == 7200)
{
digitalWrite (selectTDC7200、HIGH);//low active
}

返回结果;
}