kuanglf 发表于 2013-2-4 17:20:38

AVR模数转换求助

用M8搭了个试验AD转换的电路,在转动多圈电位器时,1602显示的电压值不是均匀地变动,而是有时增减一个数字,有时增减两到四个数字,这是什么原因,改选外部AVCC或内部基准都是这个情况;
用M16搭的,数据直接发串口,也是这个情况。

以前用STC的试验AD都很正常,数据连续变化。

我不相信AVR的AD会比STC的差。

kuanglf 发表于 2013-2-4 18:03:28

我把主程序贴出来:
#include <iom16v.h>                        //包含型号头文件
#include <macros.h>                        //包含"位"操作头文件
#include <my_M8.h>                //自定义常量头文件
#include "1602_4.c"                        //1602显示子程序
#define uchar unsigned char
#define uint unsigned int
/*******************************************
函数名称: Mega16_ad
功    能: 对指定的通道进行模数转换
参    数: chl--指定的通道(本开发板只用了通道0)
返回值: addata--10位数据输出
/********************************************/
uint Mega16_ad(uchar chl)
{
uint addata;
DDRC&=~(BIT(PC0)|BIT(PC1));        //转换口设置为输入、无上拉
PORTC&=~(BIT(PC0)|BIT(PC1));       
ADMUX=0x40;                                       //采用AVCC参考电压,输出数据右对齐
ADMUX|=chl;                                         //设置指定的通道
ADCSR=0x80;                                         //采用单次转换,查询模式,2分频
ADCSR|=BIT(ADSC);                                //启动转换
while(!(ADCSR&(BIT(ADIF))));   //等待转换结束
addata=ADCL;                                        //读取低8位数据
addata+=ADCH*256;                                //读取高2位数据
return addata;                                        //返回10位数据
}
/********************************************/
void main(void)
{
       uint v;
       my_M8_init();                                //初始化
       delay(10);
       L1602_init();                                               
       while(1)
   {
                 v=Mega16_ad(0);
                  L1602_char(1,3,v/1000%10+48);
                  L1602_char(1,4,v/100%10+48);
                  L1602_char(1,5,v/10%10+48);
                  L1602_char(1,6,v%10+48);
              delay(200);
       
   }                                                     
}

baikenor 发表于 2013-2-4 18:19:16

硬件电路图能贴一下吗?

kuanglf 发表于 2013-2-4 19:10:46


原理图,是不是很眼熟

marshallemon 发表于 2013-2-4 19:29:28

电位器都不是线性的

kuanglf 发表于 2013-2-4 19:45:22

不是电位器问题,stc都不是这样

tony90 发表于 2013-2-5 00:48:21

是仿真还是真实电路啊,仿真滴就跟玩具一样,不能当真滴喔

kuanglf 发表于 2013-2-5 08:10:04

真实电路。已经找到原因了,是分频系数小了。

guowanling8061 发表于 2013-2-5 08:16:20

头像有点意思,要是1985年的就更好了!!

jz701209李 发表于 2013-2-5 20:02:42

记号一下.....
页: [1]
查看完整版本: AVR模数转换求助