您的位置 首页 IOT

avr单片机模仿比较器初始化装备及阐明

avr模拟比较器对正极AIN0的值与负极AIN1的值进行比较。当AIN0上的电压比负极AIN1上的电压要高时,模拟比较器的输出ACO即…

avr模仿比较器对正极 AIN0 的值与负极 AIN1 的值进行比较。当 AIN0 上的电压比负极 AIN1

上的电压要高时,模仿比较器的输出 ACO 即置位。比较器的输出可用来触发定时器 / 计
数器 1 的输入捕捉功用。此外,比较器还可触发自己专有的、独立的中止。用户能够挑选
比较器是以上升沿、下降沿仍是替换改动的边缘来触发中止。
/*

特别功用 IO 寄存器- SFIOR

7 6 5 4 3 2 1 0
ADTS2 ADTS1 ADTS0 – ACME PUD PSR2 PSR10

Bit 3 – ACME: 模仿比较器多路复用器使能

当此位为逻辑 “1” ,且ADC 处于封闭状况 (ADCSRA 寄存器的 ADEN 为 “0”) 时,ADC 多
路复用器为模仿比较器挑选负极输入。当此位为 “0” 时, AIN1 连接到比较器的负极输入
端。

模仿比较器操控和状况寄存器-ACSR
7 6 5 4 3 2 1 0

ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0
Bit 7 – ACD: 模仿比较器禁用
ACD 置位时,模仿比较器的电源被堵截。能够在任何时候设置此位来关掉模仿比较器。这
能够削减器材作业形式及闲暇形式下的功耗。改动 ACD 位时,有必要清零 ACSR 寄存器的
ACIE 位来制止模仿比较器中止。不然 ACD 改动时可能会发生中止。

Bit 6 – ACBG: 挑选模仿比较器的能隙基准源
ACBG 置位后,模仿比较器的正极输入由能隙基准源所代替。不然,AIN0 连接到模仿比
较器的正极输入。见 P40 “ 片内基准电压 ” 。

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

Bit 4 – ACI: 模仿比较器中止标志
当比较器的输出事情触发了由ACIS1 及 ACIS0 界说的中止形式时,ACI 置位。假如 ACIE
和 SREG 寄存器的大局中止标志 I 也置位,那么模仿比较器中止服务程序即得以履行,同
时 ACI 被硬件清零。 ACI 也能够经过写 “1” 来清零。

Bit 3 – ACIE: 模仿比较器中止使能
当 ACIE 位被置 “1” 且状况寄存器中的大局中止标志 I 也被置位时,模仿比较器中止被激
活。不然中止被制止。

Bit 2 – ACIC: 模仿比较器输入捕捉使能
ACIC 置位后答应经过模仿比较器来触发T/C1 的输入捕捉功用。此刻比较器的输出被直接
连接到输入捕捉的前端逻辑,然后使得比较器能够运用 T/C1 输入捕捉中止逻辑的噪声抑
制器及触发沿挑选功用。 ACIC 为 “0” 时模仿比较器及输入捕捉功用之间没有任何联络。
为了使比较器能够触发 T/C1 的输入捕捉中止,定时器中止屏蔽寄存器 TIMSK 的 TICIE1
有必要置位。

Bits 1, 0 – ACIS1, ACIS0: 模仿比较器中止形式挑选
这两位确认触发模仿比较器中止的事情。

ACIS1/ACIS0 设置

ACIS1 ACIS0 中止形式
0 0 比较器输出改动即可触发中止
0 1 保存
1 0 比较器输出的下降沿发生中止
1 1 比较器输出的上升沿发生中止

需求改动 ACIS1/ACIS0 时,有必要清零 ACSR 寄存器的中止使能位来制止模仿比较器中
断。不然有可能在改动这两位时发生中止。

模仿比较器多工输入
能够挑选 ADC7..0 之中的恣意一个来代替模仿比较器的负极输入端。ADC 复用器可用来
完结这个功用。当然,为了运用这个功用首要有必要关掉 ADC。假如模仿比较器复用器使
能位 (SFIOR 中的ACME) 被置位,且 ADC 也现已关掉 (ADCSRA 寄存器的ADEN 为 0) ,
则能够经过 ADMUX 寄存器的 MUX2..0 来挑选代替模仿比较器负极输入的管脚,
假如 ACME 清零或 ADEN 置位,则模仿比较器的负极输入为 AIN1。

模仿比较器复用输入
ACME ADEN MUX2..0 模仿比较器负极输入
0 x xxx AIN1
1 1 xxx AIN1
1 0 000 ADC0
1 0 001 ADC1
1 0 010 ADC2
1 0 011 ADC3
1 0 100 ADC4
1 0 101 ADC5
1 0 110 ADC6
1 0 111 ADC7

*/
#include
#include
#pragma interrupt_handler ANA_COMP_inter:iv_ANA_COMP
#pragma interrupt_handler Timer1_CAPT:iv_TIMER1_CAPT
unsigned int ANA_COMP_fun=0;
unsigned int T1_CAPT=0;
void T1_capt_init(void)
{
TCNT1=500;//能够赋值,也能够不必。默许是0
TCCR1A=0x00; //一般端口操作
TCCR1B|=0X04;//TCCR1B=0X03;256分频.
TCCR1B|=0x80;//ICNC1:1使能噪声捕捉功用
TCCR1B|=1<<ICES1;//噪声捕捉事情的触发方法 ICES1为 0下降沿,1上升沿,
TIMSK|=0x20; //T1事情捕捉中止使能
}

void ANA_COMP_init(unsigned char mode,unsigned char ANI1_select)
{
//SFIOR|=1switch(mode)
{
case 0:ACSR&=~((1if(ANI1_select)//假如ANI1_select=0,默许的是模仿比较器的负极输入端
{
switch(ANI1_select)
{
case 1:SFIOR|=1}

T1_capt_init();
// 假如要用到边缘触发功用,就用用到T/C1 的输入捕捉功用中的触发沿挑选功用
//假如不必边缘触发功用,也不必T/C1 的输入捕捉功用,一下两行不必,就屏蔽掉吧。
ACSR|=1ICIE1;//T/C1 的输入捕捉中止使能

}

SREG|=0x80; //敞开大局中止
}

void ANA_COMP_inter()
{
ANA_COMP_fun++;

}
void Timer1_CAPT()
{
T1_CAPT=ICR1;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/iot/266651.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部