哪位高手用过AD7714模数转换芯片的请进来指教
谁用过AD7714模数转换芯片的请进来指教
各位硬件高手,我是第一次用AD7714芯片,这个程序已经调试很久了,一直没有调试成功。
所以我把源代码复制在这里请各位高手指教,看看哪里不符合AD7714。其中,AD7714转换器的硬件电路设置为,POL=0 BUFFER=0 AIN6=GND=0 REFIN-=0 REFIN+=2.5V AIN6=0,CS=0
模拟量变化在0-2.5V时,输出值都没变化,具体为:
(24位十六进制数值H-L顺序)
模拟量:2.5V 7F FF FF
模拟量:2.5V FF FF FF
模拟量:1V FF FF FF
模拟量:1V FF FF FF
模拟量:0V FF FF FF
一直没有正确的模拟量结果出来。
/*
////////////////////////////////////////////////////////////////////////////////////
*/
void WriteAD7714(unsigned char dat)
{ int i;
unsigned char adregister=0,tem=0;
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN,~AD7714_DIN);
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK);
delay(3);
adregister=dat;
for(i=0;i<8;i++)
{
tem=(adregister>>(7-i))&0x01;
if(tem==0x01)
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN, AD7714_DIN);
else
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN, ~AD7714_DIN);
delay(2);
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,AD7714_SCLK);
delay(4);
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK);
delay(3);
}
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK);
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN,AD7714_DIN);
}
/*
////////////////////////////////////////////////////////////////////////////////////
*/
unsigned char ReadAD7714(void)
{
unsigned char adregister=0,temp;
int i;
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK); //设置闲置电平
temp=0;
for(i=0;i<8;i++)
{ temp=temp<<1;
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,AD7714_SCLK); //上跳沿
if(GPIOPinRead(GPIO_PORTE_BASE, AD7714_DOUT))
adregister|=1;
else
adregister|=0;
temp=(temp|adregister);
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK); ; //下跳沿
delay(5);
}
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK);
return (temp);
}
/*
/////////////////////// AD7714 SOFT RESET //////////////////////////////////////////
*/
void AD7714Reset(void)
{
int i;
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN, AD7714_DIN); //发送位数据
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK); //设置闲置时钟电平
delay(1); //延迟5个及其周期
delay(25);
for(i=0;i<40;i++){
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,AD7714_SCLK); //设置闲置时钟电平
delay(2); //延迟2个及其周期
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK); //下跳沿
delay(2);
}
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK); //设置闲置时钟电平
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN, AD7714_DIN); //发送位数据
}
/*
AD7714芯片硬件配置连接:POL=0 BUFFER=0 AIN6=GND=0 REFIN-=0 REFIN+=2.5V AIN6=0,CS=0
以下将AIN1-AIN6,AIN2-AIN6,AIN3-AIN6,AIN4-AIN6,AIN5-AIN6配置成准差分 增益为1
*/
void AD7714_INIT(void)
{
int i;
static unsigned char REG_set[30]={
0x20,0x41,0x30,0x40,0x10,0x20, //通道1初始化
0x21,0x41,0x31,0x40,0x11,0x20, //通道2初始化
0x22,0x41,0x32,0x40,0x12,0x20, //通道3初始化
0x23,0x41,0x33,0x40,0x13,0x20, //通道4初始化
0x26,0x41,0x36,0x40,0x16,0x20 //通道5初始化
};
for(i=0;i<30;i++)
{
各位硬件高手,我是第一次用AD7714芯片,这个程序已经调试很久了,一直没有调试成功。
所以我把源代码复制在这里请各位高手指教,看看哪里不符合AD7714。其中,AD7714转换器的硬件电路设置为,POL=0 BUFFER=0 AIN6=GND=0 REFIN-=0 REFIN+=2.5V AIN6=0,CS=0
模拟量变化在0-2.5V时,输出值都没变化,具体为:
(24位十六进制数值H-L顺序)
模拟量:2.5V 7F FF FF
模拟量:2.5V FF FF FF
模拟量:1V FF FF FF
模拟量:1V FF FF FF
模拟量:0V FF FF FF
一直没有正确的模拟量结果出来。
/*
////////////////////////////////////////////////////////////////////////////////////
*/
void WriteAD7714(unsigned char dat)
{ int i;
unsigned char adregister=0,tem=0;
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN,~AD7714_DIN);
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK);
delay(3);
adregister=dat;
for(i=0;i<8;i++)
{
tem=(adregister>>(7-i))&0x01;
if(tem==0x01)
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN, AD7714_DIN);
else
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN, ~AD7714_DIN);
delay(2);
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,AD7714_SCLK);
delay(4);
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK);
delay(3);
}
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK);
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN,AD7714_DIN);
}
/*
////////////////////////////////////////////////////////////////////////////////////
*/
unsigned char ReadAD7714(void)
{
unsigned char adregister=0,temp;
int i;
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK); //设置闲置电平
temp=0;
for(i=0;i<8;i++)
{ temp=temp<<1;
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,AD7714_SCLK); //上跳沿
if(GPIOPinRead(GPIO_PORTE_BASE, AD7714_DOUT))
adregister|=1;
else
adregister|=0;
temp=(temp|adregister);
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK); ; //下跳沿
delay(5);
}
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK);
return (temp);
}
/*
/////////////////////// AD7714 SOFT RESET //////////////////////////////////////////
*/
void AD7714Reset(void)
{
int i;
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN, AD7714_DIN); //发送位数据
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK); //设置闲置时钟电平
delay(1); //延迟5个及其周期
delay(25);
for(i=0;i<40;i++){
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,AD7714_SCLK); //设置闲置时钟电平
delay(2); //延迟2个及其周期
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK); //下跳沿
delay(2);
}
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_SCLK,~AD7714_SCLK); //设置闲置时钟电平
GPIOPinWrite(GPIO_PORTE_BASE, AD7714_DIN, AD7714_DIN); //发送位数据
}
/*
AD7714芯片硬件配置连接:POL=0 BUFFER=0 AIN6=GND=0 REFIN-=0 REFIN+=2.5V AIN6=0,CS=0
以下将AIN1-AIN6,AIN2-AIN6,AIN3-AIN6,AIN4-AIN6,AIN5-AIN6配置成准差分 增益为1
*/
void AD7714_INIT(void)
{
int i;
static unsigned char REG_set[30]={
0x20,0x41,0x30,0x40,0x10,0x20, //通道1初始化
0x21,0x41,0x31,0x40,0x11,0x20, //通道2初始化
0x22,0x41,0x32,0x40,0x12,0x20, //通道3初始化
0x23,0x41,0x33,0x40,0x13,0x20, //通道4初始化
0x26,0x41,0x36,0x40,0x16,0x20 //通道5初始化
};
for(i=0;i<30;i++)
{