微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS1298设置和读取寄存器都正常,但在连续转换时读取到的数据异常!请教!

ADS1298设置和读取寄存器都正常,但在连续转换时读取到的数据异常!请教!

时间:10-02 整理:3721RD 点击:

源程序如下:

ADS1298初始化程序

void ADS1298_Init(void) // 初始化ADS1298各寄存器
{
uint8_t i,data;

ADS1298_START(HIGH); // 开始转换数据
ADS1298_CS(LOW); // 使能ADS1298操作
delay_us(10); // 延时
SPI_SendByte(ORDER_SDATAC); // 停止读取数据
delay_us(5); // 延时
SPI_SendByte(ORDER_RESET); // 复位器件
delay_us(10); // 延时
SPI_SendByte(ORDER_SDATAC); // 停止读取数据
delay_us(5); // 延时
// 调试代码
if(DEBUGE) // 调试模式下将读取全部寄存器值
{
SPI_SendByte(READ_DEVICE_ID); // 读取数据起始地址
delay_us(5); // 延时
SPI_SendByte(25); // 读取全部26个数据
for(i=0;i<26;i++)
{
data=SPI_SendByte(0x00); // 读取设备ID
if(DEBUGE) Usart1_Send_Char(data); // 发送26个寄存器初始值
}
}
// 设置ADS1298内部寄存器
// 设置寄存器CONFIG_3
SPI_SendByte(WRITE_CONFIG_3_REGISTER); // 设置寄存器起始地址
delay_us(5); // 解码延时
SPI_SendByte(0); // 设置一个寄存器
SPI_SendByte(0xC0); // 设置寄存器CONFIG_3 使能内部参考源 设置为2.4V
// 设置寄存器CONFIG_1
SPI_SendByte(WRITE_CONFIG_1_REGISTER); // 设置寄存器起始地址
SPI_SendByte(0); // 设置一个寄存器
SPI_SendByte(0x80); // 设置寄存器CONFIG_1 使能高效能模式 转换速率为500SPS
// 设置寄存器CONFIG_2
SPI_SendByte(WRITE_CONFIG_2_REGISTER); // 设置寄存器起始地址
delay_us(5); // 解码延时
SPI_SendByte(0); // 设置一个寄存器
SPI_SendByte(0x00); // 设置寄存器CONFIG_2 内部测试寄存器
// 设置各转换通道
SPI_SendByte(WRITE_CHANNEL_1_SET_REGISTER); // 设置寄存器起始地址
delay_us(5); // 解码延时
SPI_SendByte(7); // 设置八个寄存器
for(i=0;i<8;i++) // 连续设置八个寄存器
{
SPI_SendByte(0x81); // 默认6倍增益 输入短路
}
// 设置寄存器GPIO
SPI_SendByte(WRITE_GENERAL_PORT_IO); // 设置寄存器起始地址
delay_us(5); // 解码延时
SPI_SendByte(0); // 设置一个寄存器
SPI_SendByte(0xB0); // 设置GPIO
// 回读设置参数
if(DEBUGE) // 调试模式下将读取全部寄存器值
{
SPI_SendByte(READ_DEVICE_ID); // 读取数据起始地址
delay_us(5); // 解码延时
SPI_SendByte(25); // 读取全部26个数据
for(i=0;i<26;i++)
{
data=SPI_SendByte(0x00); // 读取设备ID
if(DEBUGE) Usart1_Send_Char(data); // 发送26个寄存器初始值
}
}
ADS1298_START(HIGH); // 开始转换数据
SPI_SendByte(ORDER_RDATAC); // 发送连续读取数据命令
delay_us(100);
ADS1298_CS(HIGH); // 禁用ADS1298操作
delay_us(5); // 高电平延时
// if(DEBUGE) ADS1298_Read_Initreg(); // 读取初始化寄存器参数

}

数据转换读取程序:

void ADS1298_Read_Data(void) // 读取ADS1298转换数据
{
uint8_t i;

while(ADS1298_READY==1); // 等待ads1298准备好
// 读取状态数据
ADS1298_CS(0); // 使能ADS1298
delay_us(5); // 短延时
for(i=0;i<27;i++)
{
ADS1298_ALL_Channel[i]=SPI_SendByte(0x00);// 发哦送数据并读取
}
delay_us(5); // 短延时
ADS1298_CS(1); // 使能ADS1298
}

我遇到的问题是 设置读取寄存器正常 但是读取转换数据不正确。应该是时序问题,但是不知道怎么结局啊。

系统上电时读到的默认寄存器:

92 06 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F 00 00 00 00 00 这里 92是编号

然后我设置各寄存器后,重新读取寄存器数据:

92 80 00 C0 00 81 81 81 81 81 81 81 81 00 00 00 00 00 00 00 A0 00 00 00 00 00 配置输入通道掉电 GPIO设置为输出A0(为了查看读取数据中状态寄存器值是否正确) 这样读取的转换数据应该都是000吧?

结果我读取的数据如下:

C0 00 0A 7F C0 00 0B 00 00 C0 00 0B 00 C0 00 0B 00 00 C0 00 0B 00 FF 80 00 16 00 这里已经读出了状态寄存器 C0 00 0A这个应该是正确的,可后边的数据应该都是00 00 00 啊。

请问读取数据的时候是只要发送连续的24+8*24各SCLK就能将状态位和8通道转换数据都读出来吗?

还是读取CS拉低读取24bits状态位CS拉高,CS拉低读取24bits通道1CS拉高,CS拉低读取24bits通道2CS拉高............直到读完第八个通道呢?

我两种方法都试过了,读取的数据就是不正确。能告诉我到底哪里错了?谢谢

我觉得你得关注一下 DRDY 引脚的信号。看一下手册的图38的时序要求

问题解决了吗?我也遇到同样的问题了 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top