搜索
bottom↓
回复: 20

ad7175 读取ID也正常,但是读取数据一直不正确,如何解决

[复制链接]

出0入0汤圆

发表于 2020-7-27 18:03:55 | 显示全部楼层 |阅读模式
求助拜托大家了。自己画的板子,ad7175 读取ID也正常,写入和读取其他寄存器正常,但是读取数据一直不正确,不知道是软件的问题还是硬件的问题,不是芯片问题,换了好几片了,读出来的数据都是一样但是不对的
  
用ain0接3.3v串口显示的是7.7v
ain0接5v串口显示2.6v
ain0接GND显示的是满量程错误
这是源码
uint16_t AD7175_ID;
u16 reg=0;
void AD7175_INIT(void)//应变信号采集初始化函数
{

AD7175_RESET();//写入至少64个时钟复位AD7175-2
AD7175_ID=Get_AD7175_ID();//读取AD7175 ID:0X0CDX;
printf("AD7175_ID :0x0%x\r\n",AD7175_ID);

AD7175_CS_L;
SPI2_ReadWriteByte(0x06);//GPIO 配置寄存器
SPI2_ReadWriteByte(0x00);//
SPI2_ReadWriteByte(0x0f);//写入0x0c时,D3、D5灭
//写入0x0F时,D3、D5亮
//写入0x0e时,D3灭、D5亮
//写入0x0d时,D3亮、D5灭
AD7175_CS_H;
reg = AD7175_Read_Reg(0x06);
printf("0x06 reg : 0x%x\r\n",reg);

AD7175_CS_L;
SPI2_ReadWriteByte(0x01);//写ADC模式寄存器
SPI2_ReadWriteByte(0xa0);//使能内部基准输出
SPI2_ReadWriteByte(0x0c);//连续转换模式、外部晶振*/
AD7175_CS_H;
reg = AD7175_Read_Reg(0x01);
printf("0x01 reg : 0x%x\r\n",reg);

AD7175_CS_L;
SPI2_ReadWriteByte(0x10);//写通道映射寄存器0
SPI2_ReadWriteByte(0x00);//使能通道0,禁止多通道
SPI2_ReadWriteByte(0x01);//ADC+ -> AIN0;ADC- ->AIN1
AD7175_CS_H;
reg = AD7175_Read_Reg(0x10);
printf("0x10 reg : 0x%x\r\n",reg);

AD7175_CS_L;
SPI2_ReadWriteByte(0x20);//写配置寄存器
SPI2_ReadWriteByte(0x1f);//使能基准buf与AIN输入buf。
SPI2_ReadWriteByte(0x00);//
AD7175_CS_H;
reg = AD7175_Read_Reg(0x20);
printf("0x20 reg : 0x%x\r\n",reg);

AD7175_CS_L;
SPI2_ReadWriteByte(0x28);//写滤波器配置寄存器0
SPI2_ReadWriteByte(0x00);//
SPI2_ReadWriteByte(outspeed);
AD7175_CS_H;
reg = AD7175_Read_Reg(0x28);
printf("0x28 reg : 0x%x\r\n",reg);

AD7175_CS_L;
SPI2_ReadWriteByte(0x02);//写接口模式寄存器
SPI2_ReadWriteByte(0x10);
SPI2_ReadWriteByte(0x80);
AD7175_CS_H;


}


u16 Get_AD7175_ID(void)
{
u16 ID;
ID=0;
AD7175_CS_L;
SPI2_ReadWriteByte(0x47);
ID=SPI2_ReadWriteByte(0xff);
ID<<=8;
ID|=SPI2_ReadWriteByte(0xff);
AD7175_CS_H;;
return ID;
}
uint16_t AD7175_Read_Reg(uint8_t addr)
{
u16 r;
r=0;
AD7175_CS_L;
SPI2_ReadWriteByte(0x40+addr);
r=SPI2_ReadWriteByte(0xff);
r<<=8;
r|=SPI2_ReadWriteByte(0xff);
AD7175_CS_H;;
return r;
}

void AD7175_RESET(void)
{
u8 a=0;
AD7175_SCK_H;
Delay(0xffff);
AD7175_CS_L;
for(a=0;a<10;a++)
{
SPI2_ReadWriteByte(0xff);
}
AD7175_CS_H;
Delay(0xffff);//等待复位完成
AD7175_CS_L;
}


void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}

u32 AD7175_RDATA(void)
{
u32 Rdata = 0;
AD7175_CS_L;
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==1);
SPI2_ReadWriteByte(0x44);//读取数据寄存器
Rdata = SPI2_ReadWriteByte(0xff);
Rdata <<= 8;
Rdata|= SPI2_ReadWriteByte(0xff);
Rdata <<= 8;
Rdata|= SPI2_ReadWriteByte(0xff);
AD7175_CS_H;
return Rdata;
}

double Get_Vol(void)A
{
// float value=0;
double S_Vol=0;
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==1);
S_Vol=AD7175_RDATA();

// S_Vol = 0 + value * 5.0 / 0xFFFFFF;
S_Vol = -((S_Vol-0x800000)/0x800000*5*430/100);//电压采集换算关系
return S_Vol;
}
#endif

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2020-7-27 18:06:01 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2020-7-27 18:06:30 | 显示全部楼层
这个是刚才没上传出来的原理图和串口显示的截图

出0入4汤圆

发表于 2020-7-27 18:20:50 | 显示全部楼层
本帖最后由 bolizhicheng204 于 2020-7-27 18:24 编辑

离成功很近了,应该是中间转换过程计算的问题吧,模拟SPI还是硬件?
        dftemp=code*(vref/16777216);
前段时间用了这个片子,一直用这个计算没问题,注意设置为单极性输出,还有配置正确的基准

出0入24汤圆

发表于 2020-7-27 20:14:22 来自手机 | 显示全部楼层
上逻辑分析仪,看时序,抓原始数据

出110入12汤圆

发表于 2020-7-27 21:11:35 | 显示全部楼层
看看是不是还没转换完成就开始读数据了?这个时候读就会错

出0入0汤圆

 楼主| 发表于 2020-7-28 10:45:30 | 显示全部楼层
bolizhicheng204 发表于 2020-7-27 18:20
离成功很近了,应该是中间转换过程计算的问题吧,模拟SPI还是硬件?
        dftemp=code*(vref/16777216);
前段时 ...

您好,我用的是stm32F767的硬件spi2,感觉应该不是电压转换公式的问题,从数据寄存器读取的数据就和正常数据对不上

出0入0汤圆

 楼主| 发表于 2020-7-28 10:47:32 | 显示全部楼层
20061002838 发表于 2020-7-27 20:14
上逻辑分析仪,看时序,抓原始数据

您好  我用示波器看时序  读写寄存器的命令是正确的,出来的数据也有而且还在变化,就是和正常的数据对不上

出0入0汤圆

 楼主| 发表于 2020-7-28 10:49:23 | 显示全部楼层
hall 发表于 2020-7-27 21:11
看看是不是还没转换完成就开始读数据了?这个时候读就会错

您好,一开始我是检测DOUT是不是为高来判断数据是否转换完成,后来是读STATUS寄存器的RDY#位来判断,数据都是不太对的

出110入109汤圆

发表于 2020-7-28 11:08:48 | 显示全部楼层
还没细看你的驱动代码,参考过官网Non-OS驱动了的?
https://wiki.analog.com/resource ... e/uc-drivers/ad717x
一般我们会建议客户,将REFOUT直接或者两个10K电阻分压,接入AINx,然后判断转换完成数据,跟设定的,还一致。

出0入0汤圆

 楼主| 发表于 2020-7-28 11:29:23 | 显示全部楼层
reflecter 发表于 2020-7-28 11:08
还没细看你的驱动代码,参考过官网Non-OS驱动了的?
https://wiki.analog.com/resources/tools-software/uc ...

谢谢您,我这个驱动在买来学习板上是正常使用的测得电压都正常,但是到我自己画的板子,ID寄存器和其他寄存器写入和读取都是正常的,只有数据寄存器读出来的就不对的,

出110入109汤圆

发表于 2020-7-28 11:44:42 | 显示全部楼层
本帖最后由 reflecter 于 2020-7-28 11:45 编辑
Ritian 发表于 2020-7-28 11:29
谢谢您,我这个驱动在买来学习板上是正常使用的测得电压都正常,但是到我自己画的板子,ID寄存器和其他寄 ...


在买来学习板上是正常
---------------------------------------------------
那就不是软件驱动,而是硬件layout的问题了的。
拿掉万恶的磁珠,改装0欧姆,先试下数据偏差还有减小。
原理图,PCB,方便邮件下我的?
忘了介绍,我是ADI FAE,负责江苏南部区域的技术支持的~

出0入0汤圆

发表于 2020-7-28 13:28:11 来自手机 | 显示全部楼层
我pic单片机驱动的,cs一直拉低,第一个下降沿进中断,后面读数据,读完退出中断

出0入0汤圆

 楼主| 发表于 2020-7-28 13:48:54 | 显示全部楼层
reflecter 发表于 2020-7-28 11:44
在买来学习板上是正常
---------------------------------------------------
那就不是软件驱动,而是硬 ...

您好您好
  请问您的邮箱或者qq微信吗  想把原理图和pcb发给您

出110入109汤圆

发表于 2020-7-28 14:58:50 | 显示全部楼层
Ritian 发表于 2020-7-28 13:48
您好您好
  请问您的邮箱或者qq微信吗  想把原理图和pcb发给您

vincent.chen小老鼠excelpoint.com.cn

出0入0汤圆

 楼主| 发表于 2020-7-28 16:25:22 | 显示全部楼层
reflecter 发表于 2020-7-28 14:58
vincent.chen小老鼠excelpoint.com.cn

您好  您发的这个是世健网址吗  没有搜到呢

出110入12汤圆

发表于 2020-7-28 16:28:48 | 显示全部楼层
Ritian 发表于 2020-7-28 16:25
您好  您发的这个是世健网址吗  没有搜到呢

是邮箱啊
把小老鼠改成@

出110入109汤圆

发表于 2020-7-28 18:11:16 | 显示全部楼层
hall 发表于 2020-7-28 16:28
是邮箱啊
把小老鼠改成@

正解,

出0入0汤圆

 楼主| 发表于 2020-7-28 18:30:38 | 显示全部楼层
hall 发表于 2020-7-28 16:28
是邮箱啊
把小老鼠改成@

嗯嗯懂了 感谢

出0入0汤圆

 楼主| 发表于 2020-7-28 18:31:07 | 显示全部楼层

邮件已经发送  衷心感谢

出0入0汤圆

发表于 2020-12-17 16:13:17 | 显示全部楼层
你好,请问问题解决了吗,我最近也遇到了一样的问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-16 20:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表