|
楼主 |
发表于 2012-7-23 21:30:25
|
显示全部楼层
logicgreen 发表于 2012-7-23 14:14
仁兄是否考虑了ADC的输入阻抗为20k的因素。当你输入大于1.1V时,由于ADC内部输入阻抗的原因,实际的比较电 ...
谢谢LS二位。但是不行。使用LM358做电压跟随器输入,AIN0引脚电压1.90V; AIN2电压3.0V。串口输出'H"。测试程序如下:
u8 DrvAC_Comp(u8 mode, u8 channel)
{
unsigned char temp;
ACSR = 0;
ACSR |= 1 << ACD ; //AC_DIS();
if(mode == AC_AIN0_AIN1)
{
ADCSRB &= ~(1 << ACME);
ACSR &= ~(1 << ACBG);
}
else if(mode == AC_AIN0_ADC)
{
ADCSRA &= ~(1 << ADEN); //close ADC
ADCSRB |= (1 << ACME); //AC multiplexer enable
ADMUX = channel;
}
else if(mode == AC_BGR_AIN1)
{
ACSR |= (1 << ACBG);
}
else if(mode == AC_BGR_ADC)
{
ADCSRA = 0; //close ADC
ADMUX = channel;
ADCSRB = 0x40; //AC multiplexer enable
ACSR |= (1 << ACBG);
}
temp = ACSR;
ACSR &= ~(1 << ACD); //AC_EN();
mdelay_ms(2);
ACSR |= 1 << ACI ; //AC_CLRINT();
NOP();
NOP();
NOP();
if((ACSR >> ACO) & 0x01) //AC_ACO()
temp = 1;
else
temp = 0;
return temp;
}
int main(void)
{
volatile u8 temp=0;
SYSCLK_Init();
USART_Init();
AC_ON();
while(1)
{
temp = DrvAC_Comp(AC_AIN0_ADC,2);
if (temp)
USART_Send_Byte('H');
else
USART_Send_Byte('L');
mdelay_s(7);
}
} |
|