我想通过SPI读取to 7124-8和arduino的数据。我找到了几个库,但是我没有从ADC模块中得到任何东西。通过使用示波器,我确保我的Arduino通过MOSI、SCK和CS发送数据。只是米索·达洛琳没有给我任何东西。
我首先使用了这个库(https://github.com/NHBSystems/NHB_AD7124),但决定使用一个简单得多的代码来确保一切正常运行。我试图与通信寄存器对话,以便从ID寄存器中获取设备的ID。您可以在数据表:https://www.analog.com/en/products/ad7124-8.html的第39页上找到寄存器。
我发送0x00和0x05来取回0x14,这应该是正确的ID。我在一个论坛中找到了一个解决方案,但我不知道为什么它与数据表:https://ez.analog.com/data_converters/precision_adcs/f/q-a/24046/ad7124-8-for-arduino-due不同,当我使用它时,代码在Line: value =SPI.transfer(0x00)处停止运行;它们在开始时也发送0x40。
在这里,我的简单代码:
#include <SPI.h>
// Physical Pins
const int csPin = 10;
int value[7] {0};
void setup() {
Serial.begin (9600);
pinMode(10,OUTPUT);
SPI.begin(10);
SPI.setClockDivider(10, 128);
SPI.setDataMode(SPI_MODE3);
}
void loop() {
digitalWrite(csPin, LOW);
//SPI.transfer(csPin, 0x00);
SPI.transfer(csPin,0x00,SPI_CONTINUE); //Tell Communication Register you are going to read ID register
SPI.transfer(csPin,0x05);
//SPI.transfer(csPin,0x00); //Get data from Communication Register
delay(1);
digitalWrite(csPin, HIGH);
delay(1);
Serial.print(value[0],HEX);
}我希望有人能帮我。问候
发布于 2022-07-12 01:36:37
首先,这可能与您的问题无关,但您使用的是自2014年以来一直不推荐的旧SPI方法setClockDivider()、setDataMode()和setBitOrder()。建议使用事务性SPI,我对此有一些解释,here。
其次,根据数据表第85页,访问ID寄存器,发送一个字节到特定的寄存器,您需要与之通信。您的代码发送两个字节,0x00和0x05,这是不正确的。
此外,根据数据表的第78页,为了读取寄存器,需要将读操作的位6设置为1,对于写操作,位6设置为0。
尝试以下代码:
#include <SPI.h>
#define READ_REGISTER 0B01000000 // bit 6 set to 1 for read operation
#define ID_REGISTER 0x05
const int csPin = 10;
void setup() {
Serial.begin (9600);
digitalWrite(csPin, HIGH); // set csPin to HIGH to prevent false trigger
pinMode(csPin,OUTPUT);
SPI.begin();
}
void loop() {
SPI.beginTransaction(SPISettings(84000000/128, MSBFIRST, SPI_MODE3));
digitalWrite(csPin, LOW);
SPI.transfer(READ_REGISTER | ID_REGISTER); // read register 5
uint8_t id = SPI.transfer(0x00); // get the id
digitalWrite(csPin, HIGH);
SPI.endTransaction();
Serial.print(id,HEX);
}https://stackoverflow.com/questions/72940737
复制相似问题