版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AVR学习笔记六、模拟比较器和ADC实验 -基于LT_Mini_M166.1 模拟比较器实验6.1.1 实实例功能模拟比较器和模模数转换ADDC是单片机机内部最常见见的两种支持持模拟信号输输入的功能接接口。大部分分AVR都具具备这两种类类型的接口。本本实例将以ATTmage116芯片为例例,介绍模拟拟比较器的使使用方法,在在下一个实例例中介绍模数数转换ADCC。使用模拟比较器器可以实现单单片机系统电电源电压的检检测,更巧妙妙的应用是利利用模拟比较较器和一些简简单的外围电电路,设计简简单的模数转转换ADC。本实例实现利用用模拟比较器器比较某一点点电压与内部模模拟比较器参参考电压的高高低。共有33
2、个功能模块块,分别描述述如下: 单片机系统统:使用ATTmega116单片机的的模拟比较器器比较某一点点的电压与参参考电压的关关系。 外围电路:利用电阻设设计的分压电电路。 软件程序:熟悉掌握AATmegaa16单片机机的模拟比较较器的使用。通过本实例的学学习,掌握相相关电路设计计,并掌握以以下知识点: 了解单片机机的模拟比较较器。 了解单片机机的模拟比较较器的使用。 掌握单片机机模拟比较器器的编程。6.1.2、器器件和原理1、模拟比较器器的介绍ATmega116的模拟比比较器可以实实现对两个输输入端:正极极AIN0和负负极AIN11(分别对应于AATmagee16的引脚脚PB2、PPB3)的
3、模模拟输入电压压进行比较。当当AIN0上的的电压高于AAIN1的电电压时,模拟拟比较器输出出ACO被设为为“1”。比较器的的输出还可以以被设置作为为定时计数器器1输入捕获功功能的触发信信号。此外,比比较器的输出出可以触发一一个独立的模模拟比较器中中断。用户可可以选择使用用比较器输出出的上升沿、下下降沿或事件件触发作为模模拟比较器中中断的触发信信号。2、与模拟比较较器相关的寄寄存器与模拟比较器相相关的寄存器器是SFIOOR、ACSSR。用户通通过这两个寄寄存器的相关关位实现对模模拟比较器的的设置和控制制。特殊功能IO寄寄存器SFFIOR寄存器SFIOOR中的第33位ACMEE为模拟比较较器多路使
4、能能控制位。当当该位为逻辑辑“1”,同时模数数转换(ADDC)功能被被关闭(ADDCSRA寄寄存器中的AADEN使能能位为“0”)时,允许许使用ADCC多路复用器器选择ADCC的模拟输入端口口作为模拟比比较器反向端端的输入信号号源。当该位为为零时,AIIN1引脚的的信号将加到到模拟比较器器反向端。本实例中我们使使用ADC的的模拟输入端端口作为模拟拟比较器反向向端的输入信信号源,所以以需要设置第第3位ACMME为1.模拟比较器控制制和状态寄存存器ACSSRACSR是模模拟比较器主主要的控制寄寄存器,其中中各个位的作作用如下:位7ACD:模拟比较器器禁止当该位设为“11”时,提供给给模拟比较器器的
5、电源关闭闭。该位可以以在任何时候候被置位,从从而关闭模拟拟比较器。在在MCU闲置模模式,且无需需将模拟比较较器作为唤醒醒源的情况下下,关闭模拟拟比较器可以以减少电源的的消耗。要改改变ACD位的设设置时,应该该先将寄存器器ACSR中的的ACIE位清清零,把模拟拟比较器中断断禁止掉。否否则,在改变变ADC位设置置时会产生一一个中断。位6ACBGG:模拟比较较器的能隙参参考源选择当该位为“1”时,芯片内内部一个固定定的能隙(BBandgaap)参考电电源1.222V将代替AAIN0的输输入,作为模模拟比较器的的正极输入端端。当该位被被清零时,AAIN0的输输入仍然作为为模拟比较器器的正极输入入端。位
6、5ACO:模拟比较器器输出模拟比较器的输输出信号经过过同步处理后后直接与ACCO相连。由由于经过同步步处理,ACCO与模拟比比较器的输出出之间,会有有12个时钟钟的延时。位4ACI:模拟比较器器中断标志位位当模拟比较器的的输出事件符符合中断触发发条件时(中中断触发条件件由ACISS1 和ACIS00 定义),ACCI由硬件置置“1”。若ACIEE 位置“1”,且状态寄寄存器中的II位为“1”时,MCU响应模模拟比较器中中断。当转入入模拟比较中中断处理向量量时,ACII被硬件自动动清空。此外外,也可使用用软件方式清清零ACI:对ACI标志位位写入逻辑“1”来清零该位位。位3ACIEE:模拟比较较
7、器中断允许许当ACIE位设设为“1”,且状态寄寄存器中的II位被设为“1”时,允许模模拟比较器中中断触发。当当ACIE被清清“0”时,模拟比比较器中断被被禁止。位2ACICC:模拟比较较器输入捕获获允许当该位设置为“1”时,定时计数数器1的输入捕获获功能将由模模拟比较器的的输出来触发发。在这种情情况下,模拟拟比较器的输输出直接连到到输入捕获前前端逻辑电路路,从而能利利用定时器/计数器1输入捕获中中断的噪声消消除和边缘选选择的特性。当当该位被清零零时,模拟比比较器和输入入捕获功能之之间没有联系系。要使能比比较器触发定定时器/计数器1的输入捕获获中断,定时时器中断屏蔽蔽寄存器(TTIMSK)中中
8、的TICIEE1位必须被被设置。位1、0ACCIS1、ACIS00:模拟比较较器中断模式式选择这2个位决定哪哪种模拟比较较器的输出事事件可以触发发模拟比较器器的中断。不不同的设置参参见表6.11.1。表6.1.1 模拟比较较器中断模式式选择ACIS1ACIS0中 断 模 式式00比较器输出的上上升沿和下降降沿都触发中中断01保留10比较器输出的下下降沿触发中中断11比较器输出的上上升沿触发中中断注意:当要改变变ACIS11、ACIS00时,必须先先清除ACSSR寄存器中中的中断允许许位,以禁止止模拟比较器器中断;否则则,当这些位位被改变时,会会发生中断。在本实例中,我我们要使用模模拟比较器,所
9、所以应当允许许模拟比较器器,即ACDD应为0,选选择芯片内部部的固定能隙隙参考电源。即即ACBG设设置为1,我我们不使用中中断和捕获,所所以不必理会会与此相关的的各位。模拟比较器的多多路输入用户可以选择AADC7.0引脚中的任任一路的模拟拟信号代替AAIN1引脚脚,作为模拟拟比较器的反反向输入端。模模数转换的AADC多路复复用器提供这这种选择的能能力,但此时时必须关闭芯芯片的ADCC功能。当模模拟比较器的的多路选择使使能位(SFFIOR中的的ACME位)置置“1”,同时ADCC被关闭时(AADCSRAA中的ADENN位置“0”),由寄存存器ADMUUX中的MUX2:0位所确定定的引脚将代代替A
10、IN11作为模拟比比较器的反向向输入端,如如表6.1.2所示。如如果ACMEE被清零,或或ADEN被置置1,则AIN11仍将为模拟拟比较器的反反向输入端。表6.1.2 模拟比较较器多路输入入选择ACMEADENMUX2.00模拟比较器反向向输入端0 xxxxAIN111xxxAIN110000ADC010001ADC110010ADC210011ADC310100ADC410101ADC510110ADC610111ADC7 本实例中我们们采用ADCC0作为模拟拟比较器的反反向输入端,所所以选择ADDMUX寄存存器中的MUUX2:0=0;6.1.3、电电路本实例的电路包包含分压电路路,下面的电
11、路路是电阻分压压电路,如下下图所示。1、电路原理在本实例中利用用电位器(即即可调电阻)组组成分压电路路,单片机的的PA0连接接在电位器的的动片引脚上,这个电路路实际上相当当于两个电阻阻组成的串联联电路,只不不过这两个电电阻的阻值是是可变的,改改变动片的位位置,就可以以改变PA00与地之间的的电阻值,根根据串联电路路分压的原理理,当动片移移动时,PAA0处的电压压就会发生变变化。2、电路连接电路电位器的动动片引脚连接接到单片机的的PA0口,作作为模拟比较较器的反向输输入端。6.1.4、程程序设计1、程序功能程序的功能是使使用单片机的的模拟比较器器比较PA00口的电压与与单片机内部部的固定能隙隙电
12、压(1.22V)之之间的高低,如果PA0的电压低于1.22V,则D1灯点亮,否则D2灯点亮。2函数说明本程序有两个功功能函数,分分别是: 端口初始化化函数,设置置连接D1、DD2两个LEED的端口PPB0、PBB1为输出口口,输出低电电平,使两个个LED都处处于熄灭状态态。 模拟比较器器初始化函数数设置与模拟比较较器相关的寄寄存器,使模模拟器按照一一定的方式工工作。 3、使用WIINAVR开开发环境,我我们使用的是是外部12MM的晶振,所所以需要将mmakefiile文件中中的时钟频率率修改为122M。另外在在程序烧录到到单片机的时时候,熔丝位位也要选择为为外部12MM晶振(注意是是晶振,不是
13、是外部振荡器器,一定不要要选择错了,否否则会导致单单片机不能再再烧写程序)。 4、程序代码码#includde #includde #includde /中中断函数头文文件/函数声明void Poort_Innit(vooid); /端端口初始化配配置void Coomparee_Initt(voidd); /模拟比较较器初始化设设置int maiin(voiid) Port_IInit();Comparre_Iniit();sei(); /使能全全局中断 while(1)if(ACCSR & (1 ACO) /判断AADC0的电电压是否大于于1.22VVPORTTB = 00X01; /低于
14、于1.22VV,D1点亮亮,elsePORTTB = 00X02; /高于1.22V,DD2点亮,/端口状态初初始化设置函函数void Poort_Innit()PORTB = 0X000; /DDRB |= (1 PBB0) | (1 PB1); /PB0、PPB1设置为为输出/模拟比较器器初始化函数数void Coomparee_Initt()SFIOR |= (11 AACME); /使使用ADC多多路复用器选选择ADC的的模拟输入端端口 /作为模拟比比较器反向输输入端的信号号源。/同同时选择ADDC的ADCC0作为输入入端,并且关关闭AD转换换的使能ACSR |= (1 ACCBG);
15、 /允允许模拟比较较器,AINN0设置为内内部固定能隙隙参考电源11.22V6.2 模数转转换的ADCC实验6.2.1、实实例功能AVR的模数转转换器ADCC具有下列特特点:10位精度;0.5LSB积积分非线形误误差2LSB的绝绝对精度;13s2660s的转换时间间;在最大精度下可可达到每秒115kSPSS的采样速率率;8路可选的单端端输入通道;7路差分输入通通道;2路差分输入通通道带有可选选的10和200增益;ADC转换结果果的读取可设设置为左端对对齐(LEFFT ADJJUSTMEENT);ADC的电压输输入范围0Vcc;可选择的内部22.56V的的ADC参考考电压源;自由连续转换模模式和
16、单次转转换模式;ADC自动转换换触发模式选选择;ADC转换完成成中断;休眠模式下的噪噪声抑制器(NNOISE CANCEELER)。在本实例中,我我们将编写程程序实现将模模数转换后获获得的电压值值通过单片机机的串口发送送到计算机,然后后通过计算机机上的串口助助手显示测量量的电压值。本实例共有3个个功能模块,分分别描述如下下: 单片机系统统:使用单片片机的串口实实现将模数转转换后获得的的电压值通过过串口发送到到计算机。 外围电路:RS2322电平转换电电路,DB99串行接口插插座,模拟电电压输入采集集电路。 软件程序:进一步熟悉悉单片机的串串行通信,并并掌握单片机机的模数转换换的方法。6.2.2
17、、器器件和原理关于串行接口的的原理已接单单片机与计算算机的串口的的连接在上一一实例中进行行了描述,在在本实例中不不再重复。本实例只介绍AATmegaa16单片机机如何通过内置置的模数转换换模块采集外外界输入的模模拟电压。1、ATmegga16单片片机的模数转转换器ADCC介绍由于单片机只能能处理数字信信号,所以外外部的模拟信信号量需要转转变成数字量量才能进一步步的由单片机机进行处理。AATmegaa16内部集集成有一个110位逐次比比较(succcessiive appproxiimatioon)ADCC电路。因此此使用AVRR可以非常方方便的处理输输入的模拟信信号量。ATmega116的AD
18、CC与一个8通通道的模拟多多路选择器连连接,能够对对以PORTTA作为ADDC输入引脚脚的8路单端端模拟输入电电压进行采样样,单端电压压输入以0VV(GND)为为参考。另外外还支持166种差分电压压输入组合,其其中2种差分分输入方式(AADC1,AADC0和AACD3,AADC2)带带有可编程增增益放大器,能能在A/D转转换前对差分分输入电压进进行0dB(11),20ddB(10)或46ddB(2000)的放大。还还有七种差分分输入方式的的模拟输入通通道共用一个个负极(ADDC1),此此时其它任意意一个ADCC引脚都可作作为相应的正正极。若增益益为1或10,则可获得得8位的精度度。如果增益益为
19、200,那么转换换精度为7位位。AVR的ADCC功能单元由由独立的专用用模拟电源引引脚AVccc供电。AVVcc和Vcc的电压差差别不能大于于0.3V。AADC转换的参考考电源可采用用芯片内部的的2.56VV参考电源,或或采用AVcc,也可使使用外部参考考电源。使用用外部参考电电源时,外部部参考电源由由引脚ARFFE接入。使使用内部电压压参考源时,可可以通过在AAREF引脚脚外部并接一一个电容来提提高ADC的的抗噪性能。ADC功能单元元包括采样保保持电路,以以确保输入电电压在ADCC转换过程中中保持恒定。ADC通过逐次比较(successive approximation)方式,将输入端的模拟
20、电压转换成10位的数字量。最小值代表地,最大值为AREF引脚上的电压值减1个LSB。可以通过ADMUX寄存器中REFSn位的设置,选择将芯片内部参考电源(2.56V)或AVcc连接到AREF,作为A/D转换的参考电压。这时,内部电压参考源可以通过外接于AREF引脚的电容来稳定,以改进抗噪特性。模拟输入通道和和差分增益的的选择是通过过ADMUXX寄存器中的的MUX位设设定的。任何何一个ADCC的输入引脚脚,包括地(GGND)以及及内部的恒定定能隙(fiixed bbandgaap)电压参参考源,都可可以被选择用用来作为ADDC的单端输输入信号。而而ADC的某某些输入引脚脚则可选择作作为差分增益益
21、放大器的正正、负极输入入端。当选定定了差分输入入通道后,差差分增益放大大器将两输入入通道上的电电压差按选定定增益系数放放大,然后输输入到ADCC中。若选定定使用单端输输入通道,则则增益放大器器无效。通过设置ADCCSRA寄存存器中的ADDC使能位AADEN来使使能ADC。在在ADEN没没有置“1”前,参考电电压源和输入入通道的选定定将不起作用用。当ADEEN位清“0”后,ADCC将不消耗能能量,因此建建议在进入节节电休眠模式式前将ADCC关掉。ADC将10位位的转换结果果放在ADCC数据寄存器器中(ADCCH和ADCCL)。默认认情况下,转转换结果为右右端对齐(RRIGHT ADJUSSTED
22、)的的。但可以通通过设置ADDMUX寄存存器中ADLLAR位,调调整为左端对对齐(LEFFT ADJJUSTEDD)。如果转转换结果是左左端对齐,并并且只需要88位的精度,那那么只需读取取ADCH寄寄存器的数据据作为转换结结果就达到要要求了。否则则,必须先读读取ADCLL寄存器,然然后再读取AADCH寄存存器,以保证证数据寄存器器中的内容是是同一次转换换的结果。因因为一旦ADDCL寄存器器被读取,就就阻断了ADDC对ADCC数据寄存器器的操作。这这就意味着,一一旦指令读取取了ADCLL,那么必须须紧接着读取取一次ADCCH;如果在在读取ADCCL和读取AADCH的过过程中正好有有一次ADCC转
23、换完成,AADC的2个个数据寄存器器的内容是不不会被更新的的,该次转换换的结果将丢丢失。只有当当ADCH寄寄存器被读取取后,ADCC才可以继续续对ADCLL和ADCHH寄存器操作作更新。ADC有自己的的中断,当转转换完成时中中断将被触发发。尽管在顺顺序读取ADDCL和ADDCH寄存器器过程中,AADC对ADDC数据寄存存器的更新被被禁止,转换换的结果丢失失,但仍会触触发ADC中中断。2、ATmwgga16单片片机的模数转转换器ADCC相关的I/O寄存器1ADC多路路复用器选择择寄存器AADMUX位7,6REEFS1:0:ADDC参考电源源选择REFS1、RREFS2用用于选择ADDC的参考电电
24、压源,见表表6.2.11。如果这些些位在ADCC转换过程中中被改变,新新的选择将在在该次ADCC转换完成后后(ADCSSRA中的ADIFF被置位)才才生效。一旦旦选择内部参参考源(AVVcc、2.56VV)为ADC的参考考电压后,AAREF引脚脚上不得施加加外部的参考考电源,只能能与GND之间并接抗抗干扰电容。表6.2.1 ADC参考电源源选择REFS1REFS0ADC参考电源源00外部引脚AREEF,断开内内部参考源连连接01AVcc,ARREF外部并并接电容10保留11内部2.56VV,AREF外部部并接电容位5ADLAAR:ADC结果左左对齐选择ADLAR位决决定转换结果果在ADC数据寄
25、寄存器中的存存放形式。写写“1”到ADLARR位,将使转转换结果左对对齐(LEFFT ADJJUST);否则,转换换结果为右对对齐(RIGGHT ADDJUST)。无无论ADC是否正正在进行转换换,改变ADDLAR位都将将会立即影响响ADC数据寄寄存器。位4.0MMUX4:00:模拟通道道和增益选择择这5个位用于对对连接到ADDC的输入通通道和差分通通道的增益进进行选择设置置,详见表66.2.2。注注意,只有转转换结束后(AADCSRAA的ADIFF是“1”),改变这这些位才会有有效。表6.2.2 ADC输入通通道和增益选选择MUX4:00单端输入差分正极输入差分负极输入增益00000ADC0
26、N/A00001ADC100010ADC200011ADC300100ADC400101ADC500110ADC600111ADC701000N/AADC0ADC01001001ADC1ADC01001010ADC0ADC020001011ADC1ADC020001100ADC2ADC21001101ADC3ADC21001110ADC2ADC220001111ADC3ADC220010000ADC0ADC1110001ADC1ADC1110010ADC2ADC1110011ADC3ADC1110100ADC4ADC1110101ADC5ADC1110110ADC6ADC1110111ADC7
27、ADC1111000ADC0ADC2111001ADC1ADC2111010ADC2ADC2111011ADC3ADC2111100ADC4ADC2111101ADC5ADC21111101.22V(VVBG)N/A111110V(GND) 本实例中中我们需要设设置ADC的的参考电压源源为AVccc,即REFFS0设置为为1,ADCC默认转换结结果为右对齐齐,我们不需需要改变,模模拟通道选择择ADC0通通道单端输入入,即MUX4:0。2ADC控制制和状态寄存存器AADDCSRA位7ADENN:ADC使能该位写入“1”时使能ADCC,写入“0”关闭ADC。如在在ADC转换过过程中将ADDC关闭,
28、该该次转换随即即停止。位6ADSCC:ADC转换开开始在单次转换模式式下,置该位位为“1”,将启动一一次转换。在在自由连续转转换模式下,该该位写入“1”将启动第一一次转换。先先置位ADEEN位使能ADCC,再置位ADDSC;或置置位ADSCC的同时使能能ADC,都会会使能ADCC开始进行第第一次转换。第第一次ADCC转换将需要要25个ADC时钟周周期,而不是是常规转换的的13个ADC时钟周周期,这是因因为第一次转转换需要完成成对ADC的初始始化。在ADC转换的的过程中,AADSC将始始终读出为“1”。当转换完完成时,它将将转变为“0”。强制写入入“0”是无效的。位5ADATTE:ADCC自动转
29、换触触发允许当该位被置为“1”时,允许ADDC工作在自自动转换触发发工作模式下下。在该模式式下,在触发发信号的上升升沿时ADCC将自动开始始一次ADCC转换过程。AADC的自动动转换触发信信号源由SFFIOR寄存存器中的ADDTS位选择择确定。位4ADIFF:ADC中断标标志位当ADC转换完完成并且ADDC数据寄存存器被更新后后该位被置位位。如果ADDIE位(ADC转换结结束中断允许许)和SREEG寄存器中中的I位被置“1”,ADC中断服服务程序将被被执行。ADDIF在执行行相应的中断断处理向量时时被硬件自动动清零。此外外,ADIFF位可以通过过写入逻辑“1”来清零。位3ADIEE:ADC中断
30、允允许当该位和SREEG寄存器中中的I位同时被置置位时,允许许ADC转换完完成中断。位2,0ADDPS2:0:ADC预分频频选择这些位决定了XXTAL时钟钟与输入到AADC的ADC时钟之之间分频数,见见表6.2.3。表6.2.3 ADC时钟分频频ADPS2:0分 频 系系 数0002001201040118100161013211064111128本实例中我们需需要使能ADDC,即ADDEN设置为为1,我们不不用自动转换换,也不需要要中断,所以以,ADTEE、ADIEE位不需要设设置。在通常常情况下,AADC的逐次次比较转换电电路要达到最最大精度时,需需要50kHHz2000kHz之间间的采样
31、时钟钟。本例中使使用的时钟是是12M的,所所以要将时钟钟64分频,分分频后ADCC频率为1888KHz,即即时钟分频选选择ADPSS2:0=6。3ADC数据据寄存器AADCL和ADCHADLAR = 0,ADDC转换结果果右对齐时,AADC结果的的保存方式ADLAR = 1,ADDC转换结果果左对齐时,AADC结果的的保存方式当ADC转换完完成后,可以以读取ADCC寄存器的AADC0-AADC9得到到ADC的转转换的结果。如如果是差分输输入,转换值值为二进制的的补码形式。一一旦开始读取取ADCL后,ADC数据寄寄存器就不能能被ADC更新,直直到ADCHH寄存器被读读取为止。因因此,如果结结果是
32、左对齐齐(ADLAAR=1),且且不需要大于于8位的精度的的话,仅仅读读取ADCHH寄存器就足足够了。否则则,必须先读读取ADCLL寄存器,再再读取ADCCH寄存器。ADDMUX寄存存器中的ADDLAR位决决定了从ADDC数据寄存存器中读取结结果的格式。如如果ADLAAR位为“1”,结果将是是左对齐;如如果ADLAAR位为“0”(默认情况况),结果将将是右对齐。4特殊功能II/O寄存器器SFIORR位7.5AADTS22:0:AADC自动转转换触发源选选择当ADCSRAA寄存器中的的ADATEE为“1”,允许ADCC工作在自动动转换触发工工作模式时,这这3位的设置置用于选择ADDC的自动转转换
33、触发源。如果果禁止了ADDC的自动转转换触发(AADATE为为“0”),这3个个位的设置值值将不起任何何作用。表10-6 ADC自动动转换触发源源的选择ADTS2:0触 发 源源000连续自由转换001模拟比较器010外部中断0011T/C0比较匹匹配100T/C0溢出101T/C1比较匹匹配B110T/C1溢出111T/C1输入捕捕捉本例中我们不使使用自动转换换功能,所以以该寄存器可可以不必设置置。6.2.3、电电路本实例的电路包包括232电电平转换电路路和电阻分压压电路,这两两种电路在前前面的实例中中均做过介绍绍,这里不再再重复。1、电路原理在本实例中利用用MAX32232芯片使使单片机输
34、出出的TTL电电平转换为标标准的RS2232电平,从从而使计算机机能够识别。同同时将计算机机输出的RSS232电平平转换为单片片机可以识别别的TTL电电平。利用电位器产生生电阻分压电电路,从而产产生变化的模模拟电压加到到单片机的模模拟信号采集集端口,供单单片机采集。2、电路连接电路中MAX33232芯片片的9、100引脚分别连连接单片机的的PD0、PPD1端口,MMAX32332的13、114引脚分别别连接计算机机串口线的33、2脚。电位器RP2的的动片引脚连连接单片机的的模拟信号采采集通道PAA0(ADCC0)。3、特别说明本学习板采用的的是串口插座座是公头的,所所以与计算机机相连的串口口连
35、接线应该该是交叉串口口线,而不是是串口延长线线。5.2.4、程程序设计1、程序功能程序的功能是通通过单片机的的串行接口,将将单片机采集集到的模拟电电压值发送到到计算机中,通通过计算机上上的串口助手手显示采集的的电压值。 单片机串行行接收中断的的编程在本例中,我们们用到了单片片机的串行接接收中断,需需要编写串行行接收中断服服务程序,通通过查询WIINAVR(GGCC)的中中断库函数手手册,可以查查找到ATmmega166单片机串行行接收中断的的中断向量为为USARTT_RXC_vect。据据此我们可以以编写串行接接收中断服务务程序,如下下:/接收中断函函数ISR(USAART_RXXC_vecc
36、t )unsignned chhar Reev;Rev = UDR; /从USARRT I/OO数据寄存器器UDR中中读出数据Usart_PutChhar(Reev); /将将接收到的数数据发送在中断服务程序序中,我们首首先把单片机机串口接收到到的数据放入入变量Revv中,然后调调用上一实例例中编写的串串行接口字节节发送函数将将变量Revv中的数据发发送到计算机机。2、 单片机与与计算机串行行通信结果的的观察在观察本例运行行结果时,我我们同样要用用到串口助手手,本例中,单单片机发送串串口数据采用用的波特率是是9600bbps,数据据格式是8位位数据位,11位停止位,无无奇偶校验。在在串口助手里
37、里面,我们也也要将波特率率和数据格式式设置成一样样的。3、函数说明本实例用到了66个函数,分分别是:void Poort_Innit(vooid); /端端口初始化配配置void Ussart_IInit(vvoid); /UUSART寄寄存器设置void ADD_Initt(voidd); /ADD初始化void Ussart_PPutChaar(unssignedd charr cTXDData); /字字节发送函数数void Ussart_PPutStrring(uunsignned chhar *ppcStriing); / 字字符串发送数数据unsigneed intt AD_GGe
38、tDatta(voiid); /AAD转换函数数 4、使用WIINAVR开开发环境,在在本例中我们们使用的是外外部12M的晶振振,所以需要要将MAKEEFILE文文件中的时钟钟频率修改为为12M。另外外在程序烧录录到单片机的的时候,熔丝丝位也要选择择为外部122M晶振(注意是是晶振,不是是外部振荡器器,一定不要要选择错了,否否则会导致单单片机不能再再烧写程序)。 5、程程序代码#includde #includde #includde /中中断函数头文文件/常量声明#definee BAUDD 96000 /波特率设设置值/全局变量声声明unsigneed intt ADDaata; /AD转
39、换获获得的数据/函数声明void Poort_Innit(vooid); /端端口初始化配配置void Ussart_IInit(vvoid); /UUSART寄寄存器设置void ADD_Initt(voidd); /ADD初始化void Ussart_PPutChaar(unssignedd charr cTXDData); /字字节发送函数数void Ussart_PPutStrring(uunsignned chhar *ppcStriing); / 字字符串发送数数据unsigneed intt AD_GGetDatta(voiid); /AAD转换函数数int maiin(voii
40、d) unsignned chhar Deelay3ss;Port_IInit();Usart_Init();AD_Iniit();Usart_PutSttring(AD转换换测试程序);Usart_PutSttring(测得ADDC0通道的的电压值为:);sei(); /使能全全局中断 while(1)ADDatta = (int)(longg)AD_GGetDatta() * 50100 / 10024);/将获得得的AD值转转换为电压值值 /单位位为mv。Usartt_PutCChar(AADDataa / 10000 + 0 x30); /得得到电压值的的千位并发送送Usartt_Pu
41、tCChar(.); /发送小小数点Usartt_PutCChar(AADDataa % 10000 / 100 + 0 x300); /得到电电压值的百位位并发送Usartt_PutCChar(AADDataa % 1000 / 110 + 00 x30); /得到电压压值的十位并并发送Usartt_PutCChar(AADDataa % 100 + 0 xx30); /得到电压压值的个位并并发送Usartt_PutCChar(V); /发发送电压符号号“V”Usartt_PutCChar(00 x0d); / Usartt_PutCChar(00 x0a); / AD值值发送结束,回回车换
42、行for(DDelay33s = 00;Delaay3s 30;DDelay33s+) /延时3SS_dellay_mss(90);/端口状态初初始化设置函函数void Poort_Innit()PORTA = 0X000; DDRA = 0 x000; /ADC通通道设置为输输入口,高阻阻态/USARTT寄存器配置置函数void Ussart_IInit()UCSRA = 0X000;UCSRC |= (11URSSEL) | (1 UCSSZ1) | (1 UCSSZ0); /异步步,数据格式式8,N,11 /UCSRRC寄存器与与UBRRHH寄存器共用用相同的I/O地址,写写 UCSRR
43、C 时, URSELL 应设置为为 1。UBRRL = (F_CPU / BAUDD / 166 - 1) % 2556; /波特特率设置UBRRH = (F_CPU / BAUDD / 166 - 1) / 2556;UCSRB |= (11 RRXCIE) | (11 RRXEN) | (1 TXXEN); /发送使能/字节发送函函数void Ussart_PPutChaar(unssignedd charr cTXDData)while( !(UCCSRA & (1 UDRRE) ); /只有数据寄寄存器为空时时才能发送数数据UDR = cTXDaata; /发发送数据送UUSART I
44、/O数据据寄存器UUDR/接收中断函函数ISR(USAART_RXXC_vecct )unsignned chhar Reev;Rev = UDR; /从USARRT I/OO数据寄存器器UDR中中读出数据Usart_PutChhar(Reev); /将将接收到的数数据发送void Ussart_PPutStrring(uunsignned chhar *ppcStriing)while (*pcSStringg)Usartt_PutCChar(*pcStrring+); Usart_PutChhar(0 xx0D);Usart_PutChhar(0 xx0A); /结尾发发送回车换行行/AD
45、转换初初始化函数void ADD_Initt()ADMUX |= (11 RREFS0); /ADDC参考电压压为AVccc,ADC结结果右对齐,选选择通道ADDC0ADCSRAA |= (1 ADEN) | (11 AADPS2) | (11 AADPS1); /使使能AD转换换,ADC时时钟64分频频/AD转换函函数unsigneed intt AD_GGetDatta()ADCSRAA |= (1 ADSC); /开始始AD转换while(!(ADCCSRA & (1 ADIIF); /等待转换换完成ADCSRAA |= (1 ADIF); /清零AADC中断标标志位returnn AD
46、C; /返回ADCC值附录:ADC应应用设计要点点1预分频与转转换时间在通常情况下,AADC的逐次次比较转换电电路要达到最最大精度时,需需要50kHHz2000kHz之间间的采样时钟钟。在要求转转换精度低于于10位的情情况下,ADDC的采样时时钟可以高于于200kHHz,以获得得更高的采样样率。ADC模块中包包含一个预分分频器的ADDC时钟源,它它可以对大于于100KHHz的系统时时钟进行分频频,以获得合合适的ADCC时钟提供AADC使用。预预分频器的分分频系数由AADCSRAA寄存器中的的ADPS位位设置的。一一旦寄存器AADCSRAA中的ADEEN位置“1”(ADC开开始工作),预预分频器
47、就启启动开始计数数。ADENN位为“1”时,预分频频器将一直工工作;ADEEN位为“0”时,预分频频器一直处在在复位状态。AVR的ADCC完成一次转转换的时间见见表6.2.5。从表中中可以看出,完完成一次ADDC转换通常常需要13-14个ADDC时钟。而而启动ADCC开始第一次次转换到完成成的时间需要要25个ADDC时钟,这这是因为要对对ADC单元元的模拟电路路部分进行初初始化。表6.2.5 ADC转换和和采样保持时时间转 换 形 式式采样保持时间完 成 转 换换 总 时 间启动ADC后的的第一次转换换13.5个ADDC时钟25个ADC时时钟正常转换,单端端输入1.5个ADCC时钟13个ADC
48、时时钟自动触发方式2个ADC时钟钟13.5个ADDC时钟正常转换,差分分输入1.5/2.55个ADC时时钟13/14个AADC时钟当ADCSRAA寄存器中的的ADSC位位置位,启动动ADC转换换时,A/DD转换将在随随后ADC时时钟的上升沿沿开始。一次次正常的A/D转换开始始时,需要11.5个ADCC时钟周期的的采样保持时时间(ADCC首次启动后后需要13.5个ADCC时钟周期的的采样保持时时间)。当一一次A/D转转换完成后,转转换结果写入入ADC数据据寄存器,AADIF(AADC中断标标志位)将被被置位。在单单次转换模式式下,ADSSC也同时被被清零。用户户程序可以再再次置位ADDSC位,新
49、新的一次转换换将在下一个个ADC时钟钟的上升沿开开始。当ADC设置为为自动触发方方式时,触发发信号的上升升沿将启动一一次ADC转转换。转换完完成的结果将将一直保持到到下一次触发发信号的上升升沿出现,然然后开始新的的一次ADCC转换。这就就保证了使AADC每隔一一定的时间间间隔进行一次次转换。在这这种方式下,AADC需要22个ADC时时钟周期的采采样保持时间间。在自由连续转换换模式下,一一次转换完毕毕后马上开始始一次新的转转换,此时,AADSC位一一直保持为“1”。2ADC输入入通道和参考考电源的选择择寄存器ADMUUX中的MUUXn和REEFS1、RREFS0位位实际上是一一个缓冲器,该该缓冲
50、器与一一个MCU可可以随机读取取的临时寄存存器相连通。采采用这种结构构,保证了AADC输入通通道和参考电电源只能在AADC转换过过程中的安全全点被改变。在在ADC转换换开始前,通通道和参考电电源可以不断断被更新,一一旦转换开始始,通道和参参考电源将被被锁定,并保保持足够时间间,以确保AADC转换的的正常进行。在在转换完成前前的最后一个个ADC时钟钟周期(ADDCSRA的的ADIF位位置“1”时),通道道和参考电源源又开始重新新更新。注意意,由于A/D转换开始始于置位ADDSC后的第第一个ADCC时钟的上升升沿,因此,在在置位ADSSC后的一个个ADC时钟钟周期内不要要将一个新的的通道或参考考电
51、源写入到到ADMUXX寄存器中。改变差分输入通通道时需特别别当心。一旦旦确定了差分分输入通道,增增益放大器需需要125s的稳定时间间。所以在选选择了新的差差分输入通道道后的1255s内不要启动动A/D转换换,或将这段段时间内转换换结果丢弃。通通过改变ADDMUX中的的REFS11、REFSS0来更改参参考电源后,第第一次差分转转换同样要遵遵循以上的时时间处理过程程。当要改变ADCC输入通道时时,应该遵守守以下方式,以以保证能够选选择到正确的的通道:在单次转换模式式下,总是在在开始转换前前改变通道设设置。尽管输输入通道改变变发生在ADDSC位被写写入“1”后的1个AADC时钟周周期内,然而而,最
52、简单的的方法是等到到转换完成后后,再改变通通道选择。在连续转换模式式下,总是在在启动ADCC开始第一次次转换前改变变通道设置。尽尽管输入通道道改变发生在在ADSC位位被写入“1”后的1个AADC时钟周周期内,然而而,最简单的的方法是等到到第一次转换换完成后再改改变通道的设设置。然而由由于此时新一一次的转换已已经自动开始始,所以,当当前这次的转转换结果仍反反映前一通道道的转换值,而而下一次的转转换结果将为为新设置通道道的值。ADC电压参考考源ADC的参考电电压(VREF)决定定了A/D转转换的范围。如如果单端通道道的输入电压压超过VREF,将导导致转换结果果接近于0 xx3FF。AADC的参考考
53、电压VREF可以选选择为AVCCC或芯片内内部的2.556V参考源源,或者为外外接在AREEF引脚上的的参考电压源源。AVCC通过一一个无源开关关连接到ADDC。内部22.56V参参考源是由内内部能隙参考考源(VBC)通过内内部的放大器器产生的。注注意,无论选选用什么内部部参考电源,外外部AREFF引脚都是直直接与ADCC相连的,因因此,可以通通过外部在AAREF引脚脚和地之间并并接一个电容容,使内部参参考电源更加加稳定和抗噪噪。可以通过过使用高阻电电压表测量AAREF引脚脚,来获得参参考电源VREF的电压压值。由于VVREF是一个个高阻源,因因此,只有容容性负载可以以连接到该引引脚。如果将一
54、个外部部固定的电压压源连接到AAREF引脚脚,那就不能能使用任何的的内部参考电电源,否则就就会使外部电电压源短路。外外部参考电源源的范围应在在2.0V到到AVCC-0.22V之间。参参考电源改变变后的第一次次ADC转换换结果可能不不太准确,建建议抛弃该次次转换结果。3ADC转换换结果A/D转换结束束后(ADIIF = 11),在ADDC数据寄存存器(ADCCL和ADCCH)中可以以取得转换的的结果。对于于单端输入的的A/D转换换,其转换结结果为:ADC =(VVIN1024)/ VREFF其中VIN表示示选定的输入入引脚上的电电压,VREEF表示选定定的参考电源源的电压。00 x000表表示输
55、入引脚脚的电压为模模拟地,0 xx3FF表示示输入引脚的的电压为参考考电压值减去去一个LSBB。对于差分转换,其其结果为:ADC=(VPPOS-VNEG) GAIN512/VVREF例:若差分输入入通道选择为为ADC3-ADC2,110倍增益,参参考电压2.56V,左左端对齐(AADMUX=0 xED),AADC3引脚脚上电压3000mV,AADC2引脚脚上电压5000mV。则ADCR =(300-500)10512 / 25600 = -4400 = 0 x2700ADCL=0 xx00,ADDCH=0 xx9C。若结果为右端对对齐时(ADDLAR=“0”),则ADDCL=0 xx70,AD
56、DCH=0 xx02。附录2、ADCC应用设计的的深入讨论尽管AVR内部部集成了100位的ADCC,但是在实实际应用中,要要想真正实现现10位精度度,比较稳定定的ADC的的话,并不象象上一节中的的例子那么简简单。需要进进一步从硬件件、软件等方方面进行综合合的、细致的的考虑。下面面介绍一些在在ADC设计计应用中应该该考虑的几个个要点。1AVcc的的稳定性。AVcc是提供供给ADC工工作的电源,如如果AVccc不稳定,就就会影响ADDC的转换精精度。在图110-5中,系系统电源通过过一个LC滤滤波后接入AAVcc,这这样就能很好好的抑制掉系系统电源中的的高频躁声,提提高了AVccc的稳定性性。另外在要要求比较高的的场合使用AADC时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 快速解读造价咨询招标
- 招标寻找专业可靠房地产销售代理公司
- 2024天津市小型建设工程施工合同范本
- 2024送气工聘用合同
- 建筑工具转让合同模板
- 物资丢失赔偿合同模板
- 外贸合同范例
- 护士证注册合同模板
- 燃气协议合同范例
- 玉器代销合同模板
- 毕业设计(论文):关于绿色物流的发展现状与应对措施
- 采购管理系统中运用业务重组的几点思考
- 有丝分裂课件.上课
- 第二部分项目管理人员配备情况及相关证明、业绩资料
- 旅游发展产业大会总体方案
- 民用机场竣工验收质量评定标准
- 汽车应急启动电源项目商业计划书写作范文
- 浅谈“低起点-小步子-勤练习-快反馈”教学策略
- 磁制冷技术的研究及应用
- 电缆桥架安装施工组织设计(完整版)
- 两癌筛查质控评估方案
评论
0/150
提交评论