首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Arduino上使用SPI与on 7124-8正确通信?

如何在Arduino上使用SPI与on 7124-8正确通信?
EN

Stack Overflow用户
提问于 2022-07-11 15:10:02
回答 1查看 200关注 0票数 0

我想通过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。

在这里,我的简单代码:

代码语言:javascript
复制
#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);
}

我希望有人能帮我。问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-12 01:36:37

首先,这可能与您的问题无关,但您使用的是自2014年以来一直不推荐的旧SPI方法setClockDivider()setDataMode()setBitOrder()。建议使用事务性SPI,我对此有一些解释,here

其次,根据数据表第85页,访问ID寄存器,发送一个字节到特定的寄存器,您需要与之通信。您的代码发送两个字节,0x000x05,这是不正确的。

此外,根据数据表的第78页,为了读取寄存器,需要将读操作的位6设置为1,对于写操作,位6设置为0。

尝试以下代码:

代码语言:javascript
复制
#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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72940737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档