AVR模数转换求助
用M8搭了个试验AD转换的电路,在转动多圈电位器时,1602显示的电压值不是均匀地变动,而是有时增减一个数字,有时增减两到四个数字,这是什么原因,改选外部AVCC或内部基准都是这个情况;用M16搭的,数据直接发串口,也是这个情况。
以前用STC的试验AD都很正常,数据连续变化。
我不相信AVR的AD会比STC的差。 我把主程序贴出来:
#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);
}
} 硬件电路图能贴一下吗?
原理图,是不是很眼熟 电位器都不是线性的 不是电位器问题,stc都不是这样 是仿真还是真实电路啊,仿真滴就跟玩具一样,不能当真滴喔 真实电路。已经找到原因了,是分频系数小了。 头像有点意思,要是1985年的就更好了!! 记号一下.....
页:
[1]