您好论坛、
我正在尝试建立一个 SPI 连接到可编程模拟数字转换器 TI ADS8681。 将来、我希望调整几个以菊花链形式连接的 ADC (请参阅 ADC 数据表第38页)。 但是、第一步、我要根据图71 (ADC 数据表第37页)设置与单个 ADC 的连接。 我将"aa battery"连接到 ADC 以模拟输入。 ADC 数字输出应通过 SPI 发送至 Arduino MKR 1010 Wifi (通过 SPI)。 Arduino 将信号转发到 PC 的串行端口。 我的接线如图所示。
我编写了一个代码(在 POST 结束时)、通过其命令寄存器配置 ADC 并读取转换后的数字值。 但16位器件仅返回65635。 在+-10、24V 的测量范围和~1、5V 的电池电压下、我不希望这样做。
我怀疑 ADC 的配置不起作用、并且他处于 DATA_OUT_CTL_REG 寄存器的 DATA_VAL[2:0]的模式101b、只返回1。但我不知道错误的位置。
如果有人建议如何收集合适的数据、我会很讨厌。
[引述]
//阅读具有 Arduino MKR 1010 wifi 的 TI ADS8681 (ADC)
// 2020年8月
//按 SPL
#include
// Arduino SPI 库
// MISO、SCK 和 MOSI 由库定义
const int CS = 7;
//设置 SPI 引脚
void setup(){
Serial.begin(9600);
//定义串行数据传输的波特率
引脚模式(MISO、输入);
引脚模式(MOSI、输出);
引脚模式(SCK、输出);
引脚模式(CS、 输出);
//将 SPI 引脚设置为输出/输入:
digitalWrite (CS、HIGH);
SPI.begin();
//启动 SPI 并将 CS 设置为空闲
SPI.beginTransaction(SPISettings(100、MSBFIRST、SPI_MODE0));
//初始化 SPI 和 SPI 设置定义以 Hz、dataOrder 和 dataMode 为单位的最大速度
//速度最大值67MHz、ADW 数据表第11页、MSBFIRST、ADC 数据表第38页、数据模式 ADC 数据表第45页;
writeRegister (0x08、0b00000000、0b00000000);
//定义 SPI 模式;SDI_CTL_REG 寄存器(十六进制)的地址和定义 SPI 模式、ADC 数据表第51页、与 Arduino SPI Mode0匹配
writeRegister (0x10、0b00000000、0b00000000);
//定义 DATA_OUT_CTL_REG;
writeRegister (0x14、0b00000000、0b000000000);
//定义测量范围+-10、24V、请参阅第54页的 ADC 数据表;
}
void loop(){
READ_ADC_TO_SERIAL ();
//读取 ADC 并将结果发送到串行
}
void read_adc_to 串行(){
字节数据流名称[4];
//初始化
digitalWrite (CS、low);
// CS 低电平启动数据传输
spi.transfer (dataframe、4);
//读取变量'dataFrame '中的移位寄存器;
digitalWrite (CS、HIGH);
// CS 高电平可停止数据传输
字 PACKAGE_READ =数据流名称[0]<<8 |数据流名称[1];
serial.println (package_read、DEC);
//将数据转换和打印为串行数据;
延迟(1);
// ADS8681延迟 t_cycle-min、第665页和第11页 ADC 数据表
}
void writeRegister (字节 thisRegister、字节 thisValue1、字节 thisValue2){
//请参阅 ADC 编程第43页的数据表
字节包[4]={0b11010000、thisRegister、thisValue1、thisValue2};
//操作码,请参阅第43页的 ADC 数据表
digitalWrite (CS、low);
//将芯片选择设置为低电平来选择器件:
SPI.transfer (package、4);
//发送寄存器位置和值
digitalWrite (CS、HIGH);
//将芯片选择设置为高电平以取消选择
}
[/报价]