当前位置:首页 > 单片机 > 单片机
[导读] /*AVR的模拟比较器模块可以用来比较接在AIN0(mega16PB2的第二功能)和AIN1(PB3)两个引脚的电压大小。程序操作流程:初始化>>开中断>>中断服务程序判断,比较结果将会同步到模拟比较器控制和状态寄存器-

/*
AVR的模拟比较器模块可以用来比较接在AIN0(mega16PB2的第二功能)和AIN1(PB3)两个引脚的电压大小。
程序操作流程:初始化>>开中断>>中断服务程序判断,比较结果将会同步到
模拟比较器控制和状态寄存器-ACSR的第五位ACO,检测ACO的值就可以得出比较结果。AIN0AIN1(ACO=1)






*/
#include
#include
#include"delay.h"

//管脚定义
#defineLED00//PB0
#defineAIN_P2//PB2(AIN0)
#defineAIN_N3//PB3(AIN1)

//宏定义
#defineLED0_ON()PORTB|=(1<#defineLED0_OFF()PORTB&=~(1<
//常量定义
/*
模拟比较器的正输入端由ACBG位决定,=0选择AIN0引脚,=1选择1.23V内部能隙基准源

模拟比较器多工输入(不常用,因为ADC将无法使用)
可以选择ADC7..0之中的任意一个来代替模拟比较器的负极输入端。
ADC复用器可用来完成这个功能。
当然,为了使用这个功能首先必须关掉ADC。
如果模拟比较器复用器使能位(SFIOR中的ACME)被置位,且ADC也已经关掉(ADCSRA寄存器的ADEN为0),
则可以通过ADMUX寄存器的MUX2..0来选择替代模拟比较器负极输入的管脚,
如果ACME清零或ADEN置位,则模拟比较器的负极输入为AIN1。

*/
#defineAC_ADC00x00//ADC0
#defineAC_ADC10x01//ADC1
#defineAC_ADC20x02//ADC2
#defineAC_ADC30x03//ADC3
#defineAC_ADC40x04//ADC4
#defineAC_ADC50x05//ADC5
#defineAC_ADC60x06//ADC6
#defineAC_ADC70x07//ADC7

voidport_init(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=~((1<上拉电阻。
DDRB=(1<PORTC=0x00;//m103outputonly
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
}


//初始化的步骤,关中断,更改ACSR的值,配置模拟比较器,开中断。
//Comparatorinitialize
//triggeron:Outputtoggle
voidcomparator_init(void)
{
ACSR=ACSR&0xF7;//ensureinterruptisoffbeforechanging
//上面一句会使ACIE为零,不允许中断
ACSR=(1}

#pragmainterrupt_handlerana_comp_isr:17
voidana_comp_isr(void)
{
//analogcomparatorcompareevent
//硬件自动清除ACI标志位
delay_us(10);
if((ACSR&(1LED0_ON();//如果AIN0else
LED0_OFF();//否则LED灭
delay_ms(200);//当电压差接近0V时,模拟比较器会产生临界抖动,故延时200mS令肉眼能看到
}

//callthisroutinetoinitializeallperipherals
voidinit_devICes(void)
{
//stoperrantinterruptsuntilsetup
CLI();//dISAbleallinterrupts
port_init();
comparator_init();

MCUCR=0x00;
GICR=0x00;
TIMSK=0x00;//timerinterruptsources
SEI();//re-enableinterrupts
//allperipheralsarenowinitialized
}

voidmain(void)
{
init_devices();
while(1)
;
}

/*
程序测试:

VCCVCC
||
||||
AIN0--|W||W|--AIN1PB0---R---LED--
|||||
|||
GNDGNDGND

两个电位器,一端接VCC,一端接地,构成电位器分压电路
AIN0和AIN1都分别接到电位器的中心抽头。
PBO输出串电阻驱动LED,高电平有效。
然后分别旋转电位器,增减抽头的电压,将会发现PB0的输出(LED0)会根据AIN0/AIN1的电压关系变动
由于电源纹波,IO电流及外界干扰的影响,当电压差接近0V时,模拟比较器会产生临界抖动,AIN0/AIN1对地并上小电容可以改善这种情况。

只有一个电位器时,可以变通
1可以使能ACBG,利用1.23V内部能隙基准源代替AIN0作模拟比较器的正输入端。
ACSR=(1<2可以使能ADC的内部2.56V电压基准,然后把AIN0或AIN1连接到PIN32AREF脚。
ADCSRA=(1
*/


/*
模拟比较器控制和状态寄存器-ACSR

Bit7–ACD:模拟比较器禁用
模拟比较器上电默认是已经工作中的,跟其他的模块有所不同
ACD置位时,模拟比较器的电源被切断。可以在任何时候设置此位来关掉模拟比较器。
这可以减少器件工作模式及空闲模式下的功耗。
改变ACD位时,必须清零ACSR寄存器的ACIE位来禁止模拟比较器中断。否则ACD改变时可能会产生中断

Bit6–ACBG:选择模拟比较器的能隙基准源
ACBG置位后,模拟比较器的正极输入由1.23V能隙基准源所取代。否则,AIN0连接到模拟比较器的正极输入。

Bit5–ACO:模拟比较器输出
模拟比较器的输出经过同步后直接连到ACO。同步机制引入了1-2个时钟周期的延时。

Bit4–ACI:模拟比较器中断标志
当比较器的输出事件触发了由ACIS1及ACIS0定义的中断模式时,ACI置位。
如果ACIE和SREG寄存器的全局中断标志I也置位,那么模拟比较器中断服务程序即得以执行,同时ACI被硬件清零。
ACI也可以通过写"1”来清零。

Bit3–ACIE:模拟比较器中断使能
当ACIE位被置"1”且状态寄存器中的全局中断标志I也被置位时,模拟比较器中断被激活。
否则中断被禁止。

Bit2–ACIC:模拟比较器输入捕捉使能
这个功能用于检测一些微弱的触发信号源,节省一个外部运放。
ACIC置位后允许通过模拟比较器来触发T/C1的输入捕捉功能。
此时比较器的输出被直接连接到输入捕捉的前端逻辑,从而使得比较器可以利用T/C1输入捕捉中断逻辑的噪声抑制器及触发沿选择功能。
为了使比较器可以触发T/C1的输入捕捉中断,定时器中断屏蔽寄存器TIMSK的TICIE1必须置位。
ACIC为"0”时模拟比较器及输入捕捉功能之间没有任何联系。

Bits1,0–ACIS1,ACIS0:模拟比较器中断模式选择
这两位确定触发模拟比较器中断的事件。
ACIS1ACIS0中断模式
00比较器输出变化即可触发中断
01保留
10比较器输出的下降沿产生中断
11比较器输出的上升沿产生中断
需要改变ACIS1/ACIS0时,必须清零ACSR寄存器的中断使能位来禁止模拟比较器中断。否则有可能在改变这两位时产生中断。
*/

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭