|
求助拜托大家了。自己画的板子,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周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|