我写了个ADC程序,参考电压是AVCC,转换成功,但是滑动电位器不会立即改变数,要重新复位单片机才能看到最新结果。。。。
#include<iom16v.h>
#include<AVRdef.h>
#define DataPort PORTC
#define uchar unsigned char
#define uint unsigned int
#define wei_set PORTB|=BIT(0)
#define wei_clr PORTB&=~BIT(0)
#define duan_set PORTB|=BIT(1)
#define duan_clr PORTB&=~BIT(1)
uchar duan_ma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar wei_ma[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar TempData[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f}; //存储显示值的全局变量
void init_io()
{
DDRC=0xff;
DDRB|=(BIT(0)|BIT(1));
}
void init_adc()
{
DDRA&=~BIT(0);
PORTA&=~BIT(0);//ADC输入端口初始化
ADMUX|=0x40;//参考电压AVCC,转换通道0
ADCSRA=0xe8;//ADC使能,开始转换,自动触发,标志位清零,开中断,2分频。
SFIOR=0;//连续转换模式
SREG|=BIT(7);
}
void adc_pro(uint dat_l,uint dat_h)
{
uint value;
dat_h<<=8;
value=dat_h|dat_l;
TempData[4]=duan_ma[value/1000];//千位
TempData[5]=duan_ma[value/100%10];
TempData[6]=duan_ma[value/10%10];
TempData[7]=duan_ma[value%10];
}
void display(uchar firstBit,uchar num)
{
uchar i;
for(i=0;i<num;i++)
{
DataPort=0x00;
duan_set;
duan_clr;//
DataPort=wei_ma[i+firstBit];
wei_set;
wei_clr;
DataPort=TempData[i];
duan_set;
duan_clr;
}
}
void main()
{
init_io();
init_adc();
while(1)
{
display(0,8);
}
}
#pragma interrupt_handler adc_isr:15
void adc_isr()//转换完成且ADCH被更新后,ADIF置位。
{
uint adc_l,adc_h;
adc_l=ADCL;//低位开始读
adc_h=ADCH;
adc_pro(adc_l,adc_h);
}
请教AVR单片机片内10位ADC转换结果读取问题。
右对齐的时候,10位ADC的结果表示方式为ADCH:ADCL,ADCH是10bit结果的高2位,ADCL是10bit结果的低8位,如果要将ADC的结果存储到一个int型的变量中,那就需要先将ADCH的结果左移8位,再和ADCL的相加,左移8位等价于乘以256.比如一次ADC转换的结果为0x0347,即ADCH=0x03,ADCL=0x47,现在要讲这个结果存储在resu...
avr单片机adc测量出来和打印出来数据不一样
不一样参考电压不准会直接导致测出的电压数值不准确,就像你用一根不准确的尺子去衡量一个长度,得出的数据肯定不可信。
我知道avr单片机有ADC转换器,,,请问5V基准输入怎么搞?要求精确的5V啊...
如果需要精确的ADC转换,一般单片机自带的基准电压都不精确,需要另外加入芯片,例如:AD586(高精度5V基准电压),在进行转换时通过另一路ADC通道对基准电压进行采样,而后与目标电压的采样值进行比对,换算出真实的数值,但是因为单片机都是5V系统,所以建议采用TL431这个2.5V的电压源,虽然精度有限但廉价易得...
AVR单片机中ADC的参考电压发生偏差会有什么影响
参考电压不准会直接导致测出的电压数值不准确,就像你用一根不准确的尺子去衡量一个长度,得出的数据肯定不可信。当然,看你的精度要求了。
AVR单片机中,ADC的时钟频率与采样频率有什么关系,采样频率该如何计算...
这个具体的要看你的单片机的型号,一定要详细读它的DATASHEET,这个在DATASHEET中能查到,大概呢就是ADC的时钟频率越高,采样的频率也就越高,当然模数转换的结果精度也就越高。
AVR单片机在ADC采集后需将每个通道的数存入下列变量 va0; va1; va2...
这位哥们,AVR单片机ADC功能,第一次转换结果是错误的,一般正常做法是,连续循环采集很多次,例如64次,取平均值,或者连续采集64次排序取中间值。你可以看下数据手册,里面有详细说明。你试试看~
avr单片机的adc 采集到的数据以bcd码储存,分别放在高字节和低字节,在转...
存储的不是BCD码而是8位的十六进制码eg.0xFFAA,这种码转成整型就是FF*256 AA就行了,输出就是你要的数
avr单片机ADC多通道采集与单通道采集区别
单通道采集至能采集一根引脚上面的模拟信号。多通道能够采集多路的模拟信号。个ADC模块就是1个电路,多通道虽然能够采集多路数据,但本质是通过将电路切换到不同的通道来完成采集的,采集效率相比单通道更低。程序更为繁琐。
AVR ADC 参考电压AVCC,没有输出
Mega8单片机程序 ADC初始化:ADMUX =(1<<REFS0)|(adc_mux&0x0f);\/\/选择内部AVCC为基准,REFS1 、REFS0=01 AVCC为参考电压 ACSR =(1<<ACD);\/\/关闭模拟比较器 ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;\/\/64分频 *\/ ADMUX=0X40; \/\/参考电压=AVCC...
AVR单片机adc中,差分输入增益是什么
简单理解为放大倍数