我在使用AVR单片机+CPLD操作DDC112,DDC112工作在非连续状态,充电时间为TINT=200us,我将DDC112的二个输入电流通道都接地,测得20bit转换结果为0,而不是4096,请问可能错在啥地方? 我将一个2M和470K的电阻加上电压接到电流输入通道时,能测得数据 ,程序如下:
INT32 DDC112_GET_DATA(void)
{
INT8U i;
INT32 data;
data = 0;
PORTB &= (~(1<<PB7)); //DCLK输出低电平
for(i=20;i>0;i--) //
{ data<<=1;//data右移1位
PORTB |= (1<<PB7); //DCLK
if((PINB&(1<<6))) //如果输出为高电平
data|=0x00000001;//按位或运算,置位最低位
DelayUS(5);
PORTB &= (~(1<<PB7)); //DCLK输出低电平
DelayUS(5);
}
data&=0x0fffff;//清零高12位;
return(data); //
}
//------------------------------------------------------------------- read_data
void DDC112_READ_DATA(void) //Non Continuous modda datalar okunuyor.
{
INT8U i;
for(i=0;i<2;i++)
BUF[i] = 0;
PORTB |= (1<<PB3);//CONV_C置高
DelayUS(10);
PORTB &= (~(1<<PB3));//CONV_C置低
//DelayUS(100);
while((PIND & (0x01<<2))) ;//DVALID PIND.2
PORTB &= (~(1<<PB4));//DXMIX=0
BUF[1] = DDC112_GET_DATA();
PORTB |= (1<<PB4); //output_high(DXMIT);
while((PIND & (0x01<<2))) ;//DVALID PIND.2
PORTB &= (~(1<<PB4));//DXMIX=0
BUF[0] = DDC112_GET_DATA();
PORTB |= (1<<PB4); //output_high(DXMIT);
DelayUS(1000);
}
其中CONV_C是通过单片机接到CPLD,通过CONV_C置高产生CONV信号,TINT=200US,通过示波器可以测得各个信号均能正常工作,就是通道接地,我读datasheet,觉得转换结果应该是4096,而测得是0,请专家给点建议,谢谢,邮箱:dandedong2006@163.com