打印
[AVR单片机]

ATMEGA16 片内AD 使用问题

[复制链接]
2741|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 selfstudy 于 2011-7-21 17:30 编辑

使用ATMEGA16片内ADC0,可是仿真时AD结果不变化。调试很长时间也未发现错在哪里,请指教。
显示程序没有问题的。AD 转换的寄存器设置按照手册来的。

可是就是没有反应,AD 是一个固定值。
//ad 模块
uint AD_Result(void)
{uint data;

DDRA &=~_BV(PA0);//输入方式

PORTA&=~_BV(PA0);//不带上拉电阻

ADMUX=0x00;//右对齐,通道1,外接参考信号//0 0 AREF, 内部Vref 关闭

ADCSRA|=_BV(7) ;//ad使能

ADCSRA|=_BV(6);//启动AD转换

while(!( ADCSRA & _BV(4)));

data=ADCL;

data=data+ADCH*256;


return data;
}

//main 中的 while循环

while(1)
   {




LCD_Show_Num_New(0,0,AD_Result);//显示数字

i++;
       _delay_ms(100);//

if (i>3000) i=0;

LCD_Show_Num_New(0,1,i);//显示循环次数
   }

ATMEGA16 AD PROBLEM2.jpg (103.24 KB )

ATMEGA16 AD PROBLEM2.jpg

ATMEGA16 AD PROBLEM1.jpg (129.4 KB )

ATMEGA16 AD PROBLEM1.jpg

相关帖子

沙发
selfstudy|  楼主 | 2011-7-21 17:12 | 只看该作者
从上面的截图可知,循环次数能正确显示,可是AD 转换结果不变化。

AD 功能模块不知道错在哪里?

使用特权

评论回复
板凳
uabuntsu| | 2011-7-30 16:21 | 只看该作者
LCD_Show_Num_New(0,0,AD_Result);//显示数字
应该是LCD_Show_Num_New(0,0,AD_Result());吧?应该是函数调用才有返回值吧?

使用特权

评论回复
地板
selfstudy|  楼主 | 2011-7-30 17:04 | 只看该作者
LCD_Show_Num_New(0,0,AD_Result);//显示数字
应该是LCD_Show_Num_New(0,0,AD_Result());吧?应该是函数调用才有返回值吧?
uabuntsu 发表于 2011-7-30 16:21

对前面显示数字,后面是函数返回值。

我的ad可行,是仿真时未加电源,出错了。

使用特权

评论回复
5
qin552011373| | 2011-8-22 14:08 | 只看该作者
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

84

帖子

2

粉丝