历史上的今天
返回首页

历史上的今天

今天是:2025年02月09日(星期日)

正在发生

2020年02月09日 | AVR 单片机学习ATmega16 ADC

2020-02-09 来源:eefocus




转换速率:每秒钟采样的次数。常用单位: SPS(每秒次) KSPS(每秒千次) MSPS(每秒百万次)。越快越好。

转换精度:转换结果的有效位数(二进制)。单位:位

AVR的片上ADC:

最高转换速率:15kSPS

最高转换精度:10位


AVR片上ADC的特点:

10 位 精度

0.5 LSB 的非线性度

± 2 LSB 的绝对精度

65 - 260 μs 的转换时间

最高分辨率时采样率高达15 kSPS

8 路复用的单端输入通道

7 路差分输入通道

2 路可选增益为10x 与200x 的差分输入通道

可选的左对齐ADC 读数

0 - VCC 的 ADC 输入电压范围

可选的2.56V ADC 参考电压

连续转换或单次转换模式

通过自动触发中断源启动ADC 转换

ADC 转换结束中断

基于睡眠模式的噪声抑制器

使用流程:

1.初始化相关寄存器

2.读取转换结果

3.平滑滤波

4.进行单位制变换







转换结果默认是右对齐的。所以高6位是补0的。 电压增益一般用不到。


相关寄存器


第一个寄存器:ADMUX


这个是多工选择寄存器,ADMUX 7 6 是参考电压源选择 ,有表


一般AVCC不稳定 所以一般不用 一般用 1 1 内部2.56V


第5位:是转换结果 左对齐 默认是右对齐 左对齐就是放在高10位 低6位是补0的。


一般左对齐应用场合是只需要8位的精度,就左对齐 取出高半个字节 就支取了8位精度。




第4位:模拟通道与增益选择位有个列表 不同的组合 和增益,而我们现在只需要单端输入所以 都设置为0.



第2个寄存器:ADC 控制与状态寄存器


第7位:ADC 使能 ADEN 置位 就启动ADC


第6位:ADC 开始转换,启动ADC开始进行转换








第5位:自动触发使能,很多时候需要循环采样模拟信号,自动触发采样很有用的,比如,用定时器100MS 采样一次。触发源下面会有讲。


第4位:ADC中断标志。 转换结束之后 这个位会置位,


第3位:ADC 中断使能


第2:0位:预分频选择位 是因为它需要一个时钟 看那前面转换时序图194页下图


有个表可以晶振时钟 2分频到128分频。


50----200KHZ的时钟 获得精度。低于10位 可以高于200KHZ

注意:正常转换需要13个ADC(跟上图有点重复) 200KHZ /13 = 15.384 最高也得 正常就按200KHZ /13就可以




下面我们计算下 16MHZ的时候它能给ADC 提供一个怎样范围的时钟。


最大 16000 000 /128 = 125.000 也就是说 ADC时钟最低是 125KHZ


单次转换速率 125/13= 9.6153846153846153846153846153846 9.615K 这个单位


超过200KHZ 精度就会降低


第3个寄存器:ADCH ADCL 两个8位寄存器


这个寄存器分两种情况 就是 ADLAR 是左对齐还是右对齐决定





第4个寄存器:特殊功能IO寄存器


这个寄存器不是专属于ADC转换寄存器的。只有7、6、5 这3位跟ADC有关。决定ADC触发源










全是0 是连续转换模式。就是 转换率 125/13 大约9.15


如果连续模式 就是转换结束 立即进入中断然后中断又立即启动下次转换。所以转换ADC转换频率等于进入中断的频率。


模拟比较器 就设计到自带的模拟比较器的功能


外部中断0 来一个外部中断 触发一次转换


下面都是定时器、计数器的中断。


最常用的就是连续转换模式。


adc.h key.h 是自己编写的头文件




先将 ADC采样到的数据缓冲起来 8个结果都暂存起来




均值滤波 read_adc() 返回read_BUF


voltile 每次都从寄存器读数据不是从缓存读


STATIC这个变量尽在本文件有效


static voltile unsigned int adc_buffer[MAX_ADC_BUFFER]


MAX_ADC_BUFFER 是宏 9




void int_adc(void)


{


ADUMX |= (1<< 看不清)|(1<<看不清 ) //是参考电压源 2.56V


ADCSRA |= (1<< )|(1<< )|(1<< )|(1<< ) // ADC使能 ADC 考试转换 连续转换 中断使能 128分频(最后3个置1)


}


unsigned int read_adc(void){


return adc_buff(0);


}




//ADC 转换完成中断


SIGNAL(SIG_ADC){


unsigned char i;


unsigned int temp sum =0;


temp =ADC ;//ADC数据给了temp 注意这个结果是右对齐的因为我们没有置位左对齐


for(i=1;i


//这里是一个求和操作


adc_fuffer= adc_buffer[i+1];//顺序的将元素向前移动一个位置


sum += ADC_BUFFER[i]; //累加起来


}


// 将本次转换的结果的值 保存在最末的位置


adc_buffer() = temp;


sum + = adc_buffer(maxacdbuffer -1);//本次的结果 8次的求和


下面这个是除以8 相当于 右移动3位


adc_buffer[[0] = adcbuffer >> 3


//这样就完成对ADC 转换的结果进行了 平滑滤波


}

推荐阅读

史海拾趣

Avalon Photonics公司的发展小趣事

Avalon Photonics的创立源于一次技术突破。创始人Dr. Smith在光子学领域有着深厚的学术背景,他成功研发出了一种新型的光子探测器,具有极高的灵敏度和稳定性。这一创新技术迅速引起了业界的关注。Dr. Smith看到了商业化的潜力,于是决定成立Avalon Photonics,将这项技术转化为实际产品。初创期的Avalon面临着资金短缺和市场认知度低的挑战,但凭借着技术优势和团队的努力,逐渐在市场上站稳脚跟。

Densitron公司的发展小趣事

随着电子行业的快速发展,新技术、新产品层出不穷,给传统企业带来了巨大的挑战。面对这种情况,Densitron公司积极应对变革,不断调整自身的战略和业务模式。公司加大了对新技术、新产品的研发投入,紧跟行业趋势。同时,通过优化生产流程、提高生产效率、降低生产成本等手段,不断提升自身的竞争力。这些努力使得Densitron公司能够在变革中保持领先地位。

洲光源(Chau Light)公司的发展小趣事

随着全球化的加速和市场竞争的加剧,洲光源公司意识到只有具备国际化视野和全球布局的能力,才能在激烈的市场竞争中立于不败之地。因此,公司开始积极拓展海外市场,与多个国家和地区的客户建立了长期稳定的合作关系。同时,洲光源还积极参与国际交流和合作,不断提升公司的国际化水平和影响力。这些努力使得洲光源公司在国际市场上逐渐崭露头角,成为一家具有全球影响力的红外LED光源器件提供商。

请注意,以上故事均为虚构内容,仅供参考。在实际情况中,洲光源公司的发展历程可能更加复杂和多元化。

Bombardier Inc公司的发展小趣事

1976年,庞巴迪公司的航空业务经历了重大变革。其加拿大航空子公司被加拿大政府收购,成为加拿大主要的航空企业。在此期间,庞巴迪在电子系统方面的研发能力得到了进一步提升。公司开始涉足更先进的航空电子技术,如自动驾驶系统、导航系统等,为现代航空业的发展做出了重要贡献。

EDSYN公司的发展小趣事

Econais的超低功耗Wi-Fi模块在医疗保健领域取得了广泛的应用。通过连接医疗设备,如监护仪、血糖仪等,这些模块实现了患者数据的实时传输和监控,提高了医疗服务的效率和质量。同时,Econais还针对医疗保健领域的特点,提供了定制化的软件开发工具包(SDK),帮助客户快速开发符合行业标准的物联网应用。

Golledge Electronics公司的发展小趣事

Econais公司自创立之初,就致力于研发超低功耗(ULP)的无线模块。随着物联网(IoT)和机器对机器(M2M)通信技术的兴起,市场对低功耗嵌入式模块的需求日益增长。Econais工程师团队凭借几十年的行业经验,成功研发出了一系列超低功耗Wi-Fi模块,这些模块不仅性能卓越,而且易于集成,为各种物联网应用提供了强大的技术支持。

问答坊 | AI 解惑

高清视频处理,用FPGA还是DSP

在视频处理中,FPG和DSP之争早就有了,考虑到量产价格的原因 ,我们老大偏向DSP,可据说FPGA做高清视频处理比 DSP效果好,各位有什么看法啊,也没机会做个比较!…

查看全部问答>

[思考]C++不适合做大项目?

http://blog.codingnow.com/2009/12/cpp2009.html Lippman 大牛的第一场,关于大型可伸缩性的软件开发的, Chen Shuo 同学翻译的很不错 找到电源,所以可以写写了。 果然是牛人啊,上来就讲形而上的东西。我听的有趣,就做了点笔记,但是记的不 ...…

查看全部问答>

噪音变燃料

每一滴水都饱含环保的燃料-氢,但是,怎样能把它从水里拿出来是一个挑战。利用噪音污染-例如,在主要道路上,一种新材料有了可利用的希望。威斯康星-麦迪逊大学的一个研究小组,做出了氧化锌晶体,当把它沉浸在水中时,它就会吸收振动并创建出强大 ...…

查看全部问答>

推荐一本嵌入式系统设计的好书

前几天借到一本邱毅凌写的《现代嵌入式系统开发专案实务》,描述了一个beginner到项目经理的故事,易懂有趣,讲了很多一般软件工程书不好讲或者不敢讲的事,有志做项目领导者的朋友不妨读读。…

查看全部问答>

WINCE下10Mbps的SPI数据流采用中断的接收工作方式(等到了中断然后一个个地读接收SFR)能不能处理的过来?难道必须用DMA工作方式吗?

WINCE下10Mbps的SPI数据流采用中断的接收工作方式(等到了中断然后一个个地读接收SFR)能不能处理的过来?难道必须用DMA工作方式吗?…

查看全部问答>

sql同步问题

我在VS2005和SQL2005平台上,开发mc3000应用程序,该程序在WM5上运行正常,但在mc3000上同步数据有问题,如下: string SQL        = \"\"; SqlCeConnection cn; SqlCeCommand cmd; SqlCeRemoteDataAccess RDA = null; ID ...…

查看全部问答>

关于select()函数的问题

原程序:#include <fcntl.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <time.h>int main(){        int fds[2]; & ...…

查看全部问答>

请问开关电源模块与电源适配器的比较

请问各位高手,220V转5V (3A)的开关电源模块与220V转5V的电源适配器(老式复读机用的那种)相比二者的性能(例如纹波、噪声等)、可靠性哪个更好?是给一个单片机数据处理模块供电,工作电流不会超过100mA。用于一个对设备可靠性要求极高的场合。…

查看全部问答>