TI工程团队,您好!
我的公司正在使用ADS1120通过SPI与NODEMCU ESP12E (Lolin)通信。 我们正在使用2.048V的外部精密TI电压参考。 我附上了原理图和代码程序。 当我们读取电压时,我们获得准确的读数,但在两者之间也有准确的读数。 逻辑分析器图也附加在附件中。 请提供帮助。
以下是串行监视器捕获的代码片段和代码输出。
#include "SPI.h"
#define cs_pin 15.
#define dR_pin 0
字节reg00=0x00;
字节reg01=0x00;
字节reg02=0x00;
字节reg03=0x00;
字节dmsb;
字节dlsb;
字节emb;
字节sb;
字节缓冲区[4];
SPISettings ADS1120(4096000, MSBFIRST,409.6万 MSBFIRST, SPI_MODE1);
void setup()
{
// ADS1120设置
pinMode (cs_pin,输出);//我们将此用于CS选择引脚
PinMode (dr_pin,输入);//我们将此用于DR引脚
SPI.begin();
SPI.beginTransaction(ADS1120);//唤醒SPI总线。
SPI.setBitOrder(MSBFIRST);
// SPI.setDataMode(SPI_MODE1);//CPOL=0,CPHA=1此处不要使用值1 (SPI_MODE1=0x04)!
//初始化串行通信
Serial.begin(11.52万);
//等待直至串行流未打开(仅限Leonardo)
同时(!Serial);
serial.println ("Serial com ready");
//发送重置命令
digitalWrite (cs_pin,low);
SPI.transfer (0x06);
digitalWrite (cs_pin,high);
DelayMicroseconds (100);// Guard Time
//设置配置寄存器
digitalWrite (cs_pin,low);
SPI.transfer (0x43);//从配置寄存器00h开始写入四个字节
SPI.transfer (0x81);// Register 00h:读取U_Mon
SPI.transfer (0x04);//寄存器01h:20SPS,256KHz调制器时钟,单触发,禁用温度传感器,关闭电流源
SPI.transfer (0x50);//寄存器02h:外部参考电压,50Hz抑制,PSW关闭,IDAC关闭
SPI.transfer (0x00);//寄存器03h:IDAC1已禁用,IDAC2已禁用,专用DRDY
digitalWrite (cs_pin,high);
//读回配置寄存器作为健全性检查
digitalWrite (cs_pin,low);
SPI.transfer (0x23);//从配置寄存器00h开始读取四个字节
reg00=spI.transfer(0);
reg01=SPI.transfer(0);
reg02=SPI.transfer(0);
reg03=SPI.transfer(0);
digitalWrite (cs_pin,high);
serial.print ("Reg00:");
serial.println (reg00,hex);//显示Reg00
serial.print ("Reg01:");
serial.println (reg01,hex);//显示Reg01
serial.print ("Reg02:");
serial.println (reg02,hex);//显示Reg02
serial.print ("Reg03:");
serial.println (reg03,hex);//显示Reg03
}
void循环()
{
IF ((digitalRead (Dr_pin))== low){
digitalWrite (cs_pin,low);
//SPI.transfer (0x08);//开始转换(单触发)
DelayMicroseconds(50);
digitalWrite (cs_pin,high);
ADC_READ ();
延迟(5000);
}
//SPI.End();
}
void ADC_Read()
{
digitalWrite (cs_pin,low);
SPI.transfer (0x10);//发送RDATA命令
DelayMicroseconds (50);// Guard Time
长电压= SPI.transfer (0);
伏特=(伏特<< 8)| SPI.transfer (0);
浮子AIN0 =(伏特* 2.048)/3.2767万;
serial.print("AIN0=");
serial.println (AIN0);
digitalWrite (cs_pin,high);
}
Arduino草图串行监视器上的代码输出捕获:
AIN0= 1.09
AIN0= 0.51
AIN0= 1.09
AIN0= 2.05
AIN0= 1.09
AIN0= 1.09
AIN0= 1.09
AIN0= 4.03
AIN0= 1.09
AIN0= 1.09
AIN0= 1.15
AIN0= 1.09
AIN0= 1.09
AIN0= 3.19
AIN0= 3.67
AIN0= 1.09
AIN0= 1.09
AIN0= 1.09
AIN0= 1.09
AIN0= 4.08
AIN0= 1.09
AIN0= 1.09
AIN0= 1.09
AIN0= 1.09