大家好
我有一种配置、其中3个 ADS131A04芯片采用菊花链配置、第一个芯片处于异步中断模式、另外两个芯片处于同步从模式、以24位字长运行。 我按照设计的数据表配置进行了操作。
我是一名新手、但我很难确定如何根据我的要求编程芯片。 我的目标是读取传入的模拟信号并将其转换为数字、使用 Arduino 在串行监视器(如果可能)中对其进行监控、并将数据保存到文件中以供进一步分析。
下面是到目前为止已有的代码。 我甚至不确定它是否准确。 我能验证的唯一状态是就绪状态、正如我在发送复位命令后在串行监视器上看到的0xFF04。
为了使 ADC 正常工作、我需要初始化所有的值是什么?
2.如果我在第一个芯片执行一次命令、保持 CS 管脚为低电平、是否会传播到下一个芯片? 如果没有、我将如何在全部3个芯片中执行命令?
3.以下代码是否有效?
4.我可以做什么来监控/验证命令是否成功执行?
5.在读取转换后的数据时、我从哪些寄存器读取数据?
6.如何输出转换后的数据?
7.如果我只想查看寄存器中的值、我应该发送什么命令?
再次,我是完全新的这一点,任何类型的反馈和建议,感谢. 提前感谢您。
#include
int cs_pin = 8;
int drdy_pin=4;
空 setup()
{
Serial.begin(115200);
引脚模式(cs_pin、output);
digitalWrite (cs_pin、HIGH);
pinMode (drdy_pin、输入);//通过 Arduino 串行监视器监视 DRDY
}
void loop()
{
延迟(1000);
SPI.begin();
SPI.beginTransaction(SPISettings(4000000,MSBFIRST,SPI_MODE1));
digitalWrite (cs_pin、low);
延迟(200);
SPI.TRANSMIT (0x00);//RESET 命令
spi.transfer (0x11);
SPI.transfer (0x00);
延迟(1000);
Read_status();
延迟(200);
digitalWrite (cs_pin、HIGH);
延迟(1000);
digitalWrite (cs_pin、low);
SPI.TRANSMIT (0x06);//UNLOCK 命令
spi.transfer (0x55);
SPI.transfer (0x00);
延迟(200);
digitalWrite (cs_pin、HIGH);
enable_adcs ();
Set_gain();
}
void read_status()
{
STATUS_hi_1 = spi.transfer (0);//读取状态字的第一个字节
STATUS_LO_1 = spi.transfer (0);//读取状态字的第二个字节
STATUS_hi_2 = spi.transfer (0);//读取状态字的第一个字节
STATUS_1=(STATUS_HI_1 <<16)|(STATUS_LO_1 <<8)|STATUS_HI_2;//因为字长是24位?
serial.println (STATUS_1、HEX);
serial.println ("");
延迟(D2);
}
void set_gain()
{
digitalWrite (cs_pin、low);
//010A AAAA DDDDdd 11h 12h 13h 14h AAaa reg 添加,nnnnn 编号#of regs.
//增益为8 011
//0101 0001 0000 0011
//0x5102 WREG - REG 从11h 开始、n# regs n=3减1、因为从0开始
SPI.TRACE (0x51);//WREG 命令、用于 ADC1 11h 的增益
SPI.transfer (0x04);
SPI.transfer (0x00);
digitalWrite (cs_pin、HIGH);
延迟(200);
digitalWrite (cs_pin、low);
SPI.TRACE (0x52);//WREG 命令、用于 ADC2 12h 增益
SPI.transfer (0x04);
SPI.transfer (0x00);
延迟(200);
digitalWrite (cs_pin、HIGH);
延迟(200);
digitalWrite (cs_pin、low);
SPI.TRACE (0x53);//WREG 命令、用于 ADC3 13h 增益
SPI.transfer (0x04);
SPI.transfer (0x00);
延迟(200);
digitalWrite (cs_pin、HIGH);
延迟(200);
digitalWrite (cs_pin、low);
SPI.TRACE (0x54);//WREG 命令、用于 ADC4 14h 增益
SPI.transfer (0x04);
SPI.transfer (0x00);
延迟(200);
digitalWrite (cs_pin、HIGH);
}
void enable_adcs ()
{
digitalWrite (cs_pin、low);
延迟(200);
//addr 0Fh 写入0F
//010A AAAA DDdd 11 12 13 14 ADC 1 2 3 4 AAAAA reg add、nnnnnnn no#of regs.
//增益为8 011
//0100 1111 0000 1111
//0x4F0F WREG - REG 从11h 开始,n# regs n=3减1,因为从0开始
用于启用所有 ADC 的 SPI.Transfer (0x4F);//WREG 命令
spi.transfer (0x0F);
SPI.transfer (0x00);
延迟(200);
digitalWrite (cs_pin、HIGH);
延迟(D3);
}